{
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.PositionCheckSpan.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.PositionCheckSpan.html",
    "title": "Class SpanPositionCheckQuery.PositionCheckSpan | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanPositionCheckQuery.PositionCheckSpan Inheritance System.Object Spans SpanPositionCheckQuery.PositionCheckSpan Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax protected class PositionCheckSpan : Spans Constructors | Improve this Doc View Source PositionCheckSpan(SpanPositionCheckQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public PositionCheckSpan(SpanPositionCheckQuery outerInstance, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanPositionCheckQuery outerInstance AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start Methods | Improve this Doc View Source DoNext() Declaration protected virtual bool DoNext() Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.html",
    "title": "Class SpanPositionCheckQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanPositionCheckQuery Base class for filtering a SpanQuery based on the position of a match. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanNearPayloadCheckQuery SpanPayloadCheckQuery SpanPositionRangeQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString(String) Query.ToString() Query.Clone() Query.GetHashCode() Query.Equals(Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanPositionCheckQuery : SpanQuery Constructors | Improve this Doc View Source SpanPositionCheckQuery(SpanQuery) Declaration public SpanPositionCheckQuery(SpanQuery match) Parameters Type Name Description SpanQuery match Fields | Improve this Doc View Source m_match Declaration protected SpanQuery m_match Field Value Type Description SpanQuery Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Match Declaration public virtual SpanQuery Match { get; } Property Value Type Description SpanQuery The SpanQuery whose matches are filtered. Methods | Improve this Doc View Source AcceptPosition(Spans) Implementing classes are required to return whether the current position is a match for the passed in \"match\" SpanQuery . This is only called if the underlying Next() for the match is successful Declaration protected abstract SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans The Spans instance, positioned at the spot to check Returns Type Description SpanPositionCheckQuery.AcceptStatus Whether the match is accepted, rejected, or rejected and should move to the next doc. See Also Next () | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionRangeQuery.html",
    "title": "Class SpanPositionRangeQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanPositionRangeQuery Checks to see if the Match lies between a start and end position Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPositionRangeQuery SpanFirstQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanPositionRangeQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanPositionRangeQuery(SpanQuery, Int32, Int32) Declaration public SpanPositionRangeQuery(SpanQuery match, int start, int end) Parameters Type Name Description SpanQuery match System.Int32 start System.Int32 end Fields | Improve this Doc View Source m_end Declaration protected int m_end Field Value Type Description System.Int32 | Improve this Doc View Source m_start Declaration protected int m_start Field Value Type Description System.Int32 Properties | Improve this Doc View Source End Declaration public virtual int End { get; } Property Value Type Description System.Int32 The maximum end position permitted in a match. | Improve this Doc View Source Start Declaration public virtual int Start { get; } Property Value Type Description System.Int32 The minimum position permitted in a match Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object) See Also SpanFirstQuery"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanQuery.html",
    "title": "Class SpanQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanQuery Base class for span-based queries. Inheritance System.Object Query SpanQuery FieldMaskingSpanQuery SpanMultiTermQueryWrapper<Q> SpanNearQuery SpanNotQuery SpanOrQuery SpanPositionCheckQuery SpanTermQuery Inherited Members Query.Boost Query.ToString(String) Query.ToString() Query.Rewrite(IndexReader) Query.ExtractTerms(ISet<Term>) Query.Clone() Query.GetHashCode() Query.Equals(Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanQuery : Query Properties | Improve this Doc View Source Field Returns the name of the field matched by this query. Note that this may return null if the query matches no terms. Declaration public abstract string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Expert: Returns the matches for this query in an index. Used internally to search for spans. Declaration public abstract Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanRewriteMethod.html",
    "title": "Class SpanRewriteMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanRewriteMethod Abstract class that defines how the query is rewritten. Inheritance System.Object MultiTermQuery.RewriteMethod SpanRewriteMethod SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class SpanRewriteMethod : MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public abstract override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.html",
    "title": "Class MMapDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MMapDirectory File-based Directory implementation that uses System.IO.MemoryMappedFiles.MemoryMappedFile for reading, and FSDirectory.FSIndexOutput for writing. NOTE : memory mapping uses up a portion of the virtual memory address space in your process equal to the size of the file being mapped. Before using this class, be sure your have plenty of virtual address space, e.g. by using a 64 bit runtime, or a 32 bit runtime with indexes that are guaranteed to fit within the address space. On 32 bit platforms also consult MMapDirectory(DirectoryInfo, LockFactory, Int32) if you have problems with mmap failing because of fragmented address space. If you get an System.OutOfMemoryException , it is recommended to reduce the chunk size, until it works. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying channel immediately if at the same time the thread is blocked on IO. The channel will remain closed and subsequent access to MMapDirectory will throw a System.ObjectDisposedException . Inheritance System.Object Directory BaseDirectory FSDirectory MMapDirectory Implements System.IDisposable Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class MMapDirectory : FSDirectory, IDisposable Constructors | Improve this Doc View Source MMapDirectory(DirectoryInfo) Create a new MMapDirectory for the named location and NativeFSLockFactory . Declaration public MMapDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(DirectoryInfo, LockFactory) Create a new MMapDirectory for the named location. Declaration public MMapDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(DirectoryInfo, LockFactory, Int32) Create a new MMapDirectory for the named location, specifying the maximum chunk size used for memory mapping. Declaration public MMapDirectory(DirectoryInfo path, LockFactory lockFactory, int maxChunkSize) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); System.Int32 maxChunkSize maximum chunk size (default is 1 GiBytes for 64 bit runtimes and 256 MiBytes for 32 bit runtimes) used for memory mapping. Especially on 32 bit platform, the address space can be very fragmented, so large index files cannot be mapped. Using a lower chunk size makes the directory implementation a little bit slower (as the correct chunk may be resolved on lots of seeks) but the chance is higher that mmap does not fail. On 64 bit platforms, this parameter should always be 1 << 30 , as the address space is big enough. Please note: The chunk size is always rounded down to a power of 2. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(String) Create a new MMapDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public MMapDirectory(string path) Parameters Type Name Description System.String path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(String, LockFactory) Create a new MMapDirectory for the named location. LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public MMapDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source MMapDirectory(String, LockFactory, Int32) Create a new MMapDirectory for the named location, specifying the maximum chunk size used for memory mapping. LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public MMapDirectory(string path, LockFactory lockFactory, int maxChunkSize) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); System.Int32 maxChunkSize maximum chunk size (default is 1 GiBytes for 64 bit runtimes and 256 MiBytes for 32 bit runtimes) used for memory mapping. Especially on 32 bit platform, the address space can be very fragmented, so large index files cannot be mapped. Using a lower chunk size makes the directory implementation a little bit slower (as the correct chunk may be resolved on lots of seeks) but the chance is higher that mmap does not fail. On 64 bit platforms, this parameter should always be 1 << 30 , as the address space is big enough. Please note: The chunk size is always rounded down to a power of 2. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Fields | Improve this Doc View Source DEFAULT_MAX_BUFF Default max chunk size. Declaration public static readonly int DEFAULT_MAX_BUFF Field Value Type Description System.Int32 See Also MMapDirectory(DirectoryInfo, LockFactory, Int32) Properties | Improve this Doc View Source MaxChunkSize Returns the current mmap chunk size. Declaration public int MaxChunkSize { get; } Property Value Type Description System.Int32 See Also MMapDirectory(DirectoryInfo, LockFactory, Int32) Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.NativeFSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NativeFSLockFactory.html",
    "title": "Class NativeFSLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NativeFSLockFactory Implements LockFactory using native OS file locks. For NFS based access to an index, it's recommended that you try SimpleFSLockFactory first and work around the one limitation that a lock file could be left when the runtime exits abnormally. The primary benefit of NativeFSLockFactory is that locks (not the lock file itsself) will be properly removed (by the OS) if the runtime has an abnormal exit. Note that, unlike SimpleFSLockFactory , the existence of leftover lock files in the filesystem is fine because the OS will free the locks held against these files even though the files still remain. Lucene will never actively remove the lock files, so although you see them, the index may not be locked. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory NativeFSLockFactory Inherited Members FSLockFactory.m_lockDir FSLockFactory.SetLockDir(DirectoryInfo) FSLockFactory.LockDir FSLockFactory.ToString() LockFactory.m_lockPrefix LockFactory.LockPrefix System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class NativeFSLockFactory : FSLockFactory Constructors | Improve this Doc View Source NativeFSLockFactory() Create a NativeFSLockFactory instance, with null (unset) lock directory. When you pass this factory to a FSDirectory subclass, the lock directory is automatically set to the directory itself. Be sure to create one instance for each directory your create! Declaration public NativeFSLockFactory() | Improve this Doc View Source NativeFSLockFactory(DirectoryInfo) Create a NativeFSLockFactory instance, storing lock files into the specified lockDir Declaration public NativeFSLockFactory(DirectoryInfo lockDir) Parameters Type Name Description System.IO.DirectoryInfo lockDir where lock files are created. | Improve this Doc View Source NativeFSLockFactory(String) Create a NativeFSLockFactory instance, storing lock files into the specified lockDirName Declaration public NativeFSLockFactory(string lockDirName) Parameters Type Name Description System.String lockDirName where lock files are created. Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) Extension Methods Number.IsNumber(Object) See Also LockFactory"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryWriter.html",
    "title": "Class TokenInfoDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionaryWriter Inheritance System.Object BinaryDictionaryWriter TokenInfoDictionaryWriter Inherited Members BinaryDictionaryWriter.m_implClazz BinaryDictionaryWriter.m_buffer BinaryDictionaryWriter.Put(String[]) BinaryDictionaryWriter.SharedPrefix(String, String) BinaryDictionaryWriter.AddMapping(Int32, Int32) BinaryDictionaryWriter.GetBaseFileName(String) BinaryDictionaryWriter.WriteTargetMap(String) BinaryDictionaryWriter.WritePosDict(String) BinaryDictionaryWriter.WriteDictionary(String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class TokenInfoDictionaryWriter : BinaryDictionaryWriter Constructors | Improve this Doc View Source TokenInfoDictionaryWriter(Int32) Declaration public TokenInfoDictionaryWriter(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source SetFST(FST<Nullable<Int64>>) Declaration public virtual void SetFST(FST<long?> fst) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst | Improve this Doc View Source Write(String) Declaration public override void Write(string baseDir) Parameters Type Name Description System.String baseDir Overrides BinaryDictionaryWriter.Write(String) | Improve this Doc View Source WriteFST(String) Declaration protected virtual void WriteFST(string filename) Parameters Type Name Description System.String filename"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.ColognePhonetic.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.ColognePhonetic.html",
    "title": "Class ColognePhonetic | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ColognePhonetic Encodes a string into a Cologne Phonetic value. Inheritance System.Object ColognePhonetic Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class ColognePhonetic : IStringEncoder Remarks Implements the KÖlner Phonetik (Cologne Phonetic) algorithm issued by Hans Joachim Postel in 1969. The KÖlner Phonetik is a phonetic algorithm which is optimized for the German language. It is related to the well-known soundex algorithm. Algorithm Step 1: After preprocessing (conversion to upper case, transcription of germanic umlauts , removal of non alphabetical characters) the letters of the supplied text are replaced by their phonetic code according to the following table. LetterContextCode A, E, I, J, O, U, Y0 H- B1 Pnot before H1 D, Tnot before C, S, Z2 F, V, W3 Pbefore H3 G, K, Q4 Ct onset before A, H, K, L, O, Q, R, U, X OR before A, H, K, O, Q, U, X except after S, Z4 Xnot after C, K, Q48 L5 M, N6 R7 S, Z8 Cafter S, Z OR at onset except before A, H, K, L, O, Q, R, U, X OR not before A, H, K, O, Q, U, X 8 D, Tbefore C, S, Z8 Xafter C, K, Q8 (Source: Wikipedia (de): KÖlner Phonetik -- Buchstabencodes ) Example: \"MÜller-LÜdenscheidt\" => \"MULLERLUDENSCHEIDT\" => \"6005507500206880022\" Step 2: Collapse of all multiple consecutive code digits. Example: \"6005507500206880022\" => \"6050750206802\" Step 3: Removal of all codes \"0\" except at the beginning. This means that two or more identical consecutive digits can occur if they occur after removing the \"0\" digits. Example: \"6050750206802\" => \"65752682\" This class is thread-safe. See: Wikipedia (de): Kölner Phonetik (in German) since 1.5 Methods | Improve this Doc View Source Encode(String) Declaration public virtual string Encode(string text) Parameters Type Name Description System.String text Returns Type Description System.String | Improve this Doc View Source GetColognePhonetic(String) Implements the Kölner Phonetik algorithm. In contrast to the initial description of the algorithm, this implementation does the encoding in one pass. Declaration public virtual string GetColognePhonetic(string text) Parameters Type Name Description System.String text Returns Type Description System.String The corresponding encoding according to the Kölner Phonetik algorithm | Improve this Doc View Source IsEncodeEqual(String, String) Declaration public virtual bool IsEncodeEqual(string text1, string text2) Parameters Type Name Description System.String text1 System.String text2 Returns Type Description System.Boolean Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.DaitchMokotoffSoundex.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.DaitchMokotoffSoundex.html",
    "title": "Class DaitchMokotoffSoundex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DaitchMokotoffSoundex Encodes a string into a Daitch-Mokotoff Soundex value. Inheritance System.Object DaitchMokotoffSoundex Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DaitchMokotoffSoundex : IStringEncoder Remarks The Daitch-Mokotoff Soundex algorithm is a refinement of the Russel and American Soundex algorithms, yielding greater accuracy in matching especially Slavish and Yiddish surnames with similar pronunciation but differences in spelling. The main differences compared to the other soundex variants are: coded names are 6 digits long the initial character of the name is coded rules to encoded multi-character n-grams multiple possible encodings for the same name (branching) This implementation supports branching, depending on the used method: Encode(String) branching disabled, only the first code will be returned GetSoundex(String) branching enabled, all codes will be returned, separated by '|' Note: this implementation has additional branching rules compared to the original description of the algorithm. The rules can be customized by overriding the default rules contained in the resource file Lucene.Net.Analysis.Phonetic.Language.dmrules.txt . This class is thread-safe. See: Wikipedia - Daitch-Mokotoff Soundex See: Avotaynu - Soundexing and Genealogy since 1.10 Constructors | Improve this Doc View Source DaitchMokotoffSoundex() Creates a new instance with ASCII-folding enabled. Declaration public DaitchMokotoffSoundex() | Improve this Doc View Source DaitchMokotoffSoundex(Boolean) Creates a new instance. With ASCII-folding enabled, certain accented characters will be transformed to equivalent ASCII characters, e.g. è -> e. Declaration public DaitchMokotoffSoundex(bool folding) Parameters Type Name Description System.Boolean folding If ASCII-folding shall be performed before encoding. Methods | Improve this Doc View Source Encode(String) Encodes a string using the Daitch-Mokotoff soundex algorithm without branching. Declaration public virtual string Encode(string source) Parameters Type Name Description System.String source A string to encode. Returns Type Description System.String A DM Soundex code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. See Also GetSoundex(String) | Improve this Doc View Source GetSoundex(String) Encodes a string using the Daitch-Mokotoff soundex algorithm with branching. In case a string is encoded into multiple codes (see branching rules), the result will contain all codes, separated by '|'. Example: the name \"AUERBACH\" is encoded as both 097400 097500 Thus the result will be \"097400|097500\". Declaration public virtual string GetSoundex(string source) Parameters Type Name Description System.String source A string to encode. Returns Type Description System.String A string containing a set of DM Soundex codes corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. Implements IStringEncoder See Also Soundex"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.html",
    "title": "Class DoubleMetaphone | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleMetaphone Encodes a string into a double metaphone value. This Implementation is based on the algorithm by Lawrence Philips . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. See Original Article See http://en.wikipedia.org/wiki/Metaphone Inheritance System.Object DoubleMetaphone Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphone : IStringEncoder Constructors | Improve this Doc View Source DoubleMetaphone() Creates an instance of this DoubleMetaphone encoder Declaration public DoubleMetaphone() Properties | Improve this Doc View Source MaxCodeLen Gets or Sets the maxCodeLen. Declaration public virtual int MaxCodeLen { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CharAt(String, Int32) Gets the character at index index if available, otherwise it returns System.Char.MinValue so that there is some sort of a default. Declaration protected virtual char CharAt(string value, int index) Parameters Type Name Description System.String value System.Int32 index Returns Type Description System.Char | Improve this Doc View Source Contains(String, Int32, Int32, String[]) Determines whether value contains any of the criteria starting at index start and matching up to length length . Declaration protected static bool Contains(string value, int start, int length, params string[] criteria) Parameters Type Name Description System.String value System.Int32 start System.Int32 length System.String [] criteria Returns Type Description System.Boolean | Improve this Doc View Source Encode(String) Encode the value using DoubleMetaphone. Declaration public virtual string Encode(string value) Parameters Type Name Description System.String value String to encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source GetDoubleMetaphone(String) Encode a value with Double Metaphone. Declaration public virtual string GetDoubleMetaphone(string value) Parameters Type Name Description System.String value String to encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source GetDoubleMetaphone(String, Boolean) Encode a value with Double Metaphone, optionally using the alternate encoding. Declaration public virtual string GetDoubleMetaphone(string value, bool alternate) Parameters Type Name Description System.String value String to encode. System.Boolean alternate Use alternate encode. Returns Type Description System.String An encoded string. | Improve this Doc View Source IsDoubleMetaphoneEqual(String, String) Check if the Double Metaphone values of two System.String values are equal. Declaration public virtual bool IsDoubleMetaphoneEqual(string value1, string value2) Parameters Type Name Description System.String value1 The left-hand side of the encoded System.String.Equals(System.Object) . System.String value2 The right-hand side of the encoded System.String.Equals(System.Object) . Returns Type Description System.Boolean true if the encoded System.String s are equal; false otherwise. | Improve this Doc View Source IsDoubleMetaphoneEqual(String, String, Boolean) Check if the Double Metaphone values of two System.String values are equal, optionally using the alternate value. Declaration public virtual bool IsDoubleMetaphoneEqual(string value1, string value2, bool alternate) Parameters Type Name Description System.String value1 The left-hand side of the encoded System.String.Equals(System.Object) . System.String value2 The right-hand side of the encoded System.String.Equals(System.Object) . System.Boolean alternate Use the alternate value if true . Returns Type Description System.Boolean true if the encoded System.String s are equal; false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.MatchRatingApproachEncoder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.MatchRatingApproachEncoder.html",
    "title": "Class MatchRatingApproachEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchRatingApproachEncoder Match Rating Approach Phonetic Algorithm Developed by Western Airlines in 1977. This class is immutable and thread-safe. See: Wikipedia - Match Rating Approach since 1.8 Inheritance System.Object MatchRatingApproachEncoder Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class MatchRatingApproachEncoder : IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes a string using the Match Rating Approach (MRA) algorithm. Declaration public string Encode(string name) Parameters Type Name Description System.String name String to encode. Returns Type Description System.String The MRA code corresponding to the string supplied. | Improve this Doc View Source IsEncodeEquals(String, String) Determines if two names are homophonous via Match Rating Approach (MRA) algorithm. It should be noted that the strings are cleaned in the same way as Encode(String) . Declaration public virtual bool IsEncodeEquals(string name1, string name2) Parameters Type Name Description System.String name1 First of the 2 strings (names) to compare. System.String name2 Second of the 2 names to compare. Returns Type Description System.Boolean true if the encodings are identical false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Metaphone.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Metaphone.html",
    "title": "Class Metaphone | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Metaphone Encodes a string into a Metaphone value. Initial Java implementation by William B. Brogden. December, 1997 . Permission given by wbrogden for code to be used anywhere. Hanging on the Metaphone by Lawrence Philips in Computer Language of Dec. 1990, p 39. Note, that this does not match the algorithm that ships with PHP, or the algorithm found in the Perl implementations: Text:Metaphone-1.96 (broken link 4/30/2013) Text:Metaphone-1.96 (link checked 4/30/2013) They have had undocumented changes from the originally published algorithm. For more information, see CODEC-57 . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. Inheritance System.Object Metaphone Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Metaphone : IStringEncoder Constructors | Improve this Doc View Source Metaphone() Creates an instance of the Metaphone encoder Declaration public Metaphone() Properties | Improve this Doc View Source MaxCodeLen Gets or Sets Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen . Declaration public virtual int MaxCodeLen { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Encode(String) Encodes a string using the Metaphone algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str String to encode. Returns Type Description System.String The metaphone code corresponding to the string supplied. | Improve this Doc View Source GetMetaphone(String) Find the metaphone value of a string. This is similar to the soundex algorithm, but better at finding similar sounding words. All input is converted to upper case. Limitations: Input format is expected to be a single ASCII word with only characters in the A - Z range, no punctuation or numbers. Declaration public virtual string GetMetaphone(string txt) Parameters Type Name Description System.String txt String to find the metaphone code for. Returns Type Description System.String A metaphone code corresponding to the string supplied. | Improve this Doc View Source IsMetaphoneEqual(String, String) Tests is the metaphones of two strings are identical. Declaration public virtual bool IsMetaphoneEqual(string str1, string str2) Parameters Type Name Description System.String str1 First of two strings to compare. System.String str2 Second of two strings to compare. Returns Type Description System.Boolean true if the metaphones of these strings are identical, false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Nysiis.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Nysiis.html",
    "title": "Class Nysiis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Nysiis Encodes a string into a NYSIIS value. NYSIIS is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. Inheritance System.Object Nysiis Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Nysiis : IStringEncoder Remarks NYSIIS features an accuracy increase of 2.7% over the traditional Soundex algorithm. Algorithm description: Transcode first characters of name MAC -> MCC KN -> NN K -> C PH -> FF PF -> FF SCH -> SSS Transcode last characters of name EE, IE -> Y DT,RT,RD,NT,ND -> D First character of key = first character of name Transcode remaining characters by following these rules, incrementing by one character each time EV -> AF else A,E,I,O,U -> A Q -> G Z -> S M -> N KN -> N else K -> C SCH -> SSS PH -> FF H -> If previous or next is nonvowel, previous W -> If previous is vowel, previous Add current to key if current != last key character If last character is S, remove it If last characters are AY, replace with Y If last character is A, remove it Collapse all strings of repeated characters Add original first character of name as first character of key This class is immutable and thread-safe. See: NYSIIS on Wikipedia See: NYSIIS on dropby.com since 1.7 Constructors | Improve this Doc View Source Nysiis() Creates an instance of the Nysiis encoder with strict mode (original form), i.e. encoded strings have a maximum length of 6. Declaration public Nysiis() | Improve this Doc View Source Nysiis(Boolean) Create an instance of the Nysiis encoder with the specified strict mode: true :encoded strings have a maximum length of 6 false :encoded strings may have arbitrary length Declaration public Nysiis(bool strict) Parameters Type Name Description System.Boolean strict The strict mode. Properties | Improve this Doc View Source IsStrict Indicates the strict mode for this Nysiis encoder. true if the encoder is configured for strict mode, false otherwise. Declaration public virtual bool IsStrict { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Encode(String) Encodes a string using the NYSIIS algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string object to encode. Returns Type Description System.String A Nysiis code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. | Improve this Doc View Source GetNysiis(String) Retrieves the NYSIIS code for a given string. Declaration public virtual string GetNysiis(string str) Parameters Type Name Description System.String str String to encode using the NYSIIS algorithm. Returns Type Description System.String A NYSIIS code for the string supplied. Implements IStringEncoder See Also Soundex"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.RefinedSoundex.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.RefinedSoundex.html",
    "title": "Class RefinedSoundex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RefinedSoundex Encodes a string into a Refined Soundex value. A refined soundex code is optimized for spell checking words. Soundex method originally developed by Margaret Odell and Robert Russell . This class is immutable and thread-safe. Inheritance System.Object RefinedSoundex Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class RefinedSoundex : IStringEncoder Constructors | Improve this Doc View Source RefinedSoundex() Creates an instance of the RefinedSoundex object using the default US English mapping. Declaration public RefinedSoundex() | Improve this Doc View Source RefinedSoundex(Char[]) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. Declaration public RefinedSoundex(char[] mapping) Parameters Type Name Description System.Char [] mapping Mapping array to use when finding the corresponding code for a given character. | Improve this Doc View Source RefinedSoundex(String) Creates a refined Soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. Declaration public RefinedSoundex(string mapping) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. Fields | Improve this Doc View Source US_ENGLISH This static variable contains an instance of the RefinedSoundex using the US_ENGLISH mapping. Declaration public static readonly RefinedSoundex US_ENGLISH Field Value Type Description RefinedSoundex | Improve this Doc View Source US_ENGLISH_MAPPING_STRING since 1.4 Declaration public static readonly string US_ENGLISH_MAPPING_STRING Field Value Type Description System.String Methods | Improve this Doc View Source Difference(String, String) Returns the number of characters in the two encoded strings that are the same. This return value ranges from 0 to the length of the shortest encoded string: 0 indicates little or no similarity, and 4 out of 4 (for example) indicates strong similarity or identical values. For refined Soundex, the return value can be greater than 4. See: MS T-SQL DIFFERENCE since 1.3 Declaration public virtual int Difference(string s1, string s2) Parameters Type Name Description System.String s1 A string that will be encoded and compared. System.String s2 A string that will be encoded and compared. Returns Type Description System.Int32 The number of characters in the two encoded strings that are the same from 0 to to the length of the shortest encoded string. See Also Lucene.Net.Analysis.Phonetic.Language.SoundexUtils.Difference(Lucene.Net.Analysis.Phonetic.Language.IStringEncoder,System.String,System.String) | Improve this Doc View Source Encode(String) Encodes a string using the refined soundex algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string object to encode. Returns Type Description System.String A Soundex code corresponding to the string supplied. | Improve this Doc View Source GetSoundex(String) Retrieves the Refined Soundex code for a given string. Declaration public virtual string GetSoundex(string str) Parameters Type Name Description System.String str String to encode using the Refined Soundex algorithm. Returns Type Description System.String A soundex code for the string supplied. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Soundex.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Soundex.html",
    "title": "Class Soundex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Soundex Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. This class is thread-safe. Although not strictly immutable, the Lucene.Net.Analysis.Phonetic.Language.Soundex.maxLength field is not actually used. Inheritance System.Object Soundex Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Soundex : IStringEncoder Constructors | Improve this Doc View Source Soundex() Creates an instance using Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING . Declaration public Soundex() See Also Soundex(Char[]) Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING | Improve this Doc View Source Soundex(Char[]) Creates a soundex instance using the given mapping. This constructor can be used to provide an internationalized mapping for a non-Western character set. Every letter of the alphabet is \"mapped\" to a numerical value. This char array holds the values to which each letter is mapped. This implementation contains a default map for US_ENGLISH . If the mapping contains an instance of SILENT_MARKER then H and W are not given special treatment. Declaration public Soundex(char[] mapping) Parameters Type Name Description System.Char [] mapping Mapping array to use when finding the corresponding code for a given character. | Improve this Doc View Source Soundex(String) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. If the mapping contains an instance of SILENT_MARKER then H and W are not given special treatment. since 1.4 Declaration public Soundex(string mapping) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. | Improve this Doc View Source Soundex(String, Boolean) Creates a refined soundex instance using a custom mapping. This constructor can be used to customize the mapping, and/or possibly provide an internationalized mapping for a non-Western character set. since 1.11 Declaration public Soundex(string mapping, bool specialCaseHW) Parameters Type Name Description System.String mapping Mapping string to use when finding the corresponding code for a given character. System.Boolean specialCaseHW if true, then Fields | Improve this Doc View Source SILENT_MARKER The marker character used to indicate a silent (ignored) character. These are ignored except when they appear as the first character. Note: the US_ENGLISH_MAPPING_STRING does not use this mechanism because changing it might break existing code. Mappings that don't contain a silent marker code are treated as though H and W are silent. To override this, use the Soundex(String, Boolean) constructor. since 1.11 Declaration public static readonly char SILENT_MARKER Field Value Type Description System.Char | Improve this Doc View Source US_ENGLISH An instance of Soundex using the US_ENGLISH_MAPPING mapping. This treats H and W as silent letters. Apart from when they appear as the first letter, they are ignored. They don't act as separators between duplicate codes. Declaration public static readonly Soundex US_ENGLISH Field Value Type Description Soundex See Also Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING US_ENGLISH_MAPPING_STRING | Improve this Doc View Source US_ENGLISH_GENEALOGY An instance of Soundex using the mapping as per the Genealogy site: http://www.genealogy.com/articles/research/00000060.html This treats vowels (AEIOUY), H and W as silent letters. Such letters are ignored (after the first) and do not act as separators when dropping duplicate codes. The codes for consonants are otherwise the same as for US_ENGLISH_MAPPING_STRING and US_ENGLISH_SIMPLIFIED . since 1.11 Declaration public static readonly Soundex US_ENGLISH_GENEALOGY Field Value Type Description Soundex | Improve this Doc View Source US_ENGLISH_MAPPING_STRING This is a default mapping of the 26 letters used in US English. A value of 0 for a letter position means do not encode, but treat as a separator when it occurs between consonants with the same code. (This constant is provided as both an implementation convenience and to allow documentation to pick up the value for the constant values page.) Note that letters H and W are treated specially. They are ignored (after the first letter) and don't act as separators between consonants with the same code. Declaration public static readonly string US_ENGLISH_MAPPING_STRING Field Value Type Description System.String See Also Lucene.Net.Analysis.Phonetic.Language.Soundex.US_ENGLISH_MAPPING | Improve this Doc View Source US_ENGLISH_SIMPLIFIED An instance of Soundex using the Simplified Soundex mapping, as described here: http://west-penwith.org.uk/misc/soundex.htm This treats H and W the same as vowels (AEIOUY). Such letters aren't encoded (after the first), but they do act as separators when dropping duplicate codes. The mapping is otherwise the same as for US_ENGLISH . since 1.11 Declaration public static readonly Soundex US_ENGLISH_SIMPLIFIED Field Value Type Description Soundex Properties | Improve this Doc View Source MaxLength Gets or Sets the maxLength. Standard Soundex Declaration [Obsolete(\"This feature is not needed since the encoding size must be constant. Will be removed in 2.0.\")] public virtual int MaxLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Difference(String, String) Encodes the strings and returns the number of characters in the two encoded strings that are the same. This return value ranges from 0 through 4: 0 indicates little or no similarity, and 4 indicates strong similarity or identical values. See: MS T-SQL DIFFERENCE since 1.3 Declaration public virtual int Difference(string s1, string s2) Parameters Type Name Description System.String s1 A string that will be encoded and compared. System.String s2 A string that will be encoded and compared. Returns Type Description System.Int32 The number of characters in the two encoded strings that are the same from 0 to 4. See Also Lucene.Net.Analysis.Phonetic.Language.SoundexUtils.Difference(Lucene.Net.Analysis.Phonetic.Language.IStringEncoder,System.String,System.String) | Improve this Doc View Source Encode(String) Encodes a string using the soundex algorithm. Declaration public virtual string Encode(string str) Parameters Type Name Description System.String str A string to encode. Returns Type Description System.String A Soundex code corresponding to the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. | Improve this Doc View Source GetSoundex(String) Retrieves the Soundex code for a given string. Declaration public virtual string GetSoundex(string str) Parameters Type Name Description System.String str String to encode using the Soundex algorithm. Returns Type Description System.String A soundex code for the string supplied. Exceptions Type Condition System.ArgumentException If a character is not mapped. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilterFactory.html",
    "title": "Class ASCIIFoldingFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ASCIIFoldingFilterFactory Factory for ASCIIFoldingFilter . <fieldType name=\"text_ascii\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ASCIIFoldingFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ASCIIFoldingFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source ASCIIFoldingFilterFactory(IDictionary<String, String>) Creates a new ASCIIFoldingFilterFactory Declaration public ASCIIFoldingFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilter.html",
    "title": "Class CapitalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CapitalizationFilter A filter to apply normal capitalization rules to Tokens. It will make the first letter capital and the rest lower case. This filter is particularly useful to build nice looking facet parameters. This filter is not appropriate if you intend to use a prefix query. Inheritance System.Object AttributeSource TokenStream TokenFilter CapitalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CapitalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CapitalizationFilter(TokenStream) Creates a CapitalizationFilter with the default parameters using the culture from the current thread. Calls CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Declaration public CapitalizationFilter(TokenStream in) Parameters Type Name Description TokenStream in | Improve this Doc View Source CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Creates a CapitalizationFilter with the specified parameters using the culture from the current thread. Declaration public CapitalizationFilter(TokenStream in, bool onlyFirstWord, CharArraySet keep, bool forceFirstLetter, ICollection<char[]> okPrefix, int minWordLength, int maxWordCount, int maxTokenLength) Parameters Type Name Description TokenStream in input tokenstream System.Boolean onlyFirstWord should each word be capitalized or all of the words? CharArraySet keep a keep word list. Each word that should be kept separated by whitespace. System.Boolean forceFirstLetter Force the first letter to be capitalized even if it is in the keep list. System.Collections.Generic.ICollection < System.Char []> okPrefix do not change word capitalization if a word begins with something in this list. System.Int32 minWordLength how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\". System.Int32 maxWordCount if the token contains more then maxWordCount words, the capitalization is assumed to be correct. System.Int32 maxTokenLength The maximum length for an individual token. Tokens that exceed this length will not have the capitalization operation performed. | Improve this Doc View Source CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32, CultureInfo) Creates a CapitalizationFilter with the specified parameters and the specified culture . Declaration public CapitalizationFilter(TokenStream in, bool onlyFirstWord, CharArraySet keep, bool forceFirstLetter, ICollection<char[]> okPrefix, int minWordLength, int maxWordCount, int maxTokenLength, CultureInfo culture) Parameters Type Name Description TokenStream in input tokenstream System.Boolean onlyFirstWord should each word be capitalized or all of the words? CharArraySet keep a keep word list. Each word that should be kept separated by whitespace. System.Boolean forceFirstLetter Force the first letter to be capitalized even if it is in the keep list. System.Collections.Generic.ICollection < System.Char []> okPrefix do not change word capitalization if a word begins with something in this list. System.Int32 minWordLength how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\". System.Int32 maxWordCount if the token contains more then maxWordCount words, the capitalization is assumed to be correct. System.Int32 maxTokenLength The maximum length for an individual token. Tokens that exceed this length will not have the capitalization operation performed. System.Globalization.CultureInfo culture The culture to use for the casing operation. If null, the culture of the current thread will be used. | Improve this Doc View Source CapitalizationFilter(TokenStream, CultureInfo) Creates a CapitalizationFilter with the default parameters and the specified culture . Calls CapitalizationFilter(TokenStream, Boolean, CharArraySet, Boolean, ICollection<Char[]>, Int32, Int32, Int32) Declaration public CapitalizationFilter(TokenStream in, CultureInfo culture) Parameters Type Name Description TokenStream in input tokenstream System.Globalization.CultureInfo culture The culture to use for the casing operation. If null, the culture of the current thread will be used. Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Declaration public static readonly int DEFAULT_MAX_TOKEN_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_WORD_COUNT Declaration public static readonly int DEFAULT_MAX_WORD_COUNT Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.CapitalizationFilterFactory.html",
    "title": "Class CapitalizationFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CapitalizationFilterFactory Factory for CapitalizationFilter . The factory takes parameters: \"onlyFirstWord\" - should each word be capitalized or all of the words? \"keep\" - a keep word list. Each word that should be kept separated by whitespace. \"keepIgnoreCase - true or false. If true, the keep list will be considered case-insensitive. \"forceFirstLetter\" - Force the first letter to be capitalized even if it is in the keep list \"okPrefix\" - do not change word capitalization if a word begins with something in this list. for example if \"McK\" is on the okPrefix list, the word \"McKinley\" should not be changed to \"Mckinley\" \"minWordLength\" - how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\" \"maxWordCount\" - if the token contains more then maxWordCount words, the capitalization is assumed to be correct. <fieldType name=\"text_cptlztn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CapitalizationFilterFactory\" onlyFirstWord=\"true\" keep=\"java solr lucene\" keepIgnoreCase=\"false\" okPrefix=\"McK McD McA\"/> </analyzer> </fieldType> @since solr 1.3 Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CapitalizationFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CapitalizationFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source CapitalizationFilterFactory(IDictionary<String, String>) Creates a new CapitalizationFilterFactory Declaration public CapitalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CULTURE Declaration public const string CULTURE = \"culture\" Field Value Type Description System.String | Improve this Doc View Source FORCE_FIRST_LETTER Declaration public const string FORCE_FIRST_LETTER = \"forceFirstLetter\" Field Value Type Description System.String | Improve this Doc View Source KEEP Declaration public const string KEEP = \"keep\" Field Value Type Description System.String | Improve this Doc View Source KEEP_IGNORE_CASE Declaration public const string KEEP_IGNORE_CASE = \"keepIgnoreCase\" Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_LENGTH Declaration public const string MAX_TOKEN_LENGTH = \"maxTokenLength\" Field Value Type Description System.String | Improve this Doc View Source MAX_WORD_COUNT Declaration public const string MAX_WORD_COUNT = \"maxWordCount\" Field Value Type Description System.String | Improve this Doc View Source MIN_WORD_LENGTH Declaration public const string MIN_WORD_LENGTH = \"minWordLength\" Field Value Type Description System.String | Improve this Doc View Source OK_PREFIX Declaration public const string OK_PREFIX = \"okPrefix\" Field Value Type Description System.String | Improve this Doc View Source ONLY_FIRST_WORD Declaration public const string ONLY_FIRST_WORD = \"onlyFirstWord\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilter.html",
    "title": "Class CodepointCountFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CodepointCountFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of Unicode codepoints. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter CodepointCountFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CodepointCountFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source CodepointCountFilter(LuceneVersion, TokenStream, Int32, Int32) Create a new CodepointCountFilter . This will filter out tokens whose CharTermAttribute is either too short ( CodePointCount(Char[], Int32, Int32) < min) or too long ( CodePointCount(Char[], Int32, Int32) > max). Declaration public CodepointCountFilter(LuceneVersion version, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume System.Int32 min the minimum length System.Int32 max the maximum length Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.AbstractEncoder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.AbstractEncoder.html",
    "title": "Class AbstractEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractEncoder Base class for payload encoders. Inheritance System.Object AbstractEncoder IdentityEncoder IntegerEncoder SingleEncoder Implements IPayloadEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class AbstractEncoder : IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[]) Declaration public virtual BytesRef Encode(char[] buffer) Parameters Type Name Description System.Char [] buffer Returns Type Description BytesRef | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public abstract BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilter.html",
    "title": "Class DelimitedPayloadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DelimitedPayloadTokenFilter Characters before the delimiter are the \"token\", those after are the payload. For example, if the delimiter is '|', then for the string \"foo|bar\", foo is the token and \"bar\" is a payload. Note, you can also include a IPayloadEncoder to convert the payload in an appropriate way (from characters to bytes). Note make sure your Tokenizer doesn't split on the delimiter, or this won't work Inheritance System.Object AttributeSource TokenStream TokenFilter DelimitedPayloadTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DelimitedPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DelimitedPayloadTokenFilter(TokenStream, Char, IPayloadEncoder) Declaration public DelimitedPayloadTokenFilter(TokenStream input, char delimiter, IPayloadEncoder encoder) Parameters Type Name Description TokenStream input System.Char delimiter IPayloadEncoder encoder Fields | Improve this Doc View Source DEFAULT_DELIMITER Declaration public const char DEFAULT_DELIMITER = '|' Field Value Type Description System.Char Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilterFactory.html",
    "title": "Class DelimitedPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DelimitedPayloadTokenFilterFactory Factory for DelimitedPayloadTokenFilter . <fieldType name=\"text_dlmtd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DelimitedPayloadTokenFilterFactory\" encoder=\"float\" delimiter=\"|\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory DelimitedPayloadTokenFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DelimitedPayloadTokenFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source DelimitedPayloadTokenFilterFactory(IDictionary<String, String>) Creates a new DelimitedPayloadTokenFilterFactory Declaration public DelimitedPayloadTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DELIMITER_ATTR Declaration public const string DELIMITER_ATTR = \"delimiter\" Field Value Type Description System.String | Improve this Doc View Source ENCODER_ATTR Declaration public const string ENCODER_ATTR = \"encoder\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.IdentityEncoder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.IdentityEncoder.html",
    "title": "Class IdentityEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityEncoder Does nothing other than convert the char array to a byte array using the specified encoding. Inheritance System.Object AbstractEncoder IdentityEncoder Implements IPayloadEncoder Inherited Members AbstractEncoder.Encode(Char[]) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IdentityEncoder : AbstractEncoder, IPayloadEncoder Constructors | Improve this Doc View Source IdentityEncoder() Declaration public IdentityEncoder() | Improve this Doc View Source IdentityEncoder(Encoding) Declaration public IdentityEncoder(Encoding charset) Parameters Type Name Description System.Text.Encoding charset Fields | Improve this Doc View Source m_charset Declaration protected Encoding m_charset Field Value Type Description System.Text.Encoding Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.IntegerEncoder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.IntegerEncoder.html",
    "title": "Class IntegerEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IntegerEncoder Encode a character array System.Int32 as a BytesRef . See EncodeInt32(Int32, Byte[], Int32) . Inheritance System.Object AbstractEncoder IntegerEncoder Implements IPayloadEncoder Inherited Members AbstractEncoder.Encode(Char[]) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IntegerEncoder : AbstractEncoder, IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicAnalyzer.html",
    "title": "Class ClassicAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassicAnalyzer Filters ClassicTokenizer with ClassicFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating ClassicAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) ClassicAnalyzer was named StandardAnalyzer in Lucene versions prior to 3.1. As of 3.1, StandardAnalyzer implements Unicode text segmentation, as specified by UAX#29. Inheritance System.Object Analyzer StopwordAnalyzerBase ClassicAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ClassicAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ClassicAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET ). Declaration public ClassicAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer | Improve this Doc View Source ClassicAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ClassicAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source ClassicAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public ClassicAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See ClassicAnalyzer System.IO.TextReader stopwords System.IO.TextReader to read stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Default maximum allowed token length Declaration public const int DEFAULT_MAX_TOKEN_LENGTH = 255 Field Value Type Description System.Int32 | Improve this Doc View Source STOP_WORDS_SET An unmodifiable set containing some common English words that are usually not useful for searching. Declaration public static readonly CharArraySet STOP_WORDS_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source MaxTokenLength Gets or sets maximum allowed token length. If a token is seen that exceeds this length then it is discarded. This setting only takes effect the next time tokenStream or tokenStream is called. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicFilter.html",
    "title": "Class ClassicFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassicFilter Normalizes tokens extracted with ClassicTokenizer . Inheritance System.Object AttributeSource TokenStream TokenFilter ClassicFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ClassicFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ClassicFilter(TokenStream) Construct filtering in . Declaration public ClassicFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Removes 's from the end of words. Removes dots from acronyms. Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicFilterFactory.html",
    "title": "Class ClassicFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassicFilterFactory Factory for ClassicFilter . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\"/> <filter class=\"solr.ClassicFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ClassicFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ClassicFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ClassicFilterFactory(IDictionary<String, String>) Creates a new ClassicFilterFactory Declaration public ClassicFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicTokenizer.html",
    "title": "Class ClassicTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassicTokenizer A grammar-based tokenizer constructed with JFlex (and then ported to .NET) This should be a good tokenizer for most European-language documents: Splits words at punctuation characters, removing punctuation. However, a dot that's not followed by whitespace is considered part of a token. Splits words at hyphens, unless there's a number in the token, in which case the whole token is interpreted as a product number and is not split. Recognizes email addresses and internet hostnames as one token. Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. ClassicTokenizer was named StandardTokenizer in Lucene versions prior to 3.1. As of 3.1, StandardTokenizer implements Unicode text segmentation, as specified by UAX#29. Inheritance System.Object AttributeSource TokenStream Tokenizer ClassicTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ClassicTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ClassicTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new ClassicTokenizer with a given AttributeSource.AttributeFactory Declaration public ClassicTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source ClassicTokenizer(LuceneVersion, TextReader) Creates a new instance of the ClassicTokenizer . Attaches the input to the newly created JFlex scanner. Declaration public ClassicTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.IO.TextReader input The input reader See http://issues.apache.org/jira/browse/LUCENE-1068 Fields | Improve this Doc View Source ACRONYM Declaration public const int ACRONYM = 2 Field Value Type Description System.Int32 | Improve this Doc View Source ACRONYM_DEP Declaration public const int ACRONYM_DEP = 8 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 0 Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE Declaration public const int APOSTROPHE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source CJ Declaration public const int CJ = 7 Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY Declaration public const int COMPANY = 3 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = 4 Field Value Type Description System.Int32 | Improve this Doc View Source HOST Declaration public const int HOST = 5 Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = 6 Field Value Type Description System.Int32 | Improve this Doc View Source TOKEN_TYPES String token types that correspond to token type int constants Declaration public static readonly string[] TOKEN_TYPES Field Value Type Description System.String [] Properties | Improve this Doc View Source MaxTokenLength Set the max allowed token length. Any token longer than this is skipped. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.ClassicTokenizerFactory.html",
    "title": "Class ClassicTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassicTokenizerFactory Factory for ClassicTokenizer . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\" maxTokenLength=\"120\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ClassicTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ClassicTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ClassicTokenizerFactory(IDictionary<String, String>) Creates a new ClassicTokenizerFactory Declaration public ClassicTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardAnalyzer.html",
    "title": "Class StandardAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating StandardAnalyzer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation, and StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords. ClassicTokenizer and ClassicAnalyzer are the pre-3.1 implementations of StandardTokenizer and StandardAnalyzer . As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) Inheritance System.Object Analyzer StopwordAnalyzerBase StandardAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source StandardAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET ). Declaration public StandardAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer | Improve this Doc View Source StandardAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public StandardAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source StandardAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public StandardAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardAnalyzer System.IO.TextReader stopwords System.IO.TextReader to read stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Default maximum allowed token length Declaration public const int DEFAULT_MAX_TOKEN_LENGTH = 255 Field Value Type Description System.Int32 | Improve this Doc View Source STOP_WORDS_SET An unmodifiable set containing some common English words that are usually not useful for searching. Declaration public static readonly CharArraySet STOP_WORDS_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source MaxTokenLength Set maximum allowed token length. If a token is seen that exceeds this length then it is discarded. This setting only takes effect the next time tokenStream or tokenStream is called. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardFilter.html",
    "title": "Class StandardFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardFilter Normalizes tokens extracted with StandardTokenizer . Inheritance System.Object AttributeSource TokenStream TokenFilter StandardFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StandardFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source StandardFilter(LuceneVersion, TokenStream) Declaration public StandardFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IncrementTokenClassic() Declaration public bool IncrementTokenClassic() Returns Type Description System.Boolean Implements System.IDisposable"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.KNearestNeighborClassifier.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.KNearestNeighborClassifier.html",
    "title": "Class KNearestNeighborClassifier | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KNearestNeighborClassifier A k-Nearest Neighbor classifier (see http://en.wikipedia.org/wiki/K-nearest_neighbors ) based on MoreLikeThis This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object KNearestNeighborClassifier Implements IClassifier < BytesRef > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class KNearestNeighborClassifier : IClassifier<BytesRef> Constructors | Improve this Doc View Source KNearestNeighborClassifier(Int32) Create a IClassifier<T> using kNN algorithm Declaration public KNearestNeighborClassifier(int k) Parameters Type Name Description System.Int32 k the number of neighbors to analyze as an System.Int32 | Improve this Doc View Source KNearestNeighborClassifier(Int32, Int32, Int32) Create a IClassifier<T> using kNN algorithm Declaration public KNearestNeighborClassifier(int k, int minDocsFreq, int minTermFreq) Parameters Type Name Description System.Int32 k the number of neighbors to analyze as an System.Int32 System.Int32 minDocsFreq the minimum number of docs frequency for MLT to be set with MinDocFreq System.Int32 minTermFreq the minimum number of term frequency for MLT to be set with MinTermFreq Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration public virtual ClassificationResult<BytesRef> AssignClass(string text) Parameters Type Name Description System.String text a string containing text to be classified Returns Type Description ClassificationResult < BytesRef > a ClassificationResult<T> holding assigned class of type BytesRef and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training Implements IClassifier<T>"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.SimpleNaiveBayesClassifier.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.SimpleNaiveBayesClassifier.html",
    "title": "Class SimpleNaiveBayesClassifier | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleNaiveBayesClassifier A simplistic Lucene based NaiveBayes classifier, see http://en.wikipedia.org/wiki/Naive_Bayes_classifier This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SimpleNaiveBayesClassifier Implements IClassifier < BytesRef > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class SimpleNaiveBayesClassifier : IClassifier<BytesRef> Constructors | Improve this Doc View Source SimpleNaiveBayesClassifier() Creates a new NaiveBayes classifier. Note that you must call Train(AtomicReader, String, String, Analyzer) before you can classify any documents. Declaration public SimpleNaiveBayesClassifier() Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration public virtual ClassificationResult<BytesRef> AssignClass(string inputDocument) Parameters Type Name Description System.String inputDocument a string containing text to be classified Returns Type Description ClassificationResult < BytesRef > a ClassificationResult<T> holding assigned class of type BytesRef and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training Implements IClassifier<T>"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingCodec.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingCodec.html",
    "title": "Class AppendingCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AppendingCodec This codec uses an index format that is very similar to Lucene40Codec but works on append-only outputs, such as plain output streams and append-only filesystems. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec FilterCodec AppendingCodec Inherited Members FilterCodec.m_delegate FilterCodec.DocValuesFormat FilterCodec.FieldInfosFormat FilterCodec.LiveDocsFormat FilterCodec.NormsFormat FilterCodec.SegmentInfoFormat FilterCodec.StoredFieldsFormat FilterCodec.TermVectorsFormat Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Appending Assembly : Lucene.Net.Codecs.dll Syntax [Obsolete(\"This codec is read-only: as the functionality has been folded into the default codec. Its only for convenience to read old segments.\")] [CodecName(\"Appending\")] public class AppendingCodec : FilterCodec Constructors | Improve this Doc View Source AppendingCodec() Declaration public AppendingCodec() Properties | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides FilterCodec.PostingsFormat"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.AppendingTermsReader.html",
    "title": "Class AppendingTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AppendingTermsReader Reads append-only terms from AppendingTermsWriter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader AppendingTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members BlockTreeTermsReader.Dispose(Boolean) BlockTreeTermsReader.GetEnumerator() BlockTreeTermsReader.GetTerms(String) BlockTreeTermsReader.Count BlockTreeTermsReader.RamBytesUsed() BlockTreeTermsReader.CheckIntegrity() FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Appending Assembly : Lucene.Net.Codecs.dll Syntax [Obsolete(\"Only for reading old Appending segments\")] public class AppendingTermsReader : BlockTreeTermsReader, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source AppendingTermsReader(Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String, Int32) Declaration public AppendingTermsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext ioContext, string segmentSuffix, int indexDivisor) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext ioContext System.String segmentSuffix System.Int32 indexDivisor Methods | Improve this Doc View Source ReadHeader(IndexInput) Declaration protected override int ReadHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 Overrides BlockTreeTermsReader.ReadHeader(IndexInput) | Improve this Doc View Source ReadIndexHeader(IndexInput) Declaration protected override int ReadIndexHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 Overrides BlockTreeTermsReader.ReadIndexHeader(IndexInput) | Improve this Doc View Source SeekDir(IndexInput, Int64) Declaration protected override void SeekDir(IndexInput input, long dirOffset) Parameters Type Name Description IndexInput input System.Int64 dirOffset Overrides BlockTreeTermsReader.SeekDir(IndexInput, Int64) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsReader.html",
    "title": "Class BlockTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTermsReader Handles a terms dict, but decouples all details of doc/freqs/positions reading to an instance of PostingsReaderBase . This class is reusable for codecs that use a different format for docs/freqs/positions (though codecs are also free to make their own terms dict impl). This class also interacts with an instance of TermsIndexReaderBase , to abstract away the specific implementation of the terms dict index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class BlockTermsReader : FieldsProducer, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source BlockTermsReader(TermsIndexReaderBase, Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String) Declaration public BlockTermsReader(TermsIndexReaderBase indexReader, Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext context, string segmentSuffix) Parameters Type Name Description TermsIndexReaderBase indexReader Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext context System.String segmentSuffix Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsWriter.html",
    "title": "Class SimpleTextTermVectorsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextTermVectorsWriter Writes plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter SimpleTextTermVectorsWriter Implements System.IDisposable Inherited Members TermVectorsWriter.FinishDocument() TermVectorsWriter.FinishField() TermVectorsWriter.FinishTerm() TermVectorsWriter.AddProx(Int32, DataInput, DataInput) TermVectorsWriter.Merge(MergeState) TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsWriter : TermVectorsWriter, IDisposable Constructors | Improve this Doc View Source SimpleTextTermVectorsWriter(Directory, String, IOContext) Declaration public SimpleTextTermVectorsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override sealed void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload Overrides TermVectorsWriter.AddPosition(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides TermVectorsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields Overrides TermVectorsWriter.StartDocument(Int32) | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads Overrides TermVectorsWriter.StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.HighFrequencyDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.HighFrequencyDictionary.html",
    "title": "Class HighFrequencyDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighFrequencyDictionary HighFrequencyDictionary: terms taken from the given field of a Lucene index, which appear in a number of documents above a given threshold. Threshold is a value in [0..1] representing the minimum number of documents (of the total) where a term should appear. Based on LuceneDictionary . Inheritance System.Object HighFrequencyDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class HighFrequencyDictionary : IDictionary Constructors | Improve this Doc View Source HighFrequencyDictionary(IndexReader, String, Single) Creates a new Dictionary, pulling source terms from the specified field in the provided reader . Terms appearing in less than thresh percentage of documents will be excluded. Declaration public HighFrequencyDictionary(IndexReader reader, string field, float thresh) Parameters Type Name Description IndexReader reader System.String field System.Single thresh Methods | Improve this Doc View Source GetEntryIterator() Declaration public IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.ITermFreqIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.ITermFreqIterator.html",
    "title": "Interface ITermFreqIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITermFreqIterator Interface for enumerating term,weight pairs. Inherited Members IBytesRefIterator.Next() IBytesRefIterator.Comparer Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface ITermFreqIterator : IBytesRefIterator Properties | Improve this Doc View Source Weight Gets the term's weight, higher numbers mean better suggestions. Declaration long Weight { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.JaroWinklerDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.JaroWinklerDistance.html",
    "title": "Class JaroWinklerDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JaroWinklerDistance Similarity measure for short strings such as person names. See http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance Inheritance System.Object JaroWinklerDistance Implements IStringDistance Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class JaroWinklerDistance : IStringDistance Constructors | Improve this Doc View Source JaroWinklerDistance() Creates a new distance metric with the default threshold for the Jaro Winkler bonus (0.7) Declaration public JaroWinklerDistance() See Also Threshold Properties | Improve this Doc View Source Threshold Gets or sets the threshold used to determine when Winkler bonus should be used. The default value is 0.7. Set to a negative value to get the Jaro distance. Declaration public virtual float Threshold { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDistance(String, String) Declaration public virtual float GetDistance(string s1, string s2) Parameters Type Name Description System.String s1 System.String s2 Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LevensteinDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LevensteinDistance.html",
    "title": "Class LevensteinDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LevensteinDistance Levenstein edit distance class. Inheritance System.Object LevensteinDistance Implements IStringDistance Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LevensteinDistance : IStringDistance Constructors | Improve this Doc View Source LevensteinDistance() Optimized to run a bit faster than the static GetDistance(). In one benchmark times were 5.3sec using ctr vs 8.5sec w/ static method, thus 37% faster. Declaration public LevensteinDistance() Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDistance(String, String) Declaration public float GetDistance(string target, string other) Parameters Type Name Description System.String target System.String other Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneDictionary.html",
    "title": "Class LuceneDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneDictionary Lucene Dictionary: terms taken from the given field of a Lucene index. Inheritance System.Object LuceneDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class LuceneDictionary : IDictionary Constructors | Improve this Doc View Source LuceneDictionary(IndexReader, String) Creates a new Dictionary, pulling source terms from the specified field in the provided reader Declaration public LuceneDictionary(IndexReader reader, string field) Parameters Type Name Description IndexReader reader System.String field Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneLevenshteinDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.LuceneLevenshteinDistance.html",
    "title": "Class LuceneLevenshteinDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneLevenshteinDistance Damerau-Levenshtein (optimal string alignment) implemented in a consistent way as Lucene's FuzzyTermsEnum with the transpositions option enabled. Notes: This metric treats full unicode codepoints as characters This metric scales raw edit distances into a floating point score based upon the shortest of the two terms Transpositions of two adjacent codepoints are treated as primitive edits. Edits are applied in parallel: for example, \"ab\" and \"bca\" have distance 3. NOTE: this class is not particularly efficient. It is only intended for merging results from multiple DirectSpellCheckers. Inheritance System.Object LuceneLevenshteinDistance Implements IStringDistance Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LuceneLevenshteinDistance : IStringDistance Constructors | Improve this Doc View Source LuceneLevenshteinDistance() Creates a new comparer, mimicing the behavior of Lucene's internal edit distance. Declaration public LuceneLevenshteinDistance() Methods | Improve this Doc View Source GetDistance(String, String) Declaration public float GetDistance(string target, string other) Parameters Type Name Description System.String target System.String other Returns Type Description System.Single Implements IStringDistance"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.AnalyzerWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.AnalyzerWrapper.html",
    "title": "Class AnalyzerWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzerWrapper Extension to Analyzer suitable for Analyzer s which wrap other Analyzer s. GetWrappedAnalyzer(String) allows the Analyzer to wrap multiple Analyzer s which are selected on a per field basis. WrapComponents(String, TokenStreamComponents) allows the TokenStreamComponents of the wrapped Analyzer to then be wrapped (such as adding a new TokenFilter to form new TokenStreamComponents ). Inheritance System.Object Analyzer AnalyzerWrapper Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class AnalyzerWrapper : Analyzer, IDisposable Constructors | Improve this Doc View Source AnalyzerWrapper() Creates a new AnalyzerWrapper . Since the ReuseStrategy of the wrapped Analyzer s are unknown, PER_FIELD_REUSE_STRATEGY is assumed. Declaration [Obsolete(\"Use AnalyzerWrapper(Analyzer.ReuseStrategy) and specify a valid Analyzer.ReuseStrategy, probably retrieved from the wrapped analyzer using Analyzer.Strategy.\")] protected AnalyzerWrapper() | Improve this Doc View Source AnalyzerWrapper(ReuseStrategy) Creates a new AnalyzerWrapper with the given reuse strategy. If you want to wrap a single delegate Analyzer you can probably reuse its strategy when instantiating this subclass: base(innerAnalyzer.Strategy) . If you choose different analyzers per field, use PER_FIELD_REUSE_STRATEGY . Declaration protected AnalyzerWrapper(ReuseStrategy reuseStrategy) Parameters Type Name Description ReuseStrategy reuseStrategy See Also Strategy Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override sealed TokenStreamComponents CreateComponents(string fieldName, TextReader aReader) Parameters Type Name Description System.String fieldName System.IO.TextReader aReader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetOffsetGap(String) Declaration public override int GetOffsetGap(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int32 Overrides Analyzer.GetOffsetGap(String) | Improve this Doc View Source GetPositionIncrementGap(String) Declaration public override int GetPositionIncrementGap(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description System.Int32 Overrides Analyzer.GetPositionIncrementGap(String) | Improve this Doc View Source GetWrappedAnalyzer(String) Retrieves the wrapped Analyzer appropriate for analyzing the field with the given name Declaration protected abstract Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Name of the field which is to be analyzed Returns Type Description Analyzer Analyzer for the field with the given name. Assumed to be non-null | Improve this Doc View Source InitReader(String, TextReader) Declaration protected override TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description System.IO.TextReader Overrides Analyzer.InitReader(String, TextReader) | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Wraps / alters the given TokenStreamComponents , taken from the wrapped Analyzer , to form new components. It is through this method that new TokenFilter s can be added by AnalyzerWrapper s. By default, the given components are returned. Declaration protected virtual TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName Name of the field which is to be analyzed TokenStreamComponents components TokenStreamComponents taken from the wrapped Analyzer Returns Type Description TokenStreamComponents Wrapped / altered TokenStreamComponents . | Improve this Doc View Source WrapReader(String, TextReader) Wraps / alters the given System.IO.TextReader . Through this method AnalyzerWrapper s can implement InitReader(String, TextReader) . By default, the given reader is returned. Declaration protected virtual TextReader WrapReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName name of the field which is to be analyzed System.IO.TextReader reader the reader to wrap Returns Type Description System.IO.TextReader the wrapped reader Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsWriter.html",
    "title": "Class BlockTreeTermsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTreeTermsWriter Block-based terms index and dictionary writer. Writes terms dict and index, block-encoding (column stride) each term's metadata for each set of terms between two index terms. Files: .tim: Term Dictionary .tip: Term Index Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and per-term metadata (typically pointers to the postings list for that term in the inverted index). The .tim is arranged in blocks: with blocks containing a variable number of entries (by default 25-48), where each entry is either a term or a reference to a sub-block. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections. TermsDict (.tim) --> Header, PostingsHeader , NodeBlock NumBlocks , FieldSummary, DirOffset, Footer NodeBlock --> (OuterNode | InnerNode) OuterNode --> EntryCount, SuffixLength, Byte SuffixLength , StatsLength, < TermStats > EntryCount , MetaLength, < TermMetadata > EntryCount InnerNode --> EntryCount, SuffixLength[,Sub?], Byte SuffixLength , StatsLength, < TermStats ? > EntryCount , MetaLength, < TermMetadata ? > EntryCount TermStats --> DocFreq, TotalTermFreq FieldSummary --> NumFields, <FieldNumber, NumTerms, RootCodeLength, Byte RootCodeLength , SumTotalTermFreq?, SumDocFreq, DocCount> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) DirOffset --> Uint64 ( WriteInt64(Int64) ) EntryCount,SuffixLength,StatsLength,DocFreq,MetaLength,NumFields, FieldNumber,RootCodeLength,DocCount --> VInt ( WriteVInt32(Int32) _ TotalTermFreq,NumTerms,SumTotalTermFreq,SumDocFreq --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the BlockTree implementation. DirOffset is a pointer to the FieldSummary section. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. this is encoded as the difference between the total number of occurrences and the DocFreq. FieldNumber is the fields number from Lucene.Net.Codecs.BlockTreeTermsWriter.fieldInfos . (.fnm) NumTerms is the number of unique terms for the field. RootCode points to the root block for the field. SumDocFreq is the total number of postings, the number of term-document pairs across the entire field. DocCount is the number of documents that have at least one posting for this field. PostingsHeader and TermMetadata are plugged into by the specific postings implementation: these contain arbitrary per-file data (such as parameters or versioning information) and per-term data (such as pointers to inverted files). For inner nodes of the tree, every entry will steal one bit to mark whether it points to child nodes(sub-block). If so, the corresponding TermStats and TermMetadata are omitted Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. The index is also used to determine when a given term cannot exist on disk (in the .tim file), saving a disk seek. TermsIndex (.tip) --> Header, FSTIndex NumFields <IndexStartFP> NumFields , DirOffset, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) IndexStartFP --> VLong ( WriteVInt64(Int64) FSTIndex --> FST{byte[]} Footer --> CodecFooter ( WriteFooter(IndexOutput) Notes: The .tip file contains a separate FST for each field. The FST maps a term prefix to the on-disk block that holds all terms starting with that prefix. Each field's IndexStartFP points to its FST. DirOffset is a pointer to the start of the IndexStartFPs for all fields It's possible that an on-disk block would contain too many terms (more than the allowed maximum (default: 48)). When this happens, the block is sub-divided into new blocks (called \"floor blocks\"), and then the output in the FST for the block's prefix encodes the leading byte of each sub-block, and its file pointer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTreeTermsWriter Implements System.IDisposable Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTreeTermsWriter : FieldsConsumer, IDisposable Constructors | Improve this Doc View Source BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) Create a new writer. The number of items (terms or sub-blocks) per block will aim to be between minItemsInBlock and maxItemsInBlock , though in some cases the blocks may be smaller than the min. Declaration public BlockTreeTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter, int minItemsInBlock, int maxItemsInBlock) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter System.Int32 minItemsInBlock System.Int32 maxItemsInBlock Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_SIZE Suggested default value for the maxItemsInBlock parameter to BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) . Declaration public const int DEFAULT_MAX_BLOCK_SIZE = 48 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_BLOCK_SIZE Suggested default value for the minItemsInBlock parameter to BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) . Declaration public const int DEFAULT_MIN_BLOCK_SIZE = 25 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_APPEND_ONLY Append-only Declaration public const int VERSION_APPEND_ONLY = 1 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CHECKSUM Checksums. Declaration public const int VERSION_CHECKSUM = 3 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Current terms format. Declaration public const int VERSION_CURRENT = 3 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_META_ARRAY Meta data as array. Declaration public const int VERSION_META_ARRAY = 2 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Initial terms format. Declaration public const int VERSION_START = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) | Improve this Doc View Source WriteHeader(IndexOutput) Writes the terms file header. Declaration protected virtual void WriteHeader(IndexOutput out) Parameters Type Name Description IndexOutput out | Improve this Doc View Source WriteIndexHeader(IndexOutput) Writes the index file header. Declaration protected virtual void WriteIndexHeader(IndexOutput out) Parameters Type Name Description IndexOutput out | Improve this Doc View Source WriteIndexTrailer(IndexOutput, Int64) Writes the index file trailer. Declaration protected virtual void WriteIndexTrailer(IndexOutput indexOut, long dirStart) Parameters Type Name Description IndexOutput indexOut System.Int64 dirStart | Improve this Doc View Source WriteTrailer(IndexOutput, Int64) Writes the terms file trailer. Declaration protected virtual void WriteTrailer(IndexOutput out, long dirStart) Parameters Type Name Description IndexOutput out System.Int64 dirStart Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also BlockTreeTermsReader"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.html",
    "title": "Class CompressingStoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsFormat A StoredFieldsFormat that is very similar to Lucene40StoredFieldsFormat but compresses documents in chunks in order to improve the compression ratio. For a chunk size of chunkSize bytes, this StoredFieldsFormat does not support documents larger than ( 2 31 - chunkSize ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . For optimal performance, you should use a MergePolicy that returns segments that have the biggest byte size first. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene41StoredFieldsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class CompressingStoredFieldsFormat : StoredFieldsFormat Constructors | Improve this Doc View Source CompressingStoredFieldsFormat(String, CompressionMode, Int32) Create a new CompressingStoredFieldsFormat with an empty segment suffix. Declaration public CompressingStoredFieldsFormat(string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName CompressionMode compressionMode System.Int32 chunkSize See Also CompressingStoredFieldsFormat(String, String, CompressionMode, Int32) | Improve this Doc View Source CompressingStoredFieldsFormat(String, String, CompressionMode, Int32) Create a new CompressingStoredFieldsFormat . formatName is the name of the format. This name will be used in the file formats to perform codec header checks ( CheckHeader(DataInput, String, Int32, Int32) ). segmentSuffix is the segment suffix. this suffix is added to the result file name only if it's not the empty string. The compressionMode parameter allows you to choose between compression algorithms that have various compression and decompression speeds so that you can pick the one that best fits your indexing and searching throughput. You should never instantiate two CompressingStoredFieldsFormat s that have the same name but different Lucene.Net.Codecs.Compressing.CompressingStoredFieldsFormat.compressionMode s. chunkSize is the minimum byte size of a chunk of documents. A value of 1 can make sense if there is redundancy across fields. In that case, both performance and compression ratio should be better than with Lucene40StoredFieldsFormat with compressed fields. Higher values of chunkSize should improve the compression ratio but will require more memory at indexing time and might make document loading a little slower (depending on the size of your OS cache compared to the size of your index). Declaration public CompressingStoredFieldsFormat(string formatName, string segmentSuffix, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName The name of the StoredFieldsFormat . System.String segmentSuffix CompressionMode compressionMode The CompressionMode to use. System.Int32 chunkSize The minimum number of bytes of a single chunk of stored documents. See Also CompressionMode Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPayloadAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPayloadAttribute.html",
    "title": "Interface IPayloadAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPayloadAttribute The payload of a Token. The payload is stored in the index at each position, and can be used to influence scoring when using Payload-based queries in the Lucene.Net.Search.Payloads and Lucene.Net.Search.Spans namespaces. NOTE: because the payload will be stored at each position, its usually best to use the minimum number of bytes necessary. Some codec implementations may optimize payload storage when all payloads have the same length. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPayloadAttribute : IAttribute Properties | Improve this Doc View Source Payload Gets or Sets this Token 's payload. Declaration BytesRef Payload { get; set; } Property Value Type Description BytesRef Extension Methods Number.IsNumber(Object) See Also DocsAndPositionsEnum"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.KeywordAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.KeywordAttribute.html",
    "title": "Class KeywordAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordAttribute Default implementation of IKeywordAttribute . Inheritance System.Object Attribute KeywordAttribute Implements IKeywordAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public sealed class KeywordAttribute : Attribute, IKeywordAttribute, IAttribute Constructors | Improve this Doc View Source KeywordAttribute() Initialize this attribute with the keyword value as false. Declaration public KeywordAttribute() Properties | Improve this Doc View Source IsKeyword Declaration public bool IsKeyword { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IKeywordAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionLengthAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionLengthAttribute.html",
    "title": "Class PositionLengthAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionLengthAttribute Default implementation of IPositionLengthAttribute . Inheritance System.Object Attribute PositionLengthAttribute Implements IPositionLengthAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PositionLengthAttribute : Attribute, IPositionLengthAttribute, IAttribute Constructors | Improve this Doc View Source PositionLengthAttribute() Initializes this attribute with position length of 1. Declaration public PositionLengthAttribute() Properties | Improve this Doc View Source PositionLength Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IPositionLengthAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexWriter.html",
    "title": "Class CompressingStoredFieldsIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsIndexWriter Efficient index format for block-based Codec s. this writer generates a file which can be loaded into memory using memory-efficient data structures to quickly locate the block that contains any document. In order to have a compact in-memory representation, for every block of 1024 chunks, this index computes the average number of bytes per chunk and for every chunk, only stores the difference between Data is written as follows: Notes This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CompressingStoredFieldsIndexWriter Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsIndexWriter : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludeCodecFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludeCodecFromScanAttribute.html",
    "title": "Class ExcludeCodecFromScanAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExcludeCodecFromScanAttribute When placed on a class that subclasses Codec , adding this attribute will exclude the type from consideration in the ScanForCodecs(Assembly) method. However, the Codec type can still be added manually using PutCodecType(Type) . Inheritance System.Object System.Attribute ExcludeServiceAttribute ExcludeCodecFromScanAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class ExcludeCodecFromScanAttribute : ExcludeServiceAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludeDocValuesFormatFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludeDocValuesFormatFromScanAttribute.html",
    "title": "Class ExcludeDocValuesFormatFromScanAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExcludeDocValuesFormatFromScanAttribute When placed on a class that subclasses DocValuesFormat , adding this attribute will exclude the type from consideration in the ScanForDocValuesFormats(Assembly) method. However, the DocValuesFormat type can still be added manually using PutDocValuesFormatType(Type) . Inheritance System.Object System.Attribute ExcludeServiceAttribute ExcludeDocValuesFormatFromScanAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class ExcludeDocValuesFormatFromScanAttribute : ExcludeServiceAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldsProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldsProducer.html",
    "title": "Class FieldsProducer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldsProducer Abstract API that produces terms, doc, freq, prox, offset and payloads postings. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members Fields.GetEnumerator() Fields.IEnumerable.GetEnumerator() Fields.GetTerms(String) Fields.Count Fields.UniqueTermCount Fields.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldsProducer : Fields, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source FieldsProducer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldsProducer() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FilterCodec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FilterCodec.html",
    "title": "Class FilterCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterCodec A codec that forwards all its method calls to another codec. Extend this class when you need to reuse the functionality of an existing codec. For example, if you want to build a codec that redefines Lucene46's LiveDocsFormat : public sealed class CustomCodec : FilterCodec { public CustomCodec() : base(\"CustomCodec\", new Lucene46Codec()) { } public override LiveDocsFormat LiveDocsFormat { get { return new CustomLiveDocsFormat(); } } } Please note: Don't call ForName(String) from the no-arg constructor of your own codec. When the DefaultCodecFactory loads your own Codec , the DefaultCodecFactory has not yet fully initialized! If you want to extend another Codec , instantiate it directly by calling its constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec FilterCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FilterCodec : Codec Constructors | Improve this Doc View Source FilterCodec(Codec) Sole constructor. When subclassing this codec, create a no-arg ctor and pass the delegate codec and a unique name to this ctor. Declaration protected FilterCodec(Codec delegate) Parameters Type Name Description Codec delegate Fields | Improve this Doc View Source m_delegate The codec to filter. Declaration protected readonly Codec m_delegate Field Value Type Description Codec Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsReader.html",
    "title": "Class Lucene40TermVectorsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40TermVectorsReader Lucene 4.0 Term Vectors reader. It reads .tvd, .tvf, and .tvx files. Inheritance System.Object TermVectorsReader Lucene40TermVectorsReader Implements System.IDisposable Inherited Members TermVectorsReader.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40TermVectorsReader : TermVectorsReader, IDisposable Constructors | Improve this Doc View Source Lucene40TermVectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Sole constructor. Declaration public Lucene40TermVectorsReader(Directory d, SegmentInfo si, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory d SegmentInfo si FieldInfos fieldInfos IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsReader.Dispose(Boolean) | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed() Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Lucene40TermVectorsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsWriter.html",
    "title": "Class Lucene40TermVectorsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40TermVectorsWriter Lucene 4.0 Term Vectors writer. It writes .tvd, .tvf, and .tvx files. Inheritance System.Object TermVectorsWriter Lucene40TermVectorsWriter Implements System.IDisposable Inherited Members TermVectorsWriter.FinishField() TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40TermVectorsWriter : TermVectorsWriter, IDisposable Constructors | Improve this Doc View Source Lucene40TermVectorsWriter(Directory, String, IOContext) Sole constructor. Declaration public Lucene40TermVectorsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload Overrides TermVectorsWriter.AddPosition(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Declaration public override void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets Overrides TermVectorsWriter.AddProx(Int32, DataInput, DataInput) | Improve this Doc View Source Dispose(Boolean) Close all streams. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides TermVectorsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides TermVectorsWriter.FinishDocument() | Improve this Doc View Source FinishTerm() Declaration public override void FinishTerm() Overrides TermVectorsWriter.FinishTerm() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides TermVectorsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields Overrides TermVectorsWriter.StartDocument(Int32) | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads Overrides TermVectorsWriter.StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Lucene40TermVectorsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42Codec.html",
    "title": "Class Lucene42Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42Codec Implements the Lucene 4.2 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene42 package documentation for file format details. @lucene.experimental Inheritance System.Object Codec Lucene42Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.2 segments\")] [CodecName(\"Lucene42\")] public class Lucene42Codec : Codec Constructors | Improve this Doc View Source Lucene42Codec() Sole constructor. Declaration public Lucene42Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene42\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.html",
    "title": "Class Field | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field Expert: directly create a field for a document. Most users should use one of the sugar subclasses: Int32Field , Int64Field , SingleField , DoubleField , BinaryDocValuesField , NumericDocValuesField , SortedDocValuesField , StringField , TextField , StoredField . A field is a section of a Document . Each field has three parts: name, type and value. Values may be text ( System.String , System.IO.TextReader or pre-analyzed TokenStream ), binary ( byte[] ), or numeric ( System.Int32 , System.Int64 , System.Single , or System.Double ). Fields are optionally stored in the index, so that they may be returned with hits on the document. NOTE: the field type is an IIndexableFieldType . Making changes to the state of the IIndexableFieldType will impact any Field it is used in. It is strongly recommended that no changes be made after Field instantiation. Inheritance System.Object Field BinaryDocValuesField DoubleField Int32Field Int64Field NumericDocValuesField SingleField SortedDocValuesField SortedSetDocValuesField StoredField StringField TextField Implements IIndexableField Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class Field : IIndexableField Constructors | Improve this Doc View Source Field(String, TokenStream) Create a tokenized and indexed field that is not stored. Term vectors will not be stored. This is useful for pre-analyzed fields. The TokenStream is read only when the Document is added to the index, i.e. you may not close the TokenStream until AddDocument(IEnumerable<IIndexableField>) has been called. Declaration [Obsolete(\"Use TextField instead.\")] public Field(string name, TokenStream tokenStream) Parameters Type Name Description System.String name The name of the field TokenStream tokenStream The TokenStream with the content Exceptions Type Condition System.ArgumentNullException if name or tokenStream is null | Improve this Doc View Source Field(String, TokenStream, Field.TermVector) Create a tokenized and indexed field that is not stored, optionally with storing term vectors. This is useful for pre-analyzed fields. The TokenStream is read only when the Document is added to the index, i.e. you may not close the TokenStream until AddDocument(IEnumerable<IIndexableField>) has been called. Declaration [Obsolete(\"Use TextField instead.\")] public Field(string name, TokenStream tokenStream, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field TokenStream tokenStream The TokenStream with the content Field.TermVector termVector Whether term vector should be stored Exceptions Type Condition System.ArgumentNullException if name or tokenStream is null | Improve this Doc View Source Field(String, TokenStream, FieldType) Create field with TokenStream value. Declaration public Field(string name, TokenStream tokenStream, FieldType type) Parameters Type Name Description System.String name field name TokenStream tokenStream TokenStream value FieldType type field type Exceptions Type Condition System.ArgumentException if IsStored is true, or if IsTokenized is false, or if IsIndexed is false. System.ArgumentNullException if either the name or type is null , or if the tokenStream is null | Improve this Doc View Source Field(String, FieldType) Expert: creates a field with no initial value. Intended only for custom Field subclasses. Declaration protected Field(string name, FieldType type) Parameters Type Name Description System.String name field name FieldType type field type Exceptions Type Condition System.ArgumentNullException if either the name or type is null . | Improve this Doc View Source Field(String, BytesRef, FieldType) Create field with binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, BytesRef bytes, FieldType type) Parameters Type Name Description System.String name field name BytesRef bytes BytesRef pointing to binary content (not copied) FieldType type field type Exceptions Type Condition System.ArgumentException if the IsIndexed is true System.ArgumentNullException if the field name is null , or the type is null | Improve this Doc View Source Field(String, Byte[]) Create a stored field with binary value. Optionally the value may be compressed. Declaration [Obsolete(\"Use StoredField instead.\")] public Field(string name, byte[] value) Parameters Type Name Description System.String name The name of the field System.Byte [] value The binary value | Improve this Doc View Source Field(String, Byte[], FieldType) Create field with binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, byte[] value, FieldType type) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) FieldType type field type Exceptions Type Condition System.ArgumentException if the IsIndexed is true System.ArgumentNullException the field name is null , or if the type is null | Improve this Doc View Source Field(String, Byte[], Int32, Int32) Create a stored field with binary value. Optionally the value may be compressed. Declaration [Obsolete(\"Use StoredField instead.\")] public Field(string name, byte[] value, int offset, int length) Parameters Type Name Description System.String name The name of the field System.Byte [] value The binary value System.Int32 offset Starting offset in value where this Field 's bytes are System.Int32 length Number of bytes to use for this Field , starting at offset | Improve this Doc View Source Field(String, Byte[], Int32, Int32, FieldType) Create field with binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public Field(string name, byte[] value, int offset, int length, FieldType type) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array FieldType type field type Exceptions Type Condition System.ArgumentException if the IsIndexed is true System.ArgumentNullException if the field name is null , or the type is null | Improve this Doc View Source Field(String, TextReader) Create a tokenized and indexed field that is not stored. Term vectors will not be stored. The System.IO.TextReader is read only when the Document is added to the index, i.e. you may not close the System.IO.TextReader until AddDocument(IEnumerable<IIndexableField>) has been called. Declaration [Obsolete(\"Use TextField instead.\")] public Field(string name, TextReader reader) Parameters Type Name Description System.String name The name of the field System.IO.TextReader reader The reader with the content Exceptions Type Condition System.ArgumentNullException if name or reader is null | Improve this Doc View Source Field(String, TextReader, Field.TermVector) Create a tokenized and indexed field that is not stored, optionally with storing term vectors. The System.IO.TextReader is read only when the Document is added to the index, i.e. you may not close the System.IO.TextReader until AddDocument(IEnumerable<IIndexableField>) has been called. Declaration [Obsolete(\"Use TextField instead.\")] public Field(string name, TextReader reader, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field System.IO.TextReader reader The reader with the content Field.TermVector termVector Whether term vector should be stored Exceptions Type Condition System.ArgumentNullException if name or reader is null | Improve this Doc View Source Field(String, TextReader, FieldType) Create field with System.IO.TextReader value. Declaration public Field(string name, TextReader reader, FieldType type) Parameters Type Name Description System.String name field name System.IO.TextReader reader reader value FieldType type field type Exceptions Type Condition System.ArgumentException if IsStored is true, or if IsTokenized is false. System.ArgumentNullException if either the name or type is null , or if the reader is null | Improve this Doc View Source Field(String, String, Field.Store, Field.Index) Create a field by specifying its name , value and how it will be saved in the index. Term vectors will not be stored in the index. Declaration [Obsolete(\"Use StringField, TextField instead.\")] public Field(string name, string value, Field.Store store, Field.Index index) Parameters Type Name Description System.String name The name of the field System.String value The string to process Field.Store store Whether value should be stored in the index Field.Index index Whether the field should be indexed, and if so, if it should be tokenized before indexing Exceptions Type Condition System.ArgumentNullException if name or value is null System.ArgumentException if the field is neither stored nor indexed | Improve this Doc View Source Field(String, String, Field.Store, Field.Index, Field.TermVector) Create a field by specifying its name , value and how it will be saved in the index. Declaration [Obsolete(\"Use StringField, TextField instead.\")] public Field(string name, string value, Field.Store store, Field.Index index, Field.TermVector termVector) Parameters Type Name Description System.String name The name of the field System.String value The string to process Field.Store store Whether value should be stored in the index Field.Index index Whether the field should be indexed, and if so, if it should be tokenized before indexing Field.TermVector termVector Whether term vector should be stored Exceptions Type Condition System.ArgumentNullException if name or value is null System.ArgumentException in any of the following situations: the field is neither stored nor indexed the field is not indexed but termVector is YES | Improve this Doc View Source Field(String, String, FieldType) Create field with System.String value. Declaration public Field(string name, string value, FieldType type) Parameters Type Name Description System.String name field name System.String value string value FieldType type field type Exceptions Type Condition System.ArgumentException if the field's type is neither indexed() nor stored(), or if indexed() is false but storeTermVectors() is true. System.ArgumentNullException if either the name or value is null , or if the type is null Fields | Improve this Doc View Source m_boost Field's boost Declaration protected float m_boost Field Value Type Description System.Single See Also Boost | Improve this Doc View Source m_name Field's name Declaration protected readonly string m_name Field Value Type Description System.String | Improve this Doc View Source m_tokenStream Pre-analyzed TokenStream for indexed fields; this is separate from FieldsData because you are allowed to have both; eg maybe field has a System.String value but you customize how it's tokenized Declaration protected TokenStream m_tokenStream Field Value Type Description TokenStream | Improve this Doc View Source m_type Field's type Declaration protected readonly FieldType m_type Field Value Type Description FieldType Properties | Improve this Doc View Source Boost Gets or sets the boost factor on this field. Declaration public virtual float Boost { get; set; } Property Value Type Description System.Single Remarks The default value is 1.0f (no boost). Exceptions Type Condition System.ArgumentException (setter only) if this field is not indexed, or if it omits norms. | Improve this Doc View Source FieldsData Field's value Setting this property will automatically set the backing field for the NumericType property. Declaration protected object FieldsData { get; set; } Property Value Type Description System.Object | Improve this Doc View Source FieldType Returns the FieldType for this field as type FieldType . Declaration public virtual FieldType FieldType { get; } Property Value Type Description FieldType | Improve this Doc View Source IndexableFieldType Returns the FieldType for this field as type IIndexableFieldType . Declaration public virtual IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name The field's name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration public virtual NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration public virtual BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as System.Byte or null if the type is non-numeric. Declaration public virtual byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as System.Double or null if the type is non-numeric. Declaration public virtual double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as System.Int16 or null if the type is non-numeric. Declaration public virtual short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as System.Int32 or null if the type is non-numeric. Declaration public virtual int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as System.Int64 or null if the type is non-numeric. Declaration public virtual long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Declaration [Obsolete(\"In .NET, use of this method will cause boxing/unboxing. Instead, use the NumericType property to check the underlying type and call the appropriate GetXXXValue() method to retrieve the value.\")] public virtual object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() The value of the field as a System.IO.TextReader , or null . If null , the System.String value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual TextReader GetReaderValue() Returns Type Description System.IO.TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as System.Single or null if the type is non-numeric. Declaration public virtual float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Declaration public virtual TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStreamValue() The TokenStream for this field to be used when indexing, or null . If null , the System.IO.TextReader value or System.String value is analyzed to produce the indexed tokens. Declaration public virtual TokenStream GetTokenStreamValue() Returns Type Description TokenStream | Improve this Doc View Source SetBytesValue(BytesRef) Expert: change the value of this field. See SetStringValue(String) . NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public virtual void SetBytesValue(BytesRef value) Parameters Type Name Description BytesRef value | Improve this Doc View Source SetBytesValue(Byte[]) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetBytesValue(byte[] value) Parameters Type Name Description System.Byte [] value | Improve this Doc View Source SetByteValue(Byte) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetByteValue(byte value) Parameters Type Name Description System.Byte value | Improve this Doc View Source SetDoubleValue(Double) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetDoubleValue(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source SetInt16Value(Int16) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt16Value(short value) Parameters Type Name Description System.Int16 value | Improve this Doc View Source SetInt32Value(Int32) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt32Value(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source SetInt64Value(Int64) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetInt64Value(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source SetReaderValue(TextReader) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetReaderValue(TextReader value) Parameters Type Name Description System.IO.TextReader value | Improve this Doc View Source SetSingleValue(Single) Expert: change the value of this field. See SetStringValue(String) . Declaration public virtual void SetSingleValue(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source SetStringValue(String) Expert: change the value of this field. This can be used during indexing to re-use a single Field instance to improve indexing speed by avoiding GC cost of new'ing and reclaiming Field instances. Typically a single Document instance is re-used as well. This helps most on small documents. Each Field instance should only be used once within a single Document instance. See ImproveIndexingSpeed for details. Declaration public virtual void SetStringValue(string value) Parameters Type Name Description System.String value | Improve this Doc View Source SetTokenStream(TokenStream) Expert: sets the token stream to be used for indexing and causes IsIndexed and IsTokenized to return true. May be combined with stored values from GetStringValue() or GetBinaryValue() Declaration public virtual void SetTokenStream(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream | Improve this Doc View Source ToString() Prints a Field for human consumption. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source TranslateFieldType(Field.Store, Field.Index, Field.TermVector) Translates the pre-4.0 enums for specifying how a field should be indexed into the 4.0 FieldType approach. Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static FieldType TranslateFieldType(Field.Store store, Field.Index index, Field.TermVector termVector) Parameters Type Name Description Field.Store store Field.Index index Field.TermVector termVector Returns Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IByteParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IByteParser.html",
    "title": "Interface FieldCache.IByteParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IByteParser Interface to parse bytes from document fields. Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Obsolete] public interface IByteParser : FieldCache.IParser Methods | Improve this Doc View Source ParseByte(BytesRef) Return a single Byte representation of this field's value. Declaration byte ParseByte(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Byte Extension Methods Number.IsNumber(Object) See Also GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IDoubleParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IDoubleParser.html",
    "title": "Interface FieldCache.IDoubleParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IDoubleParser Interface to parse System.Double s from document fields. Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IDoubleParser : FieldCache.IParser Methods | Improve this Doc View Source ParseDouble(BytesRef) Return an System.Double representation of this field's value. Declaration double ParseDouble(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Double Extension Methods Number.IsNumber(Object) See Also GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt16Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt16Parser.html",
    "title": "Interface FieldCache.IInt16Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IInt16Parser Interface to parse System.Int16 s from document fields. NOTE: This was ShortParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Obsolete] public interface IInt16Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt16(BytesRef) Return a System.Int16 representation of this field's value. NOTE: This was parseShort() in Lucene Declaration short ParseInt16(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int16 Extension Methods Number.IsNumber(Object) See Also GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt32Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt32Parser.html",
    "title": "Interface FieldCache.IInt32Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IInt32Parser Interface to parse System.Int32 s from document fields. NOTE: This was IntParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IInt32Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt32(BytesRef) Return an System.Int32 representation of this field's value. NOTE: This was parseInt() in Lucene Declaration int ParseInt32(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object) See Also GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Support.AtomicObject-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AtomicObject-1.html",
    "title": "Class AtomicObject<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicObject<T> Inheritance System.Object AtomicObject<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class AtomicObject<T> where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source AtomicObject() Declaration public AtomicObject() | Improve this Doc View Source AtomicObject(T) Declaration public AtomicObject(T initial) Parameters Type Name Description T initial Properties | Improve this Doc View Source Value Declaration public T Value { get; set; } Property Value Type Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.AtomicReferenceArray-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AtomicReferenceArray-1.html",
    "title": "Class AtomicReferenceArray<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicReferenceArray<T> Mimics Java's AtomicReferenceArray class (partial implementation) Inheritance System.Object AtomicReferenceArray<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class AtomicReferenceArray<T> where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source AtomicReferenceArray(Int32) Declaration public AtomicReferenceArray(int length) Parameters Type Name Description System.Int32 length Properties | Improve this Doc View Source Item[Int32] Declaration public T this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description T | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.BundleResourceManagerFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.BundleResourceManagerFactory.html",
    "title": "Class BundleResourceManagerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BundleResourceManagerFactory This implementation of IResourceManagerFactory uses a convention to retrieve resources. In Java NLS, the convention is to use the same name for the resource key propeties and for the resource file names. This presents a problem for .NET because the resource generator already creates an internal class with the same name as the .resx file. To work around this, we use the convention of appending the suffix \"Bundle\" to the end of the type the resource key propeties are stored in. For example, if our constants are stored in a class named ErrorMessages, the type that will be looked up by this factory will be ErrorMessagesBundle (which is the name of the .resx file that should be added to your project). This implementation can be inherited to use a different convention or can be replaced to get the resources from an external source. Inheritance System.Object BundleResourceManagerFactory Implements IResourceManagerFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class BundleResourceManagerFactory : IResourceManagerFactory Properties | Improve this Doc View Source ResourceSuffix The suffix to append to the resource key class name to locate the embedded resource. Declaration protected virtual string ResourceSuffix { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Create(Type) Creates a System.Resources.ResourceManager instance using the specified resourceSource . Declaration public virtual ResourceManager Create(Type resourceSource) Parameters Type Name Description System.Type resourceSource The type representing the resource to retrieve. Returns Type Description System.Resources.ResourceManager A new System.Resources.ResourceManager instance. | Improve this Doc View Source GetResourceName(Type) Gets the fully-qualified name of the bundle as it would appear using System.Reflection.Assembly.GetManifestResourceNames , without the .resources extension. This is the name that is passed to the baseName parameter of System.Resources.ResourceManager.#ctor(System.String,System.Reflection.Assembly) . Declaration protected virtual string GetResourceName(Type clazz) Parameters Type Name Description System.Type clazz The type of the NLS-derived class where the field strings are located that identify resources. Returns Type Description System.String The resource name. | Improve this Doc View Source Release(ResourceManager) Releases the System.Resources.ResourceManager instance including any disposable dependencies. Declaration public virtual void Release(ResourceManager manager) Parameters Type Name Description System.Resources.ResourceManager manager The System.Resources.ResourceManager to release. Implements IResourceManagerFactory Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ExcludeServiceAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ExcludeServiceAttribute.html",
    "title": "Class ExcludeServiceAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExcludeServiceAttribute Base class for Attribute types that exclude services from Reflection scanning. Inheritance System.Object System.Attribute ExcludeServiceAttribute ExcludeCodecFromScanAttribute ExcludeDocValuesFormatFromScanAttribute ExcludePostingsFormatFromScanAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class ExcludeServiceAttribute : Attribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.FilterIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FilterIterator-1.html",
    "title": "Class FilterIterator<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterIterator<T> An System.Collections.Generic.IEnumerator<T> implementation that filters elements with a boolean predicate. Inheritance System.Object FilterIterator<T> Implements System.Collections.Generic.IEnumerator <T> System.Collections.IEnumerator System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class FilterIterator<T> : IEnumerator<T>, IEnumerator, IDisposable Type Parameters Name Description T Constructors | Improve this Doc View Source FilterIterator(IEnumerator<T>) Declaration public FilterIterator(IEnumerator<T> baseIterator) Parameters Type Name Description System.Collections.Generic.IEnumerator <T> baseIterator Properties | Improve this Doc View Source Current Declaration public T Current { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source MoveNext() Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source PredicateFunction(T) Returns true , if this element should be set to Current by Lucene.Net.Util.FilterIterator`1.SetNext . Declaration protected abstract bool PredicateFunction(T object) Parameters Type Name Description T object Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public void Reset() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable Extension Methods Number.IsNumber(Object) See Also PredicateFunction(T)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64Values.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64Values.html",
    "title": "Class Int64Values | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64Values Abstraction over an array of System.Int64 s. This class extends NumericDocValues so that we don't need to add another level of abstraction every time we want eg. to use the PackedInt32s utility classes to represent a NumericDocValues instance. NOTE: This was LongValues in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AbstractPagedMutable<T> BlockPackedReader MonotonicBlockPackedReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Int64Values : NumericDocValues Methods | Improve this Doc View Source Get(Int32) Get value at idx . Declaration public override long Get(int idx) Parameters Type Name Description System.Int32 idx Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int64) Get value at index . Declaration public abstract long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.BrazilianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.BrazilianAnalyzer.html",
    "title": "Class BrazilianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BrazilianAnalyzer Analyzer for Brazilian Portuguese language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (words that will not be stemmed, but indexed). NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase BrazilianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BrazilianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public BrazilianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public BrazilianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source BrazilianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and stemming exclusion words Declaration public BrazilianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Brazilian Portuguese stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , StandardFilter , StopFilter , and BrazilianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.BrazilianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.BrazilianStemFilter.html",
    "title": "Class BrazilianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BrazilianStemFilter A TokenFilter that applies BrazilianStemmer . To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter BrazilianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BrazilianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BrazilianStemFilter(TokenStream) Creates a new BrazilianStemFilter Declaration public BrazilianStemFilter(TokenStream in) Parameters Type Name Description TokenStream in the source TokenStream Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.BrazilianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.BrazilianStemFilterFactory.html",
    "title": "Class BrazilianStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BrazilianStemFilterFactory Factory for BrazilianStemFilter . <fieldType name=\"text_brstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BrazilianStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory BrazilianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BrazilianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source BrazilianStemFilterFactory(IDictionary<String, String>) Creates a new BrazilianStemFilterFactory Declaration public BrazilianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ca.CatalanAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ca.CatalanAnalyzer.html",
    "title": "Class CatalanAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CatalanAnalyzer Analyzer for Catalan. You must specify the required LuceneVersion compatibility when creating CatalanAnalyzer: Inheritance System.Object Analyzer StopwordAnalyzerBase CatalanAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ca Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CatalanAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source CatalanAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public CatalanAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source CatalanAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public CatalanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source CatalanAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public CatalanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Catalan stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.BaseCharFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.BaseCharFilter.html",
    "title": "Class BaseCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseCharFilter Base utility class for implementing a CharFilter . You subclass this, and then record mappings by calling AddOffCorrectMap(Int32, Int32) , and then invoke the correct method to correct an offset. Inheritance System.Object System.IO.TextReader CharFilter BaseCharFilter HTMLStripCharFilter MappingCharFilter PatternReplaceCharFilter BufferedCharFilter Implements System.IDisposable Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Read(Char[], Int32, Int32) CharFilter.Read() CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class BaseCharFilter : CharFilter, IDisposable Constructors | Improve this Doc View Source BaseCharFilter(TextReader) Declaration public BaseCharFilter(TextReader in) Parameters Type Name Description System.IO.TextReader in Properties | Improve this Doc View Source LastCumulativeDiff Declaration protected virtual int LastCumulativeDiff { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddOffCorrectMap(Int32, Int32) Adds an offset correction mapping at the given output stream offset. Assumption: the offset given with each successive call to this method will not be smaller than the offset given at the previous invocation. Declaration protected virtual void AddOffCorrectMap(int off, int cumulativeDiff) Parameters Type Name Description System.Int32 off The output stream offset at which to apply the correction System.Int32 cumulativeDiff The input offset is given by adding this to the output offset | Improve this Doc View Source Correct(Int32) Retrieve the corrected offset. Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides CharFilter.Correct(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilter.html",
    "title": "Class HTMLStripCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HTMLStripCharFilter A CharFilter that wraps another System.IO.TextReader and attempts to strip out HTML constructs. Inheritance System.Object System.IO.TextReader CharFilter BaseCharFilter HTMLStripCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HTMLStripCharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source HTMLStripCharFilter(TextReader) Creates a new HTMLStripCharFilter over the provided TextReader. Declaration public HTMLStripCharFilter(TextReader source) Parameters Type Name Description System.IO.TextReader source System.IO.TextReader to strip html tags from. | Improve this Doc View Source HTMLStripCharFilter(TextReader, ICollection<String>) Creates a new HTMLStripCharFilter over the provided System.IO.TextReader with the specified start and end tags. Declaration public HTMLStripCharFilter(TextReader source, ICollection<string> escapedTags) Parameters Type Name Description System.IO.TextReader source System.IO.TextReader to strip html tags from. System.Collections.Generic.ICollection < System.String > escapedTags Tags in this set (both start and end tags) will not be filtered out. Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides CharFilter.Dispose(Boolean) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.HTMLStripCharFilterFactory.html",
    "title": "Class HTMLStripCharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HTMLStripCharFilterFactory Factory for HTMLStripCharFilter . <fieldType name=\"text_html\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.HTMLStripCharFilterFactory\" escapedTags=\"a, title\" /> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory CharFilterFactory HTMLStripCharFilterFactory Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HTMLStripCharFilterFactory : CharFilterFactory Constructors | Improve this Doc View Source HTMLStripCharFilterFactory(IDictionary<String, String>) Creates a new HTMLStripCharFilterFactory Declaration public HTMLStripCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.MappingCharFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.MappingCharFilter.html",
    "title": "Class MappingCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MappingCharFilter Simplistic CharFilter that applies the mappings contained in a NormalizeCharMap to the character stream, and correcting the resulting changes to the offsets. Matching is greedy (longest pattern matching at a given point wins). Replacement is allowed to be the empty string. Inheritance System.Object System.IO.TextReader CharFilter BaseCharFilter MappingCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class MappingCharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source MappingCharFilter(NormalizeCharMap, TextReader) Default constructor that takes a System.IO.TextReader . Declaration public MappingCharFilter(NormalizeCharMap normMap, TextReader in) Parameters Type Name Description NormalizeCharMap normMap System.IO.TextReader in Methods | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides CharFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.MappingCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.MappingCharFilterFactory.html",
    "title": "Class MappingCharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MappingCharFilterFactory Factory for MappingCharFilter . <fieldType name=\"text_map\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.MappingCharFilterFactory\" mapping=\"mapping.txt\"/> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 1.4 Inheritance System.Object AbstractAnalysisFactory CharFilterFactory MappingCharFilterFactory Implements IResourceLoaderAware IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class MappingCharFilterFactory : CharFilterFactory, IResourceLoaderAware, IMultiTermAwareComponent Constructors | Improve this Doc View Source MappingCharFilterFactory(IDictionary<String, String>) Creates a new MappingCharFilterFactory Declaration public MappingCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source m_normMap Declaration protected NormalizeCharMap m_normMap Field Value Type Description NormalizeCharMap Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader | Improve this Doc View Source ParseRules(IList<String>, NormalizeCharMap.Builder) Declaration protected virtual void ParseRules(IList<string> rules, NormalizeCharMap.Builder builder) Parameters Type Name Description System.Collections.Generic.IList < System.String > rules NormalizeCharMap.Builder builder | Improve this Doc View Source ParseString(String) Declaration protected virtual string ParseString(string s) Parameters Type Name Description System.String s Returns Type Description System.String Implements IResourceLoaderAware IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKAnalyzer.html",
    "title": "Class CJKAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKAnalyzer An Analyzer that tokenizes text with StandardTokenizer , normalizes content with CJKWidthFilter , folds case with LowerCaseFilter , forms bigrams of CJK with CJKBigramFilter , and filters stopwords with StopFilter Inheritance System.Object Analyzer StopwordAnalyzerBase CJKAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source CJKAnalyzer(LuceneVersion) Builds an analyzer which removes words in DefaultStopSet . Declaration public CJKAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source CJKAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public CJKAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default CJK stopwords. Currently it contains some common English words that are not usually useful for searching and some double-byte interpunctions. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleSpanFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleSpanFragmenter.html",
    "title": "Class SimpleSpanFragmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleSpanFragmenter IFragmenter implementation which breaks text up into same-size fragments but does not split up Spans . This is a simple sample class. Inheritance System.Object SimpleSpanFragmenter Implements IFragmenter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleSpanFragmenter : IFragmenter Constructors | Improve this Doc View Source SimpleSpanFragmenter(QueryScorer) Declaration public SimpleSpanFragmenter(QueryScorer queryScorer) Parameters Type Name Description QueryScorer queryScorer QueryScorer that was used to score hits | Improve this Doc View Source SimpleSpanFragmenter(QueryScorer, Int32) Declaration public SimpleSpanFragmenter(QueryScorer queryScorer, int fragmentSize) Parameters Type Name Description QueryScorer queryScorer QueryScorer that was used to score hits System.Int32 fragmentSize size in bytes of each fragment Methods | Improve this Doc View Source IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean See Also IsNewFragment () | Improve this Doc View Source Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText TokenStream tokenStream See Also Start ( System.String , TokenStream ) Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SpanGradientFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SpanGradientFormatter.html",
    "title": "Class SpanGradientFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanGradientFormatter Formats text with different color intensity depending on the score of the term using the span tag. GradientFormatter uses a bgcolor argument to the font tag which doesn't work in Mozilla, thus this class. Inheritance System.Object GradientFormatter SpanGradientFormatter Implements IFormatter Inherited Members GradientFormatter.m_fgRMin GradientFormatter.m_fgGMin GradientFormatter.m_fgBMin GradientFormatter.m_fgRMax GradientFormatter.m_fgGMax GradientFormatter.m_fgBMax GradientFormatter.m_highlightForeground GradientFormatter.m_bgRMin GradientFormatter.m_bgGMin GradientFormatter.m_bgBMin GradientFormatter.m_bgRMax GradientFormatter.m_bgGMax GradientFormatter.m_bgBMax GradientFormatter.m_highlightBackground GradientFormatter.GetForegroundColorString(Single) GradientFormatter.GetBackgroundColorString(Single) GradientFormatter.HexToInt32(String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SpanGradientFormatter : GradientFormatter, IFormatter Constructors | Improve this Doc View Source SpanGradientFormatter(Single, String, String, String, String) Declaration public SpanGradientFormatter(float maxScore, string minForegroundColor, string maxForegroundColor, string minBackgroundColor, string maxBackgroundColor) Parameters Type Name Description System.Single maxScore System.String minForegroundColor System.String maxForegroundColor System.String minBackgroundColor System.String maxBackgroundColor Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration public override string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Overrides GradientFormatter.HighlightTerm(String, TokenGroup) Implements IFormatter See Also GradientFormatter"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.html",
    "title": "Class MultiFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFunction Abstract parent class for ValueSource implementations that wrap multiple ValueSource s and apply their own logic. Inheritance System.Object ValueSource MultiFunction DefFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiFunction : ValueSource Constructors | Improve this Doc View Source MultiFunction(IList<ValueSource>) Declaration protected MultiFunction(IList<ValueSource> sources) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description System.Collections.Generic.IList < ValueSource > Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetDescription(String, IList<ValueSource>) Declaration public static string GetDescription(string name, IList<ValueSource> sources) Parameters Type Name Description System.String name System.Collections.Generic.IList < ValueSource > sources Returns Type Description System.String | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source ToString(String, FunctionValues[], Int32) Declaration public static string ToString(string name, FunctionValues[] valsArr, int doc) Parameters Type Name Description System.String name FunctionValues [] valsArr System.Int32 doc Returns Type Description System.String | Improve this Doc View Source ValsArr(IList<ValueSource>, IDictionary, AtomicReaderContext) Declaration public static FunctionValues[] ValsArr(IList<ValueSource> sources, IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources System.Collections.IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues []"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiSingleFunction.html",
    "title": "Class MultiSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiSingleFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible System.Single function to their values. NOTE: This was MultiFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MaxSingleFunction MinSingleFunction ProductSingleFunction SumSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiSingleFunction : ValueSource Constructors | Improve this Doc View Source MultiSingleFunction(ValueSource[]) Declaration public MultiSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Fields | Improve this Doc View Source m_sources Declaration protected readonly ValueSource[] m_sources Field Value Type Description ValueSource [] Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected abstract float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiValueSource.html",
    "title": "Class MultiValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiValueSource A ValueSource that abstractly represents ValueSource s for poly fields, and other things. Inheritance System.Object ValueSource MultiValueSource VectorValueSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiValueSource : ValueSource Properties | Improve this Doc View Source Dimension Declaration public abstract int Dimension { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NormValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NormValueSource.html",
    "title": "Class NormValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormValueSource Function that returns DecodeNormValue(Int64) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal Inheritance System.Object ValueSource NormValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class NormValueSource : ValueSource Constructors | Improve this Doc View Source NormValueSource(String) Declaration public NormValueSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NumDocsValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.NumDocsValueSource.html",
    "title": "Class NumDocsValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumDocsValueSource Returns the value of NumDocs for every document. This is the number of documents excluding deletions. Inheritance System.Object ValueSource NumDocsValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class NumDocsValueSource : ValueSource Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.OrdFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.OrdFieldSource.html",
    "title": "Class OrdFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using StringIndex. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example: If there were only three field values: \"apple\",\"banana\",\"pear\" then ord(\"apple\")=1, ord(\"banana\")=2, ord(\"pear\")=3 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. Inheritance System.Object ValueSource OrdFieldSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class OrdFieldSource : ValueSource Constructors | Improve this Doc View Source OrdFieldSource(String) Declaration public OrdFieldSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.PowSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.PowSingleFunction.html",
    "title": "Class PowSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PowSingleFunction Function to raise the base \"a\" to the power \"b\" NOTE: This was PowFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction PowSingleFunction Inherited Members DualSingleFunction.m_a DualSingleFunction.m_b DualSingleFunction.GetDescription() DualSingleFunction.GetValues(IDictionary, AtomicReaderContext) DualSingleFunction.CreateWeight(IDictionary, IndexSearcher) DualSingleFunction.GetHashCode() DualSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class PowSingleFunction : DualSingleFunction Constructors | Improve this Doc View Source PowSingleFunction(ValueSource, ValueSource) Declaration public PowSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the base. ValueSource b the exponent. Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides DualSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single Overrides DualSingleFunction.Func(Int32, FunctionValues, FunctionValues)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ProductSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ProductSingleFunction.html",
    "title": "Class ProductSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ProductSingleFunction ProductSingleFunction returns the product of it's components. NOTE: This was ProductFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction ProductSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ProductSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source ProductSingleFunction(ValueSource[]) Declaration public ProductSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.QueryValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.QueryValueSource.html",
    "title": "Class QueryValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryValueSource QueryValueSource returns the relevance score of the query Inheritance System.Object ValueSource QueryValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class QueryValueSource : ValueSource Constructors | Improve this Doc View Source QueryValueSource(Query, Single) Declaration public QueryValueSource(Query q, float defVal) Parameters Type Name Description Query q System.Single defVal Properties | Improve this Doc View Source DefaultValue Declaration public virtual float DefaultValue { get; } Property Value Type Description System.Single | Improve this Doc View Source Query Declaration public virtual Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.RangeMapSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.RangeMapSingleFunction.html",
    "title": "Class RangeMapSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RangeMapSingleFunction RangeMapSingleFunction implements a map function over another ValueSource whose values fall within min and max inclusive to target . Normally used as an argument to a FunctionQuery NOTE: This was RangeMapFloatFunction in Lucene Inheritance System.Object ValueSource RangeMapSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class RangeMapSingleFunction : ValueSource Constructors | Improve this Doc View Source RangeMapSingleFunction(ValueSource, Single, Single, ValueSource, ValueSource) Declaration public RangeMapSingleFunction(ValueSource source, float min, float max, ValueSource target, ValueSource def) Parameters Type Name Description ValueSource source System.Single min System.Single max ValueSource target ValueSource def | Improve this Doc View Source RangeMapSingleFunction(ValueSource, Single, Single, Single, Nullable<Single>) Declaration public RangeMapSingleFunction(ValueSource source, float min, float max, float target, float? def) Parameters Type Name Description ValueSource source System.Single min System.Single max System.Single target System.Nullable < System.Single > def Fields | Improve this Doc View Source m_defaultVal Declaration protected readonly ValueSource m_defaultVal Field Value Type Description ValueSource | Improve this Doc View Source m_max Declaration protected readonly float m_max Field Value Type Description System.Single | Improve this Doc View Source m_min Declaration protected readonly float m_min Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource | Improve this Doc View Source m_target Declaration protected readonly ValueSource m_target Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReciprocalSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReciprocalSingleFunction.html",
    "title": "Class ReciprocalSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReciprocalSingleFunction ReciprocalSingleFunction implements a reciprocal function f(x) = a/(mx+b) , based on the System.Single value of a field or function as exported by ValueSource . When a and b are equal, and x>=0 , this function has a maximum value of 1 that drops as x increases. Increasing the value of a and b together results in a movement of the entire function to a flatter part of the curve. These properties make this an idea function for boosting more recent documents. Example: recip(ms(NOW,mydatefield),3.16e-11,1,1) A multiplier of 3.16e-11 changes the units from milliseconds to years (since there are about 3.16e10 milliseconds per year). Thus, a very recent date will yield a value close to 1/(0+1) or 1, a date a year in the past will get a multiplier of about 1/(1+1) or 1/2, and date two years old will yield 1/(2+1) or 1/3. NOTE: This was ReciprocalFloatFunction in Lucene Inheritance System.Object ValueSource ReciprocalSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ReciprocalSingleFunction : ValueSource Constructors | Improve this Doc View Source ReciprocalSingleFunction(ValueSource, Single, Single, Single) f(source) = a/(m*float(source)+b) Declaration public ReciprocalSingleFunction(ValueSource source, float m, float a, float b) Parameters Type Name Description ValueSource source System.Single m System.Single a System.Single b Fields | Improve this Doc View Source m_a Declaration protected readonly float m_a Field Value Type Description System.Single | Improve this Doc View Source m_b Declaration protected readonly float m_b Field Value Type Description System.Single | Improve this Doc View Source m_m Declaration protected readonly float m_m Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext) See Also FunctionQuery"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReverseOrdFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ReverseOrdFieldSource.html",
    "title": "Class ReverseOrdFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReverseOrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using GetTermsIndex(AtomicReader, String, Single) and reverses the order. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example of reverse ordinal (rord): If there were only three field values: \"apple\",\"banana\",\"pear\" then rord(\"apple\")=3, rord(\"banana\")=2, ord(\"pear\")=1 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. Inheritance System.Object ValueSource ReverseOrdFieldSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ReverseOrdFieldSource : ValueSource Constructors | Improve this Doc View Source ReverseOrdFieldSource(String) Declaration public ReverseOrdFieldSource(string field) Parameters Type Name Description System.String field Properties | Improve this Doc View Source Field Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermOrdValComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermOrdValComparer.html",
    "title": "Class FieldComparer.TermOrdValComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.TermOrdValComparer Sorts by field's natural Term sort order, using ordinals. This is functionally equivalent to FieldComparer.TermValComparer , but it first resolves the string to their relative ordinal positions (using the index returned by GetTermsIndex(AtomicReader, String, Single) ), and does most comparisons using the ordinals. For medium to large results, this comparer will be much faster than FieldComparer.TermValComparer . For very small result sets it may be slower. Inheritance System.Object FieldComparer FieldComparer < BytesRef > FieldComparer.TermOrdValComparer Inherited Members FieldComparer<BytesRef>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermOrdValComparer : FieldComparer<BytesRef> Constructors | Improve this Doc View Source TermOrdValComparer(Int32, String) Creates this, sorting missing values first. Declaration public TermOrdValComparer(int numHits, string field) Parameters Type Name Description System.Int32 numHits System.String field | Improve this Doc View Source TermOrdValComparer(Int32, String, Boolean) Creates this, with control over how missing values are sorted. Pass true for sortMissingLast to put missing values at the end. Declaration public TermOrdValComparer(int numHits, string field, bool sortMissingLast) Parameters Type Name Description System.Int32 numHits System.String field System.Boolean sortMissingLast Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(BytesRef, BytesRef) Declaration public override int CompareValues(BytesRef val1, BytesRef val2) Parameters Type Name Description BytesRef val1 BytesRef val2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareValues(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Copy(System.Int32, System.Int32) | Improve this Doc View Source GetSortedDocValues(AtomicReaderContext, String) Retrieves the SortedDocValues for the field in this segment Declaration protected virtual SortedDocValues GetSortedDocValues(AtomicReaderContext context, string field) Parameters Type Name Description AtomicReaderContext context System.String field Returns Type Description SortedDocValues | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermValComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.TermValComparer.html",
    "title": "Class FieldComparer.TermValComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.TermValComparer Sorts by field's natural Term sort order. All comparisons are done using CompareTo(BytesRef) , which is slow for medium to large result sets but possibly very fast for very small results sets. Inheritance System.Object FieldComparer FieldComparer < BytesRef > FieldComparer.TermValComparer Inherited Members FieldComparer<BytesRef>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TermValComparer : FieldComparer<BytesRef> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(BytesRef, BytesRef) Declaration public override int CompareValues(BytesRef val1, BytesRef val2) Parameters Type Name Description BytesRef val1 BytesRef val2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.CompareValues(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<Lucene.Net.Util.BytesRef>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MaxNonCompetitiveBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MaxNonCompetitiveBoostAttribute.html",
    "title": "Class MaxNonCompetitiveBoostAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MaxNonCompetitiveBoostAttribute Implementation class for IMaxNonCompetitiveBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute MaxNonCompetitiveBoostAttribute Implements IMaxNonCompetitiveBoostAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class MaxNonCompetitiveBoostAttribute : Attribute, IMaxNonCompetitiveBoostAttribute, IAttribute Properties | Improve this Doc View Source CompetitiveTerm Declaration public BytesRef CompetitiveTerm { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source MaxNonCompetitiveBoost Declaration public float MaxNonCompetitiveBoost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements IMaxNonCompetitiveBoostAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiCollector.html",
    "title": "Class MultiCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiCollector A ICollector which allows running a search with several ICollector s. It offers a static Wrap(ICollector[]) method which accepts a list of collectors and wraps them with MultiCollector , while filtering out the null ones. Inheritance System.Object MultiCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer | Improve this Doc View Source Wrap(ICollector[]) Wraps a list of ICollector s with a MultiCollector . This method works as follows: Filters out the null collectors, so they are not used during search time. If the input contains 1 real collector (i.e. non- null ), it is returned. Otherwise the method returns a MultiCollector which wraps the non- null ones. Declaration public static ICollector Wrap(params ICollector[] collectors) Parameters Type Name Description ICollector [] collectors Returns Type Description ICollector Exceptions Type Condition System.ArgumentException if either 0 collectors were input, or all collectors are null . Implements ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiPhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiPhraseQuery.html",
    "title": "Class MultiPhraseQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiPhraseQuery MultiPhraseQuery is a generalized version of PhraseQuery , with an added method Add(Term[]) . To use this class, to search for the phrase \"Microsoft app*\" first use Add(Term) on the term \"Microsoft\", then find all terms that have \"app\" as prefix using MultiFields.GetFields(IndexReader).GetTerms(string) , and use Add(Term[]) to add them to the query. Collection initializer note: To create and populate a MultiPhraseQuery in a single statement, you can use the following example as a guide: var multiPhraseQuery = new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) , Add(Term[]) , or Add(Term[], Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query MultiPhraseQuery Implements System.Collections.Generic.IEnumerable < Term []> System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiPhraseQuery : Query, IEnumerable<Term[]>, IEnumerable Properties | Improve this Doc View Source Slop Sets the phrase slop for this query. Declaration public virtual int Slop { get; set; } Property Value Type Description System.Int32 See Also Slop Methods | Improve this Doc View Source Add(Term) Add a single term at the next position in the phrase. Declaration public virtual void Add(Term term) Parameters Type Name Description Term term See Also Add ( Term ) | Improve this Doc View Source Add(Term[]) Add multiple terms at the next position in the phrase. Any of the terms may match. Declaration public virtual void Add(Term[] terms) Parameters Type Name Description Term [] terms See Also Add ( Term ) | Improve this Doc View Source Add(Term[], Int32) Allows to specify the relative position of terms within the phrase. Declaration public virtual void Add(Term[] terms, int position) Parameters Type Name Description Term [] terms System.Int32 position See Also Add ( Term , System.Int32 ) | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) Exceptions Type Condition System.InvalidOperationException If this query is not yet rewritten | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.MultiPhraseQuery.termArrays collection. Declaration public IEnumerator<Term[]> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Term []> An enumerator that can be used to iterate through the Lucene.Net.Search.MultiPhraseQuery.termArrays collection. | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetPositions() Returns the relative positions of terms in this phrase. Declaration public virtual int[] GetPositions() Returns Type Description System.Int32 [] | Improve this Doc View Source GetTermArrays() Returns a List of the terms in the multiphrase. Do not modify the List or its contents. Declaration public virtual IList<Term[]> GetTermArrays() Returns Type Description System.Collections.Generic.IList < Term []> | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override sealed string ToString(string f) Parameters Type Name Description System.String f Returns Type Description System.String Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.MultiPhraseQuery.termArrays . Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator An enumerator that can be used to iterate through the Lucene.Net.Search.MultiPhraseQuery.termArrays collection. Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.AveragePayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.AveragePayloadFunction.html",
    "title": "Class AveragePayloadFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AveragePayloadFunction Calculate the final score as the average score of all payloads seen. Is thread safe and completely reusable. Inheritance System.Object PayloadFunction AveragePayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class AveragePayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.MaxPayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.MaxPayloadFunction.html",
    "title": "Class MaxPayloadFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MaxPayloadFunction Returns the maximum payload score seen, else 1 if there are no payloads on the doc. Is thread safe and completely reusable. Inheritance System.Object PayloadFunction MaxPayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class MaxPayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.MinPayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.MinPayloadFunction.html",
    "title": "Class MinPayloadFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MinPayloadFunction Calculates the minimum payload seen Inheritance System.Object PayloadFunction MinPayloadFunction Inherited Members PayloadFunction.Explain(Int32, String, Int32, Single) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class MinPayloadFunction : PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Declaration public override float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 start System.Int32 end System.Int32 numPayloadsSeen System.Single currentScore System.Single currentPayloadScore Returns Type Description System.Single Overrides PayloadFunction.CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Declaration public override float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description System.Single Overrides PayloadFunction.DocScore(Int32, String, Int32, Single) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides PayloadFunction.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PayloadFunction.GetHashCode() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Reader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Reader.html",
    "title": "Class PackedInt32s.Reader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Reader A read-only random access array of positive integers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.NullReader Inherited Members NumericDocValues.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Reader : NumericDocValues Properties | Improve this Doc View Source BitsPerValue Declaration public abstract int BitsPerValue { get; } Property Value Type Description System.Int32 The number of bits used to store any given value. Note: this does not imply that memory usage is bitsPerValue * #values as implementations are free to use non-space-optimal packing of bits. | Improve this Doc View Source Count The number of values. NOTE: This was size() in Lucene. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasArray Returns true if this implementation is backed by a native .NET array. Declaration public virtual bool HasArray { get; } Property Value Type Description System.Boolean See Also GetArray() Methods | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Bulk get: read at least one and at most len longs starting from index into arr[off:off+len] and return the actual number of values that have been read. Declaration public virtual int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source GetArray() Expert: if the bit-width of this reader matches one of .NET's native types, returns the underlying array (ie, byte[], short[], int[], long[]); else, returns null . Note that when accessing the array you must upgrade the type (bitwise AND with all ones), to interpret the full value as unsigned. Ie, bytes[idx]&0xFF, shorts[idx]&0xFFFF, etc. Declaration public virtual object GetArray() Returns Type Description System.Object | Improve this Doc View Source RamBytesUsed() Return the in-memory size in bytes. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PagedGrowableWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PagedGrowableWriter.html",
    "title": "Class PagedGrowableWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedGrowableWriter A PagedGrowableWriter . This class slices data into fixed-size blocks which have independent numbers of bits per value and grow on-demand. You should use this class instead of the AbstractAppendingInt64Buffer related ones only when you need random write-access. Otherwise this class will likely be slower and less memory-efficient. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable < PagedGrowableWriter > PagedGrowableWriter Inherited Members AbstractPagedMutable<PagedGrowableWriter>.FillPages() AbstractPagedMutable<PagedGrowableWriter>.Count AbstractPagedMutable<PagedGrowableWriter>.Get(Int64) AbstractPagedMutable<PagedGrowableWriter>.Set(Int64, Int64) AbstractPagedMutable<PagedGrowableWriter>.RamBytesUsed() AbstractPagedMutable<PagedGrowableWriter>.Resize(Int64) AbstractPagedMutable<PagedGrowableWriter>.Grow(Int64) AbstractPagedMutable<PagedGrowableWriter>.Grow() AbstractPagedMutable<PagedGrowableWriter>.ToString() Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PagedGrowableWriter : AbstractPagedMutable<PagedGrowableWriter> Constructors | Improve this Doc View Source PagedGrowableWriter(Int64, Int32, Int32, Single) Create a new PagedGrowableWriter instance. Declaration public PagedGrowableWriter(long size, int pageSize, int startBitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int64 size The number of values to store. System.Int32 pageSize The number of values per page. System.Int32 startBitsPerValue The initial number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio. Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected override long BaseRamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.BaseRamBytesUsed() | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected override PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.NewMutable(System.Int32, System.Int32) | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected override PagedGrowableWriter NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description PagedGrowableWriter Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedGrowableWriter>.NewUnfilledCopy(System.Int64) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PagedMutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PagedMutable.html",
    "title": "Class PagedMutable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedMutable A PagedMutable . This class slices data into fixed-size blocks which have the same number of bits per value. It can be a useful replacement for PackedInt32s.Mutable to store more than 2B values. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable < PagedMutable > PagedMutable Inherited Members AbstractPagedMutable<PagedMutable>.FillPages() AbstractPagedMutable<PagedMutable>.Count AbstractPagedMutable<PagedMutable>.Get(Int64) AbstractPagedMutable<PagedMutable>.Set(Int64, Int64) AbstractPagedMutable<PagedMutable>.RamBytesUsed() AbstractPagedMutable<PagedMutable>.Resize(Int64) AbstractPagedMutable<PagedMutable>.Grow(Int64) AbstractPagedMutable<PagedMutable>.Grow() AbstractPagedMutable<PagedMutable>.ToString() Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PagedMutable : AbstractPagedMutable<PagedMutable> Constructors | Improve this Doc View Source PagedMutable(Int64, Int32, Int32, Single) Create a new PagedMutable instance. Declaration public PagedMutable(long size, int pageSize, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int64 size The number of values to store. System.Int32 pageSize The number of values per page. System.Int32 bitsPerValue The number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio. Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected override long BaseRamBytesUsed() Returns Type Description System.Int64 Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.BaseRamBytesUsed() | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected override PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.NewMutable(System.Int32, System.Int32) | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected override PagedMutable NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description PagedMutable Overrides Lucene.Net.Util.Packed.AbstractPagedMutable<Lucene.Net.Util.Packed.PagedMutable>.NewUnfilledCopy(System.Int64) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RecyclingByteBlockAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RecyclingByteBlockAllocator.html",
    "title": "Class RecyclingByteBlockAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RecyclingByteBlockAllocator A ByteBlockPool.Allocator implementation that recycles unused byte blocks in a buffer and reuses them in subsequent calls to GetByteBlock() . Note: this class is not thread-safe. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ByteBlockPool.Allocator RecyclingByteBlockAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class RecyclingByteBlockAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source RecyclingByteBlockAllocator() Creates a new RecyclingByteBlockAllocator with a block size of BYTE_BLOCK_SIZE , upper buffered docs limit of DEFAULT_BUFFERED_BLOCKS (64). Declaration public RecyclingByteBlockAllocator() | Improve this Doc View Source RecyclingByteBlockAllocator(Int32, Int32) Creates a new RecyclingByteBlockAllocator . Declaration public RecyclingByteBlockAllocator(int blockSize, int maxBufferedBlocks) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered byte block. | Improve this Doc View Source RecyclingByteBlockAllocator(Int32, Int32, Counter) Creates a new RecyclingByteBlockAllocator Declaration public RecyclingByteBlockAllocator(int blockSize, int maxBufferedBlocks, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered byte block. Counter bytesUsed Counter reference counting internally allocated bytes. Fields | Improve this Doc View Source DEFAULT_BUFFERED_BLOCKS Declaration public const int DEFAULT_BUFFERED_BLOCKS = 64 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BytesUsed Declaration public long BytesUsed { get; } Property Value Type Description System.Int64 The number of bytes currently allocated by this ByteBlockPool.Allocator . | Improve this Doc View Source MaxBufferedBlocks Declaration public int MaxBufferedBlocks { get; } Property Value Type Description System.Int32 The maximum number of buffered byte blocks. | Improve this Doc View Source NumBufferedBlocks Declaration public int NumBufferedBlocks { get; } Property Value Type Description System.Int32 The number of currently buffered blocks. Methods | Improve this Doc View Source FreeBlocks(Int32) Removes the given number of byte blocks from the buffer if possible. Declaration public int FreeBlocks(int num) Parameters Type Name Description System.Int32 num The number of byte blocks to remove. Returns Type Description System.Int32 The number of actually removed buffers. | Improve this Doc View Source GetByteBlock() Declaration public override byte[] GetByteBlock() Returns Type Description System.Byte [] Overrides ByteBlockPool.Allocator.GetByteBlock() | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RecyclingInt32BlockAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RecyclingInt32BlockAllocator.html",
    "title": "Class RecyclingInt32BlockAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RecyclingInt32BlockAllocator A Int32BlockPool.Allocator implementation that recycles unused System.Int32 blocks in a buffer and reuses them in subsequent calls to GetInt32Block() . Note: this class is not thread-safe. NOTE: This was RecyclingIntBlockAllocator in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.Allocator RecyclingInt32BlockAllocator Inherited Members Int32BlockPool.Allocator.m_blockSize System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class RecyclingInt32BlockAllocator : Int32BlockPool.Allocator Constructors | Improve this Doc View Source RecyclingInt32BlockAllocator() Creates a new RecyclingInt32BlockAllocator with a block size of INT32_BLOCK_SIZE , upper buffered docs limit of DEFAULT_BUFFERED_BLOCKS . Declaration public RecyclingInt32BlockAllocator() | Improve this Doc View Source RecyclingInt32BlockAllocator(Int32, Int32) Creates a new RecyclingInt32BlockAllocator . Declaration public RecyclingInt32BlockAllocator(int blockSize, int maxBufferedBlocks) Parameters Type Name Description System.Int32 blockSize The size of each block returned by this allocator. System.Int32 maxBufferedBlocks Maximum number of buffered int blocks. | Improve this Doc View Source RecyclingInt32BlockAllocator(Int32, Int32, Counter) Creates a new RecyclingInt32BlockAllocator . Declaration public RecyclingInt32BlockAllocator(int blockSize, int maxBufferedBlocks, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize The block size in bytes. System.Int32 maxBufferedBlocks Maximum number of buffered int block. Counter bytesUsed Counter reference counting internally allocated bytes. Fields | Improve this Doc View Source DEFAULT_BUFFERED_BLOCKS Declaration public const int DEFAULT_BUFFERED_BLOCKS = 64 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BytesUsed Declaration public long BytesUsed { get; } Property Value Type Description System.Int64 The number of bytes currently allocated by this Int32BlockPool.Allocator . | Improve this Doc View Source MaxBufferedBlocks Declaration public int MaxBufferedBlocks { get; } Property Value Type Description System.Int32 The maximum number of buffered byte blocks. | Improve this Doc View Source NumBufferedBlocks Declaration public int NumBufferedBlocks { get; } Property Value Type Description System.Int32 The number of currently buffered blocks. Methods | Improve this Doc View Source FreeBlocks(Int32) Removes the given number of int blocks from the buffer if possible. Declaration public int FreeBlocks(int num) Parameters Type Name Description System.Int32 num The number of int blocks to remove. Returns Type Description System.Int32 The number of actually removed buffers. | Improve this Doc View Source GetInt32Block() NOTE: This was getIntBlock() in Lucene Declaration public override int[] GetInt32Block() Returns Type Description System.Int32 [] Overrides Int32BlockPool.Allocator.GetInt32Block() | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks in Lucene Declaration public override void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end Overrides Int32BlockPool.Allocator.RecycleInt32Blocks(Int32[][], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer-1.html",
    "title": "Class RollingBuffer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RollingBuffer<T> Acts like forever growing T[] , but internally uses a circular buffer to reuse instances of . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RollingBuffer<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class RollingBuffer<T> where T : RollingBuffer.IResettable Type Parameters Name Description T Constructors | Improve this Doc View Source RollingBuffer() Declaration protected RollingBuffer() | Improve this Doc View Source RollingBuffer(Func<T>) Declaration protected RollingBuffer(Func<T> factory) Parameters Type Name Description System.Func <T> factory Properties | Improve this Doc View Source MaxPos Returns the maximum position looked up, or -1 if no position has been looked up since Reset() /init. Declaration public virtual int MaxPos { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source FreeBefore(Int32) Declaration public virtual void FreeBefore(int pos) Parameters Type Name Description System.Int32 pos | Improve this Doc View Source Get(Int32) Get T instance for this absolute position; This is allowed to be arbitrarily far \"in the future\" but cannot be before the last FreeBefore(Int32) . Declaration public virtual T Get(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description T | Improve this Doc View Source NewInstance() Declaration protected abstract T NewInstance() Returns Type Description T | Improve this Doc View Source Reset() Declaration public virtual void Reset() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ServiceNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ServiceNameAttribute.html",
    "title": "Class ServiceNameAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ServiceNameAttribute LUCENENET specific abstract class for System.Attribute s that can be used to override the default convention-based names of services. For example, \"Lucene40Codec\" will by convention be named \"Lucene40\". Using the CodecNameAttribute , the name can be overridden with a custom value. Inheritance System.Object System.Attribute ServiceNameAttribute CodecNameAttribute DocValuesFormatNameAttribute PostingsFormatNameAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class ServiceNameAttribute : Attribute Constructors | Improve this Doc View Source ServiceNameAttribute(String) Sole constructor. Initializes the service name. Declaration public ServiceNameAttribute(string name) Parameters Type Name Description System.String name Properties | Improve this Doc View Source Name Gets the service name. Declaration public string Name { get; } Property Value Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.SetOnce-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SetOnce-1.html",
    "title": "Class SetOnce<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetOnce<T> A convenient class which offers a semi-immutable object wrapper implementation which allows one to set the value of an object exactly once, and retrieve it many times. If Set(T) is called more than once, AlreadySetException is thrown and the operation will fail. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SetOnce<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class SetOnce<T> where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source SetOnce() A default constructor which does not set the internal object, and allows setting it by calling Set(T) . Declaration public SetOnce() | Improve this Doc View Source SetOnce(T) Creates a new instance with the internal object set to the given object. Note that any calls to Set(T) afterwards will result in AlreadySetException Declaration public SetOnce(T obj) Parameters Type Name Description T obj Exceptions Type Condition AlreadySetException if called more than once See Also Set(T) Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source Get() Returns the object set by Set(T) . Declaration public T Get() Returns Type Description T | Improve this Doc View Source Set(T) Sets the given object. If the object has already been set, an exception is thrown. Declaration public void Set(T obj) Parameters Type Name Description T obj Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.SPIClassIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SPIClassIterator-1.html",
    "title": "Class SPIClassIterator<S> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SPIClassIterator<S> Helper class for loading SPI classes from classpath (META-INF files). This is a light impl of java.util.ServiceLoader but is guaranteed to be bug-free regarding classpath order and does not instantiate or initialize the classes found. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SPIClassIterator<S> Implements System.Collections.Generic.IEnumerable < System.Type > System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SPIClassIterator<S> : IEnumerable<Type>, IEnumerable Type Parameters Name Description S Methods | Improve this Doc View Source Get() Declaration public static SPIClassIterator<S> Get() Returns Type Description SPIClassIterator <S> | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<Type> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Type > Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanNormalizationFilterFactory.html",
    "title": "Class GermanNormalizationFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanNormalizationFilterFactory Factory for GermanNormalizationFilter . <fieldType name=\"text_denorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GermanNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source GermanNormalizationFilterFactory(IDictionary<String, String>) Creates a new GermanNormalizationFilterFactory Declaration public GermanNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanStemFilter.html",
    "title": "Class GermanStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanStemFilter A TokenFilter that stems German words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a GermanStemmer ). To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanStemFilter(TokenStream) Creates a GermanStemFilter instance Declaration public GermanStemFilter(TokenStream in) Parameters Type Name Description TokenStream in the source TokenStream Properties | Improve this Doc View Source Stemmer Set a alternative/custom GermanStemmer for this filter. Declaration public GermanStemmer Stemmer { get; set; } Property Value Type Description GermanStemmer Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Returns true for next token in the stream, or false at EOS Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanStemFilterFactory.html",
    "title": "Class GermanStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanStemFilterFactory Factory for GermanStemFilter . <fieldType name=\"text_destem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GermanStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GermanStemFilterFactory(IDictionary<String, String>) Creates a new GermanStemFilterFactory Declaration public GermanStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekAnalyzer.html",
    "title": "Class GreekAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekAnalyzer Analyzer for the Greek language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating GreekAnalyzer : As of 3.1, StandardFilter and GreekStemmer are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase GreekAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source GreekAnalyzer(LuceneVersion) Builds an analyzer with the default stop words. Declaration public GreekAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion | Improve this Doc View Source GreekAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. NOTE: The stopwords set should be pre-processed with the logic of GreekLowerCaseFilter for best results. Declaration public GreekAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Greek stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default Greek-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default Greek-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with GreekLowerCaseFilter , StandardFilter , StopFilter , and GreekStemFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekLowerCaseFilter.html",
    "title": "Class GreekLowerCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekLowerCaseFilter Normalizes token text to lower case, removes some Greek diacritics, and standardizes final sigma to sigma. You must specify the required LuceneVersion compatibility when creating GreekLowerCaseFilter : As of 3.1, supplementary characters are properly lowercased. Inheritance System.Object AttributeSource TokenStream TokenFilter GreekLowerCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GreekLowerCaseFilter(LuceneVersion, TokenStream) Create a GreekLowerCaseFilter that normalizes Greek token text. Declaration public GreekLowerCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version, See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekLowerCaseFilterFactory.html",
    "title": "Class GreekLowerCaseFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekLowerCaseFilterFactory Factory for GreekLowerCaseFilter . <fieldType name=\"text_glc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GreekLowerCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GreekLowerCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source GreekLowerCaseFilterFactory(IDictionary<String, String>) Creates a new GreekLowerCaseFilterFactory Declaration public GreekLowerCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekStemFilter.html",
    "title": "Class GreekStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekStemFilter A TokenFilter that applies GreekStemmer to stem Greek words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved by using either GreekLowerCaseFilter or ICUFoldingFilter before GreekStemFilter . @lucene.experimental Inheritance System.Object AttributeSource TokenStream TokenFilter GreekStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GreekStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GreekStemFilter(TokenStream) Declaration public GreekStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekStemFilterFactory.html",
    "title": "Class GreekStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekStemFilterFactory Factory for GreekStemFilter . <fieldType name=\"text_gstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> <filter class=\"solr.GreekStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GreekStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GreekStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GreekStemFilterFactory(IDictionary<String, String>) Creates a new GreekStemFilterFactory Declaration public GreekStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogDocMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogDocMergePolicy.html",
    "title": "Class LogDocMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LogDocMergePolicy This is a LogMergePolicy that measures size of a segment as the number of documents (not taking deletions into account). Inheritance System.Object MergePolicy LogMergePolicy LogDocMergePolicy Implements System.IDisposable Inherited Members LogMergePolicy.LEVEL_LOG_SPAN LogMergePolicy.DEFAULT_MERGE_FACTOR LogMergePolicy.DEFAULT_MAX_MERGE_DOCS LogMergePolicy.DEFAULT_NO_CFS_RATIO LogMergePolicy.m_mergeFactor LogMergePolicy.m_minMergeSize LogMergePolicy.m_maxMergeSize LogMergePolicy.m_maxMergeSizeForForcedMerge LogMergePolicy.m_maxMergeDocs LogMergePolicy.m_calibrateSizeByDeletes LogMergePolicy.IsVerbose LogMergePolicy.Message(String) LogMergePolicy.MergeFactor LogMergePolicy.CalibrateSizeByDeletes LogMergePolicy.Dispose(Boolean) LogMergePolicy.SizeDocs(SegmentCommitInfo) LogMergePolicy.SizeBytes(SegmentCommitInfo) LogMergePolicy.IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedDeletesMerges(SegmentInfos) LogMergePolicy.FindMerges(MergeTrigger, SegmentInfos) LogMergePolicy.MaxMergeDocs LogMergePolicy.ToString() MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class LogDocMergePolicy : LogMergePolicy, IDisposable Constructors | Improve this Doc View Source LogDocMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public LogDocMergePolicy() Fields | Improve this Doc View Source DEFAULT_MIN_MERGE_DOCS Default minimum segment size. Declaration public static readonly int DEFAULT_MIN_MERGE_DOCS Field Value Type Description System.Int32 See Also MinMergeDocs Properties | Improve this Doc View Source MinMergeDocs Sets the minimum size for the lowest level segments. Any segments below this size are considered to be on the same level (even if they vary drastically in size) and will be merged whenever there are mergeFactor of them. This effectively truncates the \"long tail\" of small segments that would otherwise be created into a single level. If you set this too large, it could greatly increase the merging cost during indexing (if you flush many small segments). Declaration public virtual int MinMergeDocs { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogMergePolicy.html",
    "title": "Class LogMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LogMergePolicy This class implements a MergePolicy that tries to merge segments into levels of exponentially increasing size, where each level has fewer segments than the value of the merge factor. Whenever extra segments (beyond the merge factor upper bound) are encountered, all segments within the level are merged. You can get or set the merge factor using MergeFactor . This class is abstract and requires a subclass to define the Size(SegmentCommitInfo) method which specifies how a segment's size is determined. LogDocMergePolicy is one subclass that measures size by document count in the segment. LogByteSizeMergePolicy is another subclass that measures size as the total byte size of the file(s) for the segment. Inheritance System.Object MergePolicy LogMergePolicy LogByteSizeMergePolicy LogDocMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class LogMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source LogMergePolicy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public LogMergePolicy() Fields | Improve this Doc View Source DEFAULT_MAX_MERGE_DOCS Default maximum segment size. A segment of this size or larger will never be merged. Declaration public static readonly int DEFAULT_MAX_MERGE_DOCS Field Value Type Description System.Int32 See Also MaxMergeDocs | Improve this Doc View Source DEFAULT_MERGE_FACTOR Default merge factor, which is how many segments are merged at a time Declaration public static readonly int DEFAULT_MERGE_FACTOR Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default noCFSRatio. If a merge's size is >= 10% of the index, then we disable compound file for it. Declaration public static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double See Also NoCFSRatio | Improve this Doc View Source LEVEL_LOG_SPAN Defines the allowed range of log(size) for each level. A level is computed by taking the max segment log size, minus LEVEL_LOG_SPAN, and finding all segments falling within that range. Declaration public static readonly double LEVEL_LOG_SPAN Field Value Type Description System.Double | Improve this Doc View Source m_calibrateSizeByDeletes If true, we pro-rate a segment's size by the percentage of non-deleted documents. Declaration protected bool m_calibrateSizeByDeletes Field Value Type Description System.Boolean | Improve this Doc View Source m_maxMergeDocs If a segment has more than this many documents then it will never be merged. Declaration protected int m_maxMergeDocs Field Value Type Description System.Int32 | Improve this Doc View Source m_maxMergeSize If the size of a segment exceeds this value then it will never be merged. Declaration protected long m_maxMergeSize Field Value Type Description System.Int64 | Improve this Doc View Source m_maxMergeSizeForForcedMerge If the size of a segment exceeds this value then it will never be merged during ForceMerge(Int32) . Declaration protected long m_maxMergeSizeForForcedMerge Field Value Type Description System.Int64 | Improve this Doc View Source m_mergeFactor How many segments to merge at a time. Declaration protected int m_mergeFactor Field Value Type Description System.Int32 | Improve this Doc View Source m_minMergeSize Any segments whose size is smaller than this value will be rounded up to this value. This ensures that tiny segments are aggressively merged. Declaration protected long m_minMergeSize Field Value Type Description System.Int64 Properties | Improve this Doc View Source CalibrateSizeByDeletes Gets or Sets whether the segment size should be calibrated by the number of deletes when choosing segments for merge. Declaration public virtual bool CalibrateSizeByDeletes { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsVerbose Returns true if LogMergePolicy is enabled in Lucene.Net.Index.IndexWriter.infoStream . Declaration protected virtual bool IsVerbose { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxMergeDocs Determines the largest segment (measured by document count) that may be merged with other segments. Small values (e.g., less than 10,000) are best for interactive indexing, as this limits the length of pauses while indexing to a few seconds. Larger values are best for batched indexing and speedier searches. The default value is System.Int32.MaxValue . The default merge policy ( LogByteSizeMergePolicy ) also allows you to set this limit by net size (in MB) of the segment, using MaxMergeMB . Declaration public virtual int MaxMergeDocs { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeFactor Gets or Sets the number of segments that are merged at once and also controls the total number of segments allowed to accumulate in the index. This determines how often segment indices are merged by AddDocument(IEnumerable<IIndexableField>) . With smaller values, less RAM is used while indexing, and searches are faster, but indexing speed is slower. With larger values, more RAM is used during indexing, and while searches is slower, indexing is faster. Thus larger values (> 10) are best for batch index creation, and smaller values (< 10) for indices that are interactively maintained. Declaration public virtual int MergeFactor { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Finds merges necessary to force-merge all deletes from the index. We simply merge adjacent segments that have deletes, up to mergeFactor at a time. Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Returns the merges necessary to merge the index down to a specified number of segments. this respects the m_maxMergeSizeForForcedMerge setting. By default, and assuming maxNumSegments=1 , only one segment will be left in the index, where that segment has no deletions pending nor separate norms, and it is in compound file format if the current useCompoundFile setting is true . This method returns multiple merges (mergeFactor at a time) so the MergeScheduler in use may make use of concurrency. Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos infos, int maxNumSegments, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxNumSegments System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Checks if any merges are now necessary and returns a MergePolicy.MergeSpecification if so. A merge is necessary when there are more than MergeFactor segments at a given level. When multiple levels have too many segments, this method will return multiple merges, allowing the MergeScheduler to use concurrency. Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos infos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Returns true if the number of segments eligible for merging is less than or equal to the specified maxNumSegments . Declaration protected virtual bool IsMerged(SegmentInfos infos, int maxNumSegments, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxNumSegments System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description System.Boolean | Improve this Doc View Source Message(String) Print a debug message to Lucene.Net.Index.IndexWriter.infoStream . Declaration protected virtual void Message(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SizeBytes(SegmentCommitInfo) Return the byte size of the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents if CalibrateSizeByDeletes is set. Declaration protected virtual long SizeBytes(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source SizeDocs(SegmentCommitInfo) Return the number of documents in the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents if CalibrateSizeByDeletes is set. Declaration protected virtual long SizeDocs(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiReader.html",
    "title": "Class MultiReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiReader A CompositeReader which reads multiple indexes, appending their content. It can be used to create a view on several sub-readers (like DirectoryReader ) and execute searches on it. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < IndexReader > MultiReader Implements System.IDisposable Inherited Members BaseCompositeReader<IndexReader>.GetTermVectors(Int32) BaseCompositeReader<IndexReader>.NumDocs BaseCompositeReader<IndexReader>.MaxDoc BaseCompositeReader<IndexReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<IndexReader>.DocFreq(Term) BaseCompositeReader<IndexReader>.TotalTermFreq(Term) BaseCompositeReader<IndexReader>.GetSumDocFreq(String) BaseCompositeReader<IndexReader>.GetDocCount(String) BaseCompositeReader<IndexReader>.GetSumTotalTermFreq(String) BaseCompositeReader<IndexReader>.ReaderIndex(Int32) BaseCompositeReader<IndexReader>.ReaderBase(Int32) BaseCompositeReader<IndexReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiReader : BaseCompositeReader<IndexReader>, IDisposable Constructors | Improve this Doc View Source MultiReader(IndexReader[]) Construct a MultiReader aggregating the named set of (sub)readers. Note that all subreaders are closed if this Multireader is closed. Declaration public MultiReader(params IndexReader[] subReaders) Parameters Type Name Description IndexReader [] subReaders set of (sub)readers | Improve this Doc View Source MultiReader(IndexReader[], Boolean) Construct a MultiReader aggregating the named set of (sub)readers. Declaration public MultiReader(IndexReader[] subReaders, bool closeSubReaders) Parameters Type Name Description IndexReader [] subReaders set of (sub)readers; this array will be cloned. System.Boolean closeSubReaders indicates whether the subreaders should be disposed when this MultiReader is disposed Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTerms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTerms.html",
    "title": "Class MultiTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTerms Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Terms MultiTerms Inherited Members Terms.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiTerms : Terms Constructors | Improve this Doc View Source MultiTerms(Terms[], ReaderSlice[]) Sole constructor. Declaration public MultiTerms(Terms[] subs, ReaderSlice[] subSlices) Parameters Type Name Description Terms [] subs The Terms instances of all sub-readers. ReaderSlice [] subSlices A parallel array (matching subs ) describing the sub-reader slices. Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum) | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Declaration public override TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum Overrides Terms.Intersect(CompiledAutomaton, BytesRef) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReader.html",
    "title": "Class SegmentReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentReader IndexReader implementation over a single segment. Instances pointing to the same segment (but with different deletes, etc) may share the same core data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexReader AtomicReader SegmentReader Implements System.IDisposable Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentReader : AtomicReader, IDisposable Constructors | Improve this Doc View Source SegmentReader(SegmentCommitInfo, Int32, IOContext) Constructs a new SegmentReader with a new core. Declaration public SegmentReader(SegmentCommitInfo si, int termInfosIndexDivisor, IOContext context) Parameters Type Name Description SegmentCommitInfo si System.Int32 termInfosIndexDivisor IOContext context Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey | Improve this Doc View Source Directory Returns the directory this index resides in. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source FieldsReader Expert: retrieve thread-private StoredFieldsReader This is a Lucene.NET INTERNAL API, use at your own risk Declaration public StoredFieldsReader FieldsReader { get; } Property Value Type Description StoredFieldsReader | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs | Improve this Doc View Source SegmentInfo Return the SegmentCommitInfo of the segment this reader is reading. Declaration public SegmentCommitInfo SegmentInfo { get; } Property Value Type Description SegmentCommitInfo | Improve this Doc View Source SegmentName Return the name of the segment this reader is reading. Declaration public string SegmentName { get; } Property Value Type Description System.String | Improve this Doc View Source TermInfosIndexDivisor Returns term infos index divisor originally passed to SegmentReader(SegmentCommitInfo, Int32, IOContext) . Declaration public int TermInfosIndexDivisor { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermVectorsReader Expert: retrieve thread-private TermVectorsReader This is a Lucene.NET INTERNAL API, use at your own risk Declaration public TermVectorsReader TermVectorsReader { get; } Property Value Type Description TermVectorsReader Methods | Improve this Doc View Source AddCoreDisposedListener(SegmentReader.ICoreDisposedListener) Expert: adds a SegmentReader.ICoreDisposedListener to this reader's shared core Declaration public void AddCoreDisposedListener(SegmentReader.ICoreDisposedListener listener) Parameters Type Name Description SegmentReader.ICoreDisposedListener listener | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM Bytes used Declaration public long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source RemoveCoreDisposedListener(SegmentReader.ICoreDisposedListener) Expert: removes a SegmentReader.ICoreDisposedListener from this reader's shared core Declaration public void RemoveCoreDisposedListener(SegmentReader.ICoreDisposedListener listener) Parameters Type Name Description SegmentReader.ICoreDisposedListener listener | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SerialMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SerialMergeScheduler.html",
    "title": "Class SerialMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SerialMergeScheduler A MergeScheduler that simply does each merge sequentially, using the current thread. Inheritance System.Object MergeScheduler SerialMergeScheduler Implements IMergeScheduler System.IDisposable Inherited Members MergeScheduler.Dispose() MergeScheduler.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SerialMergeScheduler : MergeScheduler, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source SerialMergeScheduler() Sole constructor. Declaration public SerialMergeScheduler() Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Just do the merges in sequence. We do this \"synchronized\" so that even if the application is using multiple threads, only one merge may run at a time. Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) Implements IMergeScheduler System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Misc.SweetSpotSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Misc.SweetSpotSimilarity.html",
    "title": "Class SweetSpotSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SweetSpotSimilarity A similarity with a lengthNorm that provides for a \"plateau\" of equally good lengths, and tf helper functions. For lengthNorm, A min/max can be specified to define the plateau of lengths that should all have a norm of 1.0. Below the min, and above the max the lengthNorm drops off in a sqrt function. For tf, baselineTf and hyperbolicTf functions are provided, which subclasses can choose between. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity SweetSpotSimilarity Inherited Members DefaultSimilarity.Coord(Int32, Int32) DefaultSimilarity.QueryNorm(Single) DefaultSimilarity.EncodeNormValue(Single) DefaultSimilarity.DecodeNormValue(Int64) DefaultSimilarity.SloppyFreq(Int32) DefaultSimilarity.ScorePayload(Int32, Int32, Int32, BytesRef) DefaultSimilarity.Idf(Int64, Int64) DefaultSimilarity.m_discountOverlaps DefaultSimilarity.DiscountOverlaps DefaultSimilarity.ToString() TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics) TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics[]) TFIDFSimilarity.ComputeNorm(FieldInvertState) TFIDFSimilarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) TFIDFSimilarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class SweetSpotSimilarity : DefaultSimilarity Constructors | Improve this Doc View Source SweetSpotSimilarity() Declaration public SweetSpotSimilarity() Methods | Improve this Doc View Source BaselineTf(Single) Implemented as: (x <= min) ? base : Math.Sqrt(x+(base**2)-min) ...but with a special case check for 0. This degrates to Math.Sqrt(x) when min and base are both 0 Declaration public virtual float BaselineTf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single See Also SetBaselineTfFactors(Single, Single) | Improve this Doc View Source ComputeLengthNorm(Int32) Implemented as: 1/sqrt( steepness * (Math.Abs(x-min) + Math.Abs(x-max) - (max-min)) + 1 ) . This degrades to 1/Math.Sqrt(x) when min and max are both 1 and steepness is 0.5 :TODO: potential optimization is to just flat out return 1.0f if numTerms is between min and max. Declaration public virtual float ComputeLengthNorm(int numTerms) Parameters Type Name Description System.Int32 numTerms Returns Type Description System.Single See Also SetLengthNormFactors(Int32, Int32, Single, Boolean) | Improve this Doc View Source HyperbolicTf(Single) Uses a hyperbolic tangent function that allows for a hard max... tf(x)=min+(max-min)/2*(((base**(x-xoffset)-base**-(x-xoffset))/(base**(x-xoffset)+base**-(x-xoffset)))+1) This code is provided as a convenience for subclasses that want to use a hyperbolic tf function. Declaration public virtual float HyperbolicTf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single See Also SetHyperbolicTfFactors(Single, Single, Double, Single) | Improve this Doc View Source LengthNorm(FieldInvertState) Implemented as state.Boost * ComputeLengthNorm(numTokens) where numTokens does not count overlap tokens if discountOverlaps is true by default or true for this specific field. Declaration public override float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Single Overrides DefaultSimilarity.LengthNorm(FieldInvertState) | Improve this Doc View Source SetBaselineTfFactors(Single, Single) Sets the baseline and minimum function variables for baselineTf Declaration public virtual void SetBaselineTfFactors(float base, float min) Parameters Type Name Description System.Single base System.Single min See Also BaselineTf(Single) | Improve this Doc View Source SetHyperbolicTfFactors(Single, Single, Double, Single) Sets the function variables for the hyperbolicTf functions Declaration public virtual void SetHyperbolicTfFactors(float min, float max, double base, float xoffset) Parameters Type Name Description System.Single min the minimum tf value to ever be returned (default: 0.0) System.Single max the maximum tf value to ever be returned (default: 2.0) System.Double base the base value to be used in the exponential for the hyperbolic function (default: 1.3) System.Single xoffset the midpoint of the hyperbolic function (default: 10.0) See Also HyperbolicTf(Single) | Improve this Doc View Source SetLengthNormFactors(Int32, Int32, Single, Boolean) Sets the default function variables used by lengthNorm when no field specific variables have been set. Declaration public virtual void SetLengthNormFactors(int min, int max, float steepness, bool discountOverlaps) Parameters Type Name Description System.Int32 min System.Int32 max System.Single steepness System.Boolean discountOverlaps See Also ComputeLengthNorm(Int32) | Improve this Doc View Source Tf(Single) Delegates to baselineTf Declaration public override float Tf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single Overrides DefaultSimilarity.Tf(Single) See Also BaselineTf(Single) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ComplexExplanation.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ComplexExplanation.html",
    "title": "Class ComplexExplanation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ComplexExplanation Expert: Describes the score computation for document and query, and can distinguish a match independent of a positive value. Inheritance System.Object Explanation ComplexExplanation Inherited Members Explanation.Value Explanation.Description Explanation.GetDetails() Explanation.AddDetail(Explanation) Explanation.ToString() Explanation.ToString(Int32) Explanation.ToHtml() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ComplexExplanation : Explanation Constructors | Improve this Doc View Source ComplexExplanation() Declaration public ComplexExplanation() | Improve this Doc View Source ComplexExplanation(Boolean, Single, String) Declaration public ComplexExplanation(bool match, float value, string description) Parameters Type Name Description System.Boolean match System.Single value System.String description Properties | Improve this Doc View Source IsMatch Indicates whether or not this Explanation models a good match. If the match status is explicitly set (i.e.: not null) this method uses it; otherwise it defers to the superclass. Declaration public override bool IsMatch { get; } Property Value Type Description System.Boolean Overrides Explanation.IsMatch See Also Match | Improve this Doc View Source Match Gets or Sets the match status assigned to this explanation node. May be null if match status is unknown. Declaration public virtual bool? Match { get; set; } Property Value Type Description System.Nullable < System.Boolean > Methods | Improve this Doc View Source GetSummary() Declaration protected override string GetSummary() Returns Type Description System.String Overrides Explanation.GetSummary() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreAutoRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreAutoRewrite.html",
    "title": "Class ConstantScoreAutoRewrite | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreAutoRewrite A rewrite method that tries to pick the best constant-score rewrite method based on term and document counts from the query. If both the number of terms and documents is small enough, then CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE is used. Otherwise, CONSTANT_SCORE_FILTER_REWRITE is used. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > ConstantScoreAutoRewrite Inherited Members TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ConstantScoreAutoRewrite : TermCollectingRewrite<BooleanQuery> Fields | Improve this Doc View Source DEFAULT_DOC_COUNT_PERCENT If the query will hit more than 1 in 1000 of the docs in the index (0.1%), the filter method is fastest: Declaration public static double DEFAULT_DOC_COUNT_PERCENT Field Value Type Description System.Double | Improve this Doc View Source DEFAULT_TERM_COUNT_CUTOFF Defaults derived from rough tests with a 20.0 million doc Wikipedia index. With more than 350 terms in the query, the filter method is fastest: Declaration public static int DEFAULT_TERM_COUNT_CUTOFF Field Value Type Description System.Int32 Properties | Improve this Doc View Source DocCountPercent If the number of documents to be visited in the postings exceeds this specified percentage of the MaxDoc for the index, then CONSTANT_SCORE_FILTER_REWRITE is used. Value may be 0.0 to 100.0. Declaration public virtual double DocCountPercent { get; set; } Property Value Type Description System.Double | Improve this Doc View Source TermCountCutoff If the number of terms in this query is equal to or larger than this setting then CONSTANT_SCORE_FILTER_REWRITE is used. Declaration public virtual int TermCountCutoff { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docFreq, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docFreq System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantBulkScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantBulkScorer.html",
    "title": "Class ConstantScoreQuery.ConstantBulkScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantBulkScorer We return this as our BulkScorer so that if the CSQ wraps a query with its own optimized top-level scorer (e.g. Lucene.Net.Search.BooleanScorer ) we can use that top-level scorer. Inheritance System.Object BulkScorer ConstantScoreQuery.ConstantBulkScorer Inherited Members BulkScorer.Score(ICollector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class ConstantBulkScorer : BulkScorer Constructors | Improve this Doc View Source ConstantBulkScorer(ConstantScoreQuery, BulkScorer, Weight, Single) Declaration public ConstantBulkScorer(ConstantScoreQuery outerInstance, BulkScorer bulkScorer, Weight weight, float theScore) Parameters Type Name Description ConstantScoreQuery outerInstance BulkScorer bulkScorer Weight weight System.Single theScore Methods | Improve this Doc View Source Score(ICollector, Int32) Declaration public override bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector System.Int32 max Returns Type Description System.Boolean Overrides BulkScorer.Score(ICollector, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRewriteMethod.html",
    "title": "Class FieldCacheRewriteMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheRewriteMethod Rewrites MultiTermQuery s into a filter, using the IFieldCache for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiTermQuery.RewriteMethod FieldCacheRewriteMethod Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class FieldCacheRewriteMethod : MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheTermsFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheTermsFilter.html",
    "title": "Class FieldCacheTermsFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheTermsFilter A Filter that only accepts documents whose single term value in the specified field is contained in the provided set of allowed terms. This is the same functionality as TermsFilter (from queries/), except this filter requires that the field contains only a single term for all documents. Because of drastically different implementations, they also have different performance characteristics, as described below. The first invocation of this filter on a given field will be slower, since a SortedDocValues must be created. Subsequent invocations using the same field will re-use this cache. However, as with all functionality based on IFieldCache , persistent RAM is consumed to hold the cache, and is not freed until the IndexReader is disposed. In contrast, TermsFilter has no persistent RAM consumption. With each search, this filter translates the specified set of Terms into a private FixedBitSet keyed by term number per unique IndexReader (normally one reader per segment). Then, during matching, the term number for each docID is retrieved from the cache and then checked for inclusion using the FixedBitSet . Since all testing is done using RAM resident data structures, performance should be very fast, most likely fast enough to not require further caching of the DocIdSet for each possible combination of terms. However, because docIDs are simply scanned linearly, an index with a great many small documents may find this linear scan too costly. In contrast, TermsFilter builds up a FixedBitSet , keyed by docID, every time it's created, by enumerating through all matching docs using DocsEnum to seek and scan through each term's docID list. While there is no linear scan of all docIDs, besides the allocation of the underlying array in the FixedBitSet , this approach requires a number of \"disk seeks\" in proportion to the number of terms, which can be exceptionally costly when there are cache misses in the OS's IO cache. Generally, this filter will be slower on the first invocation for a given field, but subsequent invocations, even if you change the allowed set of Terms , should be faster than TermsFilter, especially as the number of Terms being matched increases. If you are matching only a very small number of terms, and those terms in turn match a very small number of documents, TermsFilter may perform faster. Which filter is best is very application dependent. Inheritance System.Object Filter FieldCacheTermsFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FieldCacheTermsFilter : Filter Constructors | Improve this Doc View Source FieldCacheTermsFilter(String, BytesRef[]) Declaration public FieldCacheTermsFilter(string field, params BytesRef[] terms) Parameters Type Name Description System.String field BytesRef [] terms | Improve this Doc View Source FieldCacheTermsFilter(String, String[]) Declaration public FieldCacheTermsFilter(string field, params string[] terms) Parameters Type Name Description System.String field System.String [] terms Properties | Improve this Doc View Source FieldCache Declaration public virtual IFieldCache FieldCache { get; } Property Value Type Description IFieldCache Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer-1.html",
    "title": "Class FieldComparer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer<T> Expert: a FieldComparer compares hits so as to determine their sort order when collecting the top results with TopFieldCollector . The concrete public FieldComparer classes here correspond to the SortField types. This API is designed to achieve high performance sorting, by exposing a tight interaction with FieldValueHitQueue as it visits hits. Whenever a hit is competitive, it's enrolled into a virtual slot, which is an System.Int32 ranging from 0 to numHits-1. The FieldComparer is made aware of segment transitions during searching in case any internal state it's tracking needs to be recomputed during these transitions. A comparer must define these functions: Compare(Int32, Int32) Compare a hit at 'slot a' with hit 'slot b'. SetBottom(Int32) This method is called by FieldValueHitQueue to notify the FieldComparer of the current weakest (\"bottom\") slot. Note that this slot may not hold the weakest value according to your comparer, in cases where your comparer is not the primary one (ie, is only used to break ties from the comparers before it). CompareBottom(Int32) Compare a new hit (docID) against the \"weakest\" (bottom) entry in the queue. SetTopValue(Object) This method is called by TopFieldCollector to notify the FieldComparer of the top most value, which is used by future calls to CompareTop(Int32) . CompareTop(Int32) Compare a new hit (docID) against the top value previously set by a call to SetTopValue(Object) . Copy(Int32, Int32) Installs a new hit into the priority queue. The FieldValueHitQueue calls this method when a new hit is competitive. SetNextReader(AtomicReaderContext) Invoked when the search is switching to the next segment. You may need to update internal state of the comparer, for example retrieving new values from the IFieldCache . Item[Int32] Return the sort value stored in the specified slot. This is only called at the end of the search, in order to populate Fields when returning the top results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparer FieldComparer<T> FieldComparer.DocComparer FieldComparer.NumericComparer<T> FieldComparer.RelevanceComparer FieldComparer.TermOrdValComparer FieldComparer.TermValComparer Inherited Members FieldComparer.SetScorer(Scorer) FieldComparer.Item[Int32] System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparer<T> : FieldComparer Type Parameters Name Description T Methods | Improve this Doc View Source Compare(Int32, Int32) Compare hit at slot1 with hit at slot2 . Declaration public abstract override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 first slot to compare System.Int32 slot2 second slot to compare Returns Type Description System.Int32 any N < 0 if slot2 's value is sorted after slot1 , any N > 0 if the slot2 's value is sorted before slot1 and 0 if they are equal Overrides FieldComparer.Compare(Int32, Int32) | Improve this Doc View Source CompareBottom(Int32) Compare the bottom of the queue with this doc. This will only invoked after SetBottom(Int32) has been called. This should return the same result as Compare(Int32, Int32) as if bottom were slot1 and the new document were slot 2. For a search that hits many results, this method will be the hotspot (invoked by far the most frequently). Declaration public abstract override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. Overrides FieldComparer.CompareBottom(Int32) | Improve this Doc View Source CompareTop(Int32) Compare the top value with this doc. This will only invoked after SetTopValue(Object) has been called. This should return the same result as Compare(Int32, Int32) as if topValue were slot1 and the new document were slot 2. This is only called for searches that use SearchAfter (deep paging). Declaration public abstract override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. Overrides FieldComparer.CompareTop(Int32) | Improve this Doc View Source CompareValues(T, T) Returns -1 if first is less than second. Default impl to assume the type implements System.IComparable<T> and invoke System.IComparable<T>.CompareTo(T) ; be sure to override this method if your FieldComparer's type isn't a System.IComparable<T> or if your values may sometimes be null Declaration public virtual int CompareValues(T first, T second) Parameters Type Name Description T first T second Returns Type Description System.Int32 | Improve this Doc View Source CompareValues(Object, Object) Returns -1 if first is less than second. Default impl to assume the type implements System.IComparable<T> and invoke System.IComparable<T>.CompareTo(T) ; be sure to override this method if your FieldComparer's type isn't a System.IComparable<T> or if your values may sometimes be null Declaration public override int CompareValues(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Int32 Overrides FieldComparer.CompareValues(Object, Object) | Improve this Doc View Source Copy(Int32, Int32) This method is called when a new hit is competitive. You should copy any state associated with this document that will be required for future comparisons, into the specified slot. Declaration public abstract override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot Which slot to copy the hit to System.Int32 doc DocID relative to current reader Overrides FieldComparer.Copy(Int32, Int32) | Improve this Doc View Source SetBottom(Int32) Set the bottom slot, ie the \"weakest\" (sorted last) entry in the queue. When CompareBottom(Int32) is called, you should compare against this slot. This will always be called before CompareBottom(Int32) . Declaration public abstract override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot the currently weakest (sorted last) slot in the queue Overrides FieldComparer.SetBottom(Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Set a new AtomicReaderContext . All subsequent docIDs are relative to the current reader (you must add docBase if you need to map it to a top-level docID). Declaration public abstract override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Current reader context Returns Type Description FieldComparer The comparer to use for this segment; most comparers can just return \"this\" to reuse the same comparer across segments Overrides FieldComparer.SetNextReader(AtomicReaderContext) Exceptions Type Condition System.IO.IOException If there is a low-level IO error | Improve this Doc View Source SetTopValue(Object) Record the top value, for future calls to CompareTop(Int32) . This is only called for searches that use SearchAfter (deep paging), and is called before any calls to SetNextReader(AtomicReaderContext) . Declaration public abstract override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides FieldComparer.SetTopValue(Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.ByteComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.ByteComparer.html",
    "title": "Class FieldComparer.ByteComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.ByteComparer Parses field's values as System.Byte (using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) and sorts by ascending value Inheritance System.Object FieldComparer FieldComparer < System.SByte > FieldComparer.NumericComparer < System.SByte > FieldComparer.ByteComparer Inherited Members FieldComparer.NumericComparer<SByte>.m_missingValue FieldComparer.NumericComparer<SByte>.m_field FieldComparer.NumericComparer<SByte>.m_docsWithField FieldComparer<SByte>.CompareValues(SByte, SByte) FieldComparer<SByte>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Obsolete] [CLSCompliant(false)] public sealed class ByteComparer : FieldComparer.NumericComparer<sbyte> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.SByte>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.SByte>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.SByte>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.SByte>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.SByte>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DocComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DocComparer.html",
    "title": "Class FieldComparer.DocComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.DocComparer Sorts by ascending docID Inheritance System.Object FieldComparer FieldComparer < System.Nullable < System.Int32 >> FieldComparer.DocComparer Inherited Members FieldComparer<Nullable<Int32>>.CompareValues(Nullable<Int32>, Nullable<Int32>) FieldComparer<Nullable<Int32>>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class DocComparer : FieldComparer<int?> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Nullable<System.Int32>>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DoubleComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.DoubleComparer.html",
    "title": "Class FieldComparer.DoubleComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.DoubleComparer Parses field's values as System.Double (using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and sorts by ascending value Inheritance System.Object FieldComparer FieldComparer < System.Double > FieldComparer.NumericComparer < System.Double > FieldComparer.DoubleComparer Inherited Members FieldComparer.NumericComparer<Double>.m_missingValue FieldComparer.NumericComparer<Double>.m_field FieldComparer.NumericComparer<Double>.m_docsWithField FieldComparer<Double>.CompareValues(Double, Double) FieldComparer<Double>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class DoubleComparer : FieldComparer.NumericComparer<double> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Double>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Double>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Double>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Double>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Double>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int16Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int16Comparer.html",
    "title": "Class FieldComparer.Int16Comparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.Int16Comparer Parses field's values as System.Int16 (using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and sorts by ascending value NOTE: This was ShortComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int16 > FieldComparer.NumericComparer < System.Int16 > FieldComparer.Int16Comparer Inherited Members FieldComparer.NumericComparer<Int16>.m_missingValue FieldComparer.NumericComparer<Int16>.m_field FieldComparer.NumericComparer<Int16>.m_docsWithField FieldComparer<Int16>.CompareValues(Int16, Int16) FieldComparer<Int16>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax [Obsolete] public sealed class Int16Comparer : FieldComparer.NumericComparer<short> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int16>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int16>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int16>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int16>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int16>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int32Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int32Comparer.html",
    "title": "Class FieldComparer.Int32Comparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.Int32Comparer Parses field's values as System.Int32 (using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and sorts by ascending value NOTE: This was IntComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int32 > FieldComparer.NumericComparer < System.Int32 > FieldComparer.Int32Comparer Inherited Members FieldComparer.NumericComparer<Int32>.m_missingValue FieldComparer.NumericComparer<Int32>.m_field FieldComparer.NumericComparer<Int32>.m_docsWithField FieldComparer<Int32>.CompareValues(Int32, Int32) FieldComparer<Int32>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class Int32Comparer : FieldComparer.NumericComparer<int> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int32>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int32>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int32>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int32>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int32>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceContext-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceContext-1.html",
    "title": "Class ReferenceContext<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReferenceContext<T> ReferenceContext<T> holds a reference instance and ensures it is properly de-referenced from its corresponding ReferenceManager<G> when Dispose() is called. This class is primarily intended to be used with a using block. LUCENENET specific Inheritance System.Object ReferenceContext<T> Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class ReferenceContext<T> : IDisposable where T : class Type Parameters Name Description T The reference type Properties | Improve this Doc View Source Reference The reference acquired from the ReferenceManager<G> . Declaration public T Reference { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Ensures the reference is properly de-referenced from its ReferenceManager<G> . After this call, Reference will be null . Declaration public void Dispose() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager-1.html",
    "title": "Class ReferenceManager<G> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReferenceManager<G> Utility class to safely share instances of a certain type across multiple threads, while periodically refreshing them. This class ensures each reference is closed only once all threads have finished using it. It is recommended to consult the documentation of ReferenceManager<G> implementations for their MaybeRefresh() semantics. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager<G> ReaderManager SearcherManager Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class ReferenceManager<G> : IDisposable where G : class Type Parameters Name Description G The concrete type that will be Acquire() d and Release(G) d. Properties | Improve this Doc View Source Current The current reference Declaration protected G Current { get; set; } Property Value Type Description G Methods | Improve this Doc View Source Acquire() Obtain the current reference. You must match every call to acquire with one call to Release(G) ; it's best to do so in a finally clause, and set the reference to null to prevent accidental usage after it has been released. Declaration public G Acquire() Returns Type Description G Exceptions Type Condition System.ObjectDisposedException If the reference manager has been Dispose() d. | Improve this Doc View Source AddListener(ReferenceManager.IRefreshListener) Adds a listener, to be notified when a reference is refreshed/swapped. Declaration public virtual void AddListener(ReferenceManager.IRefreshListener listener) Parameters Type Name Description ReferenceManager.IRefreshListener listener | Improve this Doc View Source AfterMaybeRefresh() Called after a refresh was attempted, regardless of whether a new reference was in fact created. Declaration protected virtual void AfterMaybeRefresh() Exceptions Type Condition System.IO.IOException if a low level I/O exception occurs | Improve this Doc View Source DecRef(G) Decrement reference counting on the given reference. Declaration protected abstract void DecRef(G reference) Parameters Type Name Description G reference Exceptions Type Condition System.IO.IOException If reference decrement on the given resource failed. | Improve this Doc View Source Dispose() Closes this ReferenceManager to prevent future Acquire() ing. A reference manager should be disposed if the reference to the managed resource should be disposed or the application using the ReferenceManager<G> is shutting down. The managed resource might not be released immediately, if the ReferenceManager<G> user is holding on to a previously Acquire() d reference. The resource will be released once when the last reference is Release(G) d. Those references can still be used as if the manager was still active. Applications should not Acquire() new references from this manager once this method has been called. Acquire() ing a resource on a disposed ReferenceManager<G> will throw an System.ObjectDisposedException . Declaration public void Dispose() Exceptions Type Condition System.IO.IOException If the underlying reader of the current reference could not be disposed | Improve this Doc View Source Dispose(Boolean) Called after Dispose() , so subclass can free any resources. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Exceptions Type Condition System.IO.IOException if the after dispose operation in a sub-class throws an System.IO.IOException | Improve this Doc View Source GetRefCount(G) Returns the current reference count of the given reference. Declaration protected abstract int GetRefCount(G reference) Parameters Type Name Description G reference Returns Type Description System.Int32 | Improve this Doc View Source MaybeRefresh() You must call this (or MaybeRefreshBlocking() ), periodically, if you want that Acquire() will return refreshed instances. Threads : it's fine for more than one thread to call this at once. Only the first thread will attempt the refresh; subsequent threads will see that another thread is already handling refresh and will return immediately. Note that this means if another thread is already refreshing then subsequent threads will return right away without waiting for the refresh to complete. If this method returns true it means the calling thread either refreshed or that there were no changes to refresh. If it returns false it means another thread is currently refreshing. Declaration public bool MaybeRefresh() Returns Type Description System.Boolean Exceptions Type Condition System.IO.IOException If refreshing the resource causes an System.IO.IOException System.ObjectDisposedException If the reference manager has been Dispose() d. | Improve this Doc View Source MaybeRefreshBlocking() You must call this (or MaybeRefresh() ), periodically, if you want that Acquire() will return refreshed instances. Threads : unlike MaybeRefresh() , if another thread is currently refreshing, this method blocks until that thread completes. It is useful if you want to guarantee that the next call to Acquire() will return a refreshed instance. Otherwise, consider using the non-blocking MaybeRefresh() . Declaration public void MaybeRefreshBlocking() Exceptions Type Condition System.IO.IOException If refreshing the resource causes an System.IO.IOException System.ObjectDisposedException If the reference manager has been Dispose() d. | Improve this Doc View Source RefreshIfNeeded(G) Refresh the given reference if needed. Returns null if no refresh was needed, otherwise a new refreshed reference. Declaration protected abstract G RefreshIfNeeded(G referenceToRefresh) Parameters Type Name Description G referenceToRefresh Returns Type Description G Exceptions Type Condition System.ObjectDisposedException If the reference manager has been Dispose() d. System.IO.IOException If the refresh operation failed | Improve this Doc View Source Release(G) Release the reference previously obtained via Acquire() . NOTE: it's safe to call this after Dispose() . Declaration public void Release(G reference) Parameters Type Name Description G reference Exceptions Type Condition System.IO.IOException If the release operation on the given resource throws an System.IO.IOException | Improve this Doc View Source RemoveListener(ReferenceManager.IRefreshListener) Remove a listener added with AddListener(ReferenceManager.IRefreshListener) . Declaration public virtual void RemoveListener(ReferenceManager.IRefreshListener listener) Parameters Type Name Description ReferenceManager.IRefreshListener listener | Improve this Doc View Source TryIncRef(G) Try to increment reference counting on the given reference. Returns true if the operation was successful. Declaration protected abstract bool TryIncRef(G reference) Parameters Type Name Description G reference Returns Type Description System.Boolean Exceptions Type Condition System.ObjectDisposedException if the reference manager has been Dispose() d. Implements System.IDisposable Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManagerExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManagerExtensions.html",
    "title": "Class ReferenceManagerExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReferenceManagerExtensions Inheritance System.Object ReferenceManagerExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class ReferenceManagerExtensions Methods | Improve this Doc View Source GetContext<T>(ReferenceManager<T>) Obtain the current reference. Like Acquire() , but intended for use in a using block so calling Release(G) happens implicitly. For example: var searcherManager = new SearcherManager(indexWriter, true, null); using (var context = searcherManager.GetContext()) { IndexSearcher searcher = context.Reference; // use searcher... } Declaration public static ReferenceContext<T> GetContext<T>(this ReferenceManager<T> referenceManager) where T : class Parameters Type Name Description ReferenceManager <T> referenceManager this ReferenceManager<G> Returns Type Description ReferenceContext <T> A ReferenceContext<T> instance that holds the Reference and ensures it is released properly when Dispose() is called. Type Parameters Name Description T The reference type"
  },
  "api/Lucene.Net/Lucene.Net.Search.RegexpQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.RegexpQuery.html",
    "title": "Class RegexpQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpQuery A fast regular expression query based on the Lucene.Net.Util.Automaton package. Comparisons are fast The term dictionary is enumerated in an intelligent way, to avoid comparisons. See AutomatonQuery for more details. The supported syntax is documented in the RegExp class. Note this might be different than other regular expression implementations. For some alternatives with different syntax, look under the sandbox. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow RegexpQuery s, a RegExp term should not start with the expression .* This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query MultiTermQuery AutomatonQuery RegexpQuery Inherited Members AutomatonQuery.m_automaton AutomatonQuery.m_compiled AutomatonQuery.m_term AutomatonQuery.GetTermsEnum(Terms, AttributeSource) AutomatonQuery.GetHashCode() AutomatonQuery.Equals(Object) AutomatonQuery.Automaton MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class RegexpQuery : AutomatonQuery Constructors | Improve this Doc View Source RegexpQuery(Term) Constructs a query for terms matching term . By default, all regular expression features are enabled. Declaration public RegexpQuery(Term term) Parameters Type Name Description Term term Regular expression. | Improve this Doc View Source RegexpQuery(Term, RegExpSyntax) Constructs a query for terms matching term . Declaration public RegexpQuery(Term term, RegExpSyntax flags) Parameters Type Name Description Term term Regular expression. RegExpSyntax flags Optional RegExp features from RegExpSyntax | Improve this Doc View Source RegexpQuery(Term, RegExpSyntax, IAutomatonProvider) Constructs a query for terms matching term . Declaration public RegexpQuery(Term term, RegExpSyntax flags, IAutomatonProvider provider) Parameters Type Name Description Term term Regular expression. RegExpSyntax flags Optional RegExp features from RegExpSyntax IAutomatonProvider provider Custom IAutomatonProvider for named automata Methods | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides AutomatonQuery.ToString(String) Extension Methods Number.IsNumber(Object) See Also RegExp"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AndQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AndQueryNode.html",
    "title": "Class AndQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AndQueryNode A AndQueryNode represents an AND boolean operation performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode AnyQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AndQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source AndQueryNode(IList<IQueryNode>) Declaration public AndQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses the query nodes to be and'ed Methods | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AnyQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.AnyQueryNode.html",
    "title": "Class AnyQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnyQueryNode A AnyQueryNode represents an ANY operator performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode AnyQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AnyQueryNode : AndQueryNode, IQueryNode Constructors | Improve this Doc View Source AnyQueryNode(IList<IQueryNode>, String, Int32) Declaration public AnyQueryNode(IList<IQueryNode> clauses, string field, int minimumMatchingElements) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses the query nodes to be or'ed System.String field System.Int32 minimumMatchingElements Properties | Improve this Doc View Source Field Gets or sets the field name. Returns null if the field was not specified. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source MinimumMatchingElements Declaration public virtual int MinimumMatchingElements { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides BooleanQueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() null if the field was not specified Declaration public virtual string GetFieldAsString() Returns Type Description System.String the field as a System.String | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides AndQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AndQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BooleanQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BooleanQueryNode.html",
    "title": "Class BooleanQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQueryNode A BooleanQueryNode represents a list of elements which do not have an explicit boolean operator defined between them. It can be used to express a boolean query that intends to use the default boolean operator. Inheritance System.Object QueryNode BooleanQueryNode AndQueryNode OrQueryNode ProximityQueryNode StandardBooleanQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source BooleanQueryNode(IList<IQueryNode>) Declaration public BooleanQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses the query nodes to be and'ed Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BoostQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.BoostQueryNode.html",
    "title": "Class BoostQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostQueryNode A BoostQueryNode boosts the QueryNode tree which is under this node. So, it must only and always have one child. The boost value may vary from 0.0 to 1.0. Inheritance System.Object QueryNode BoostQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source BoostQueryNode(IQueryNode, Single) Constructs a boost node Declaration public BoostQueryNode(IQueryNode query, float value) Parameters Type Name Description IQueryNode query the query to be boosted System.Single value the boost value, it may vary from 0.0 to 1.0 Properties | Improve this Doc View Source Child Gets the single child which this node boosts. Declaration public virtual IQueryNode Child { get; } Property Value Type Description IQueryNode | Improve this Doc View Source Value Gets the boost value. It may vary from 0.0 to 1.0. Declaration public virtual float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.DeletedQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.DeletedQueryNode.html",
    "title": "Class DeletedQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DeletedQueryNode A DeletedQueryNode represents a node that was deleted from the query node tree. It can be removed from the tree using the RemoveDeletedQueryNodesProcessor processor. Inheritance System.Object QueryNode DeletedQueryNode MatchNoDocsQueryNode NoTokenFoundQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class DeletedQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source DeletedQueryNode() Declaration public DeletedQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FieldQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FieldQueryNode.html",
    "title": "Class FieldQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldQueryNode A FieldQueryNode represents a element that contains field/text tuple Inheritance System.Object QueryNode FieldQueryNode FuzzyQueryNode QuotedFieldQueryNode WildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldQueryNode : QueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source FieldQueryNode(String, ICharSequence, Int32, Int32) Declaration public FieldQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FieldQueryNode(String, String, Int32, Int32) Declaration public FieldQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FieldQueryNode(String, StringBuilder, Int32, Int32) Declaration public FieldQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value System.Int32 begin position in the query string System.Int32 end position in the query string Fields | Improve this Doc View Source m_begin The term's begin position. Declaration protected int m_begin Field Value Type Description System.Int32 | Improve this Doc View Source m_end The term's end position. Declaration protected int m_end Field Value Type Description System.Int32 | Improve this Doc View Source m_field The term's field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source m_positionIncrement The term's position increment. Declaration protected int m_positionIncrement Field Value Type Description System.Int32 | Improve this Doc View Source m_text The term's text. Declaration protected ICharSequence m_text Field Value Type Description ICharSequence Properties | Improve this Doc View Source Begin Declaration public virtual int Begin { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source End Declaration public virtual int End { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source PositionIncrement Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Gets or Sets the \"original\" form of the term. Declaration public virtual ICharSequence Text { get; set; } Property Value Type Description ICharSequence | Improve this Doc View Source Value Declaration public virtual string Value { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() null if the field was not specified in the query string Declaration public virtual string GetFieldAsString() Returns Type Description System.String the field | Improve this Doc View Source GetTermEscaped(IEscapeQuerySyntax) Declaration protected virtual string GetTermEscaped(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String | Improve this Doc View Source GetTermEscapeQuoted(IEscapeQuerySyntax) Declaration protected virtual string GetTermEscapeQuoted(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String | Improve this Doc View Source GetTextAsString() Declaration public virtual string GetTextAsString() Returns Type Description System.String the term | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FuzzyQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.FuzzyQueryNode.html",
    "title": "Class FuzzyQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyQueryNode A FuzzyQueryNode represents a element that contains field/text/similarity tuple Inheritance System.Object QueryNode FieldQueryNode FuzzyQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source FuzzyQueryNode(String, ICharSequence, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, ICharSequence term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. ICharSequence term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FuzzyQueryNode(String, String, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, string term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. System.String term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source FuzzyQueryNode(String, StringBuilder, Single, Int32, Int32) Declaration public FuzzyQueryNode(string field, StringBuilder term, float minSimilarity, int begin, int end) Parameters Type Name Description System.String field Name of the field query will use. System.Text.StringBuilder term Term token to use for building term for the query System.Single minSimilarity similarity value System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source PrefixLength Declaration public virtual int PrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity Gets or Sets the similarity Declaration public virtual float Similarity { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.GroupQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.GroupQueryNode.html",
    "title": "Class GroupQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupQueryNode A GroupQueryNode represents a location where the original user typed real parenthesis on the query string. This class is useful for queries like: a) a AND b OR c b) ( a AND b) OR c Parenthesis might be used to define the boolean operation precedence. Inheritance System.Object QueryNode GroupQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class GroupQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source GroupQueryNode(IQueryNode) This IQueryNode is used to identify parenthesis on the original query string Declaration public GroupQueryNode(IQueryNode query) Parameters Type Name Description IQueryNode query Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source SetChild(IQueryNode) Declaration public virtual void SetChild(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldableNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldableNode.html",
    "title": "Interface IFieldableNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFieldableNode A query node implements IFieldableNode interface to indicate that its children and itself are associated to a specific field. If it has any children which also implements this interface, it must ensure the children are associated to the same field. Inherited Members IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldableNode : IQueryNode Properties | Improve this Doc View Source Field Gets or Sets the field name associated to the node and every node under it. Declaration string Field { get; set; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.NGramDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.NGramDistance.html",
    "title": "Class NGramDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramDistance N-Gram version of edit distance based on paper by Grzegorz Kondrak, \"N-gram similarity and distance\". Proceedings of the Twelfth International Conference on String Processing and Information Retrieval (SPIRE 2005), pp. 115-126, Buenos Aires, Argentina, November 2005. http://www.cs.ualberta.ca/~kondrak/papers/spire05.pdf This implementation uses the position-based optimization to compute partial matches of n-gram sub-strings and adds a null-character prefix of size n-1 so that the first character is contained in the same number of n-grams as a middle character. Null-character prefix matches are discounted so that strings with no matching characters will return a distance of 0. Inheritance System.Object NGramDistance Implements IStringDistance Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class NGramDistance : IStringDistance Constructors | Improve this Doc View Source NGramDistance() Creates an N-Gram distance measure using n-grams of size 2. Declaration public NGramDistance() | Improve this Doc View Source NGramDistance(Int32) Creates an N-Gram distance measure using n-grams of the specified size. Declaration public NGramDistance(int size) Parameters Type Name Description System.Int32 size The size of the n-gram to be used to compute the string distance. Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDistance(String, String) Declaration public virtual float GetDistance(string source, string target) Parameters Type Name Description System.String source System.String target Returns Type Description System.Single | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IStringDistance"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.PlainTextDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.PlainTextDictionary.html",
    "title": "Class PlainTextDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PlainTextDictionary Dictionary represented by a text file. Format allowed: 1 word per line: word1 word2 word3 Inheritance System.Object PlainTextDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class PlainTextDictionary : IDictionary Constructors | Improve this Doc View Source PlainTextDictionary(FileInfo) Creates a dictionary based on a File. NOTE: content is treated as UTF-8 Declaration public PlainTextDictionary(FileInfo file) Parameters Type Name Description System.IO.FileInfo file | Improve this Doc View Source PlainTextDictionary(Stream) Creates a dictionary based on an inputstream. NOTE: content is treated as UTF-8 Declaration public PlainTextDictionary(Stream dictFile) Parameters Type Name Description System.IO.Stream dictFile | Improve this Doc View Source PlainTextDictionary(TextReader) Creates a dictionary based on a reader. Declaration public PlainTextDictionary(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SpellChecker.html",
    "title": "Class SpellChecker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpellChecker Spell Checker class (Main class) (initially inspired by the David Spencer code). Example Usage (C#): SpellChecker spellchecker = new SpellChecker(spellIndexDirectory); // To index a field of a user index: spellchecker.IndexDictionary(new LuceneDictionary(my_lucene_reader, a_field)); // To index a file containing words: spellchecker.IndexDictionary(new PlainTextDictionary(new FileInfo(\"myfile.txt\"))); string[] suggestions = spellchecker.SuggestSimilar(\"misspelt\", 5); Inheritance System.Object SpellChecker Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SpellChecker : IDisposable Constructors | Improve this Doc View Source SpellChecker(Directory) Use the given directory as a spell checker index with a LevensteinDistance as the default StringDistance . The directory is created if it doesn't exist yet. Declaration public SpellChecker(Directory spellIndex) Parameters Type Name Description Directory spellIndex the spell index directory Exceptions Type Condition System.IO.IOException if spellchecker can not open the directory | Improve this Doc View Source SpellChecker(Directory, IStringDistance) Use the given directory as a spell checker index. The directory is created if it doesn't exist yet. Declaration public SpellChecker(Directory spellIndex, IStringDistance sd) Parameters Type Name Description Directory spellIndex the spell index directory IStringDistance sd the StringDistance measurement to use Exceptions Type Condition System.IO.IOException if Spellchecker can not open the directory | Improve this Doc View Source SpellChecker(Directory, IStringDistance, IComparer<SuggestWord>) Use the given directory as a spell checker index with the given IStringDistance measure and the given System.Collections.Generic.IComparer<T> for sorting the results. Declaration public SpellChecker(Directory spellIndex, IStringDistance sd, IComparer<SuggestWord> comparer) Parameters Type Name Description Directory spellIndex The spelling index IStringDistance sd The distance System.Collections.Generic.IComparer < SuggestWord > comparer The comparer Exceptions Type Condition System.IO.IOException if there is a problem opening the index Fields | Improve this Doc View Source DEFAULT_ACCURACY The default minimum score to use, if not specified by setting Accuracy or overriding with SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) . Declaration public const float DEFAULT_ACCURACY = 0.5F Field Value Type Description System.Single | Improve this Doc View Source F_WORD Field name for each word in the ngram index. Declaration public const string F_WORD = \"word\" Field Value Type Description System.String Properties | Improve this Doc View Source Accuracy Gets or sets the accuracy (minimum score) to be used, unless overridden in SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) , to decide whether a suggestion is included or not. Sets the accuracy 0 < minScore < 1; default DEFAULT_ACCURACY Declaration public virtual float Accuracy { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Comparer Gets or sets the System.Collections.Generic.IComparer<T> for the SuggestWordQueue . Declaration public virtual IComparer<SuggestWord> Comparer { get; set; } Property Value Type Description System.Collections.Generic.IComparer < SuggestWord > | Improve this Doc View Source StringDistance Gets or sets the IStringDistance implementation for this SpellChecker instance. Declaration public virtual IStringDistance StringDistance { get; set; } Property Value Type Description IStringDistance Methods | Improve this Doc View Source ClearIndex() Removes all terms from the spell check index. Declaration public virtual void ClearIndex() Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. System.ObjectDisposedException if the Spellchecker is already closed | Improve this Doc View Source Dispose() Dispose the underlying IndexSearcher used by this SpellChecker Declaration public void Dispose() Exceptions Type Condition System.IO.IOException if the close operation causes an System.IO.IOException System.ObjectDisposedException if the SpellChecker is already disposed | Improve this Doc View Source Exist(String) Check whether the word exists in the index. Declaration public virtual bool Exist(string word) Parameters Type Name Description System.String word word to check Returns Type Description System.Boolean true if the word exists in the index Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. System.ObjectDisposedException if the SpellChecker is already disposed | Improve this Doc View Source IndexDictionary(IDictionary, IndexWriterConfig, Boolean) Indexes the data from the given IDictionary . Declaration public void IndexDictionary(IDictionary dict, IndexWriterConfig config, bool fullMerge) Parameters Type Name Description IDictionary dict Dictionary to index IndexWriterConfig config IndexWriterConfig to use System.Boolean fullMerge whether or not the spellcheck index should be fully merged Exceptions Type Condition System.ObjectDisposedException if the SpellChecker is already disposed System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source SetSpellIndex(Directory) Sets a different index as the spell checker index or re-open the existing index if spellIndex is the same value as given in the constructor. Declaration public virtual void SetSpellIndex(Directory spellIndexDir) Parameters Type Name Description Directory spellIndexDir the spell directory to use Exceptions Type Condition System.ObjectDisposedException if the Spellchecker is already closed System.IO.IOException if spellchecker can not open the directory | Improve this Doc View Source SuggestSimilar(String, Int32) Suggest similar words. As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index Exceptions Type Condition System.IO.IOException if the underlying index throws an System.IO.IOException System.ObjectDisposedException if the Spellchecker is already disposed See Also SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) | Improve this Doc View Source SuggestSimilar(String, Int32, IndexReader, String, SuggestMode) Calls SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) SuggestSimilar(word, numSug, ir, suggestMode, field, this.accuracy) Declaration public virtual string[] SuggestSimilar(string word, int numSug, IndexReader ir, string field, SuggestMode suggestMode) Parameters Type Name Description System.String word System.Int32 numSug IndexReader ir System.String field SuggestMode suggestMode Returns Type Description System.String [] | Improve this Doc View Source SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) Suggest similar words (optionally restricted to a field of an index). As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug, IndexReader ir, string field, SuggestMode suggestMode, float accuracy) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words IndexReader ir the indexReader of the user index (can be null see field param) System.String field the field of the user index: if field is not null, the suggested words are restricted to the words present in this field. SuggestMode suggestMode (NOTE: if indexReader==null and/or field==null, then this is overridden with SuggestMode.SUGGEST_ALWAYS) System.Single accuracy The minimum score a suggestion must have in order to qualify for inclusion in the results Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index Exceptions Type Condition System.IO.IOException if the underlying index throws an System.IO.IOException System.ObjectDisposedException if the SpellChecker is already disposed | Improve this Doc View Source SuggestSimilar(String, Int32, Single) Suggest similar words. As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match. I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion. Declaration public virtual string[] SuggestSimilar(string word, int numSug, float accuracy) Parameters Type Name Description System.String word the word you want a spell check done on System.Int32 numSug the number of suggested words System.Single accuracy The minimum score a suggestion must have in order to qualify for inclusion in the results Returns Type Description System.String [] string[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index Exceptions Type Condition System.IO.IOException if the underlying index throws an System.IO.IOException System.ObjectDisposedException if the Spellchecker is already disposed See Also SuggestSimilar(String, Int32, IndexReader, String, SuggestMode, Single) Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordFrequencyComparer.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordFrequencyComparer.html",
    "title": "Class SuggestWordFrequencyComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestWordFrequencyComparer Frequency first, then score. Inheritance System.Object SuggestWordFrequencyComparer Implements System.Collections.Generic.IComparer < SuggestWord > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SuggestWordFrequencyComparer : IComparer<SuggestWord> Constructors | Improve this Doc View Source SuggestWordFrequencyComparer() Creates a new comparer that will compare by Freq , then by Score , then by String . Declaration public SuggestWordFrequencyComparer() Methods | Improve this Doc View Source Compare(SuggestWord, SuggestWord) Declaration public virtual int Compare(SuggestWord first, SuggestWord second) Parameters Type Name Description SuggestWord first SuggestWord second Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T>"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordQueue.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordQueue.html",
    "title": "Class SuggestWordQueue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestWordQueue Sorts SuggestWord instances Inheritance System.Object PriorityQueue < SuggestWord > SuggestWordQueue Inherited Members PriorityQueue<SuggestWord>.GetSentinelObject() PriorityQueue<SuggestWord>.Add(SuggestWord) PriorityQueue<SuggestWord>.InsertWithOverflow(SuggestWord) PriorityQueue<SuggestWord>.Top PriorityQueue<SuggestWord>.Pop() PriorityQueue<SuggestWord>.UpdateTop() PriorityQueue<SuggestWord>.Count PriorityQueue<SuggestWord>.Clear() PriorityQueue<SuggestWord>.HeapArray System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestWordQueue : PriorityQueue<SuggestWord> Constructors | Improve this Doc View Source SuggestWordQueue(Int32) Use the DEFAULT_COMPARER Declaration public SuggestWordQueue(int size) Parameters Type Name Description System.Int32 size The size of the queue | Improve this Doc View Source SuggestWordQueue(Int32, IComparer<SuggestWord>) Specify the size of the queue and the comparer to use for sorting. Declaration public SuggestWordQueue(int size, IComparer<SuggestWord> comparer) Parameters Type Name Description System.Int32 size The size System.Collections.Generic.IComparer < SuggestWord > comparer The comparer. Fields | Improve this Doc View Source DEFAULT_COMPARER Default comparer: score then frequency. Declaration public static readonly IComparer<SuggestWord> DEFAULT_COMPARER Field Value Type Description System.Collections.Generic.IComparer < SuggestWord > See Also SuggestWordScoreComparer Methods | Improve this Doc View Source LessThan(SuggestWord, SuggestWord) Declaration protected override bool LessThan(SuggestWord wa, SuggestWord wb) Parameters Type Name Description SuggestWord wa SuggestWord wb Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Search.Spell.SuggestWord>.LessThan(Lucene.Net.Search.Spell.SuggestWord, Lucene.Net.Search.Spell.SuggestWord) See Also SuggestWordScoreComparer SuggestWordFrequencyComparer"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordScoreComparer.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWordScoreComparer.html",
    "title": "Class SuggestWordScoreComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestWordScoreComparer Score first, then frequency Inheritance System.Object SuggestWordScoreComparer Implements System.Collections.Generic.IComparer < SuggestWord > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class SuggestWordScoreComparer : IComparer<SuggestWord> Constructors | Improve this Doc View Source SuggestWordScoreComparer() Creates a new comparer that will compare by Score , then by Freq , then by String . Declaration public SuggestWordScoreComparer() Methods | Improve this Doc View Source Compare(SuggestWord, SuggestWord) Declaration public virtual int Compare(SuggestWord first, SuggestWord second) Parameters Type Name Description SuggestWord first SuggestWord second Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T>"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.TermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.TermFreqIteratorWrapper.html",
    "title": "Class TermFreqIteratorWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermFreqIteratorWrapper Wraps a BytesRefIterator as a TermFreqIterator, with all weights set to 1 Inheritance System.Object TermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class TermFreqIteratorWrapper : ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source TermFreqIteratorWrapper(IBytesRefIterator) Creates a new wrapper, wrapping the specified iterator and specifying a weight value of 1 for all terms. Declaration public TermFreqIteratorWrapper(IBytesRefIterator wrapped) Parameters Type Name Description IBytesRefIterator wrapped Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingInfixSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingInfixSuggester.html",
    "title": "Class AnalyzingInfixSuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzingInfixSuggester Analyzes the input text and then suggests matches based on prefix matches to any tokens in the indexed text. This also highlights the tokens that match. This suggester supports payloads. Matches are sorted only by the suggest weight; it would be nice to support blended score + weight sort in the future. This means this suggester best applies when there is a strong a-priori ranking of all the suggestions. This suggester supports contexts, however the contexts must be valid utf8 (arbitrary binary terms will not work). @lucene.experimental Inheritance System.Object Lookup AnalyzingInfixSuggester BlendedInfixSuggester Implements System.IDisposable Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class AnalyzingInfixSuggester : Lookup, IDisposable Constructors | Improve this Doc View Source AnalyzingInfixSuggester(LuceneVersion, Directory, Analyzer) Create a new instance, loading from a previously built AnalyzingInfixSuggester directory, if it exists. This directory must be private to the infix suggester (i.e., not an external Lucene index). Note that Dispose() will also dispose the provided directory. Declaration public AnalyzingInfixSuggester(LuceneVersion matchVersion, Directory dir, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Directory dir Analyzer analyzer | Improve this Doc View Source AnalyzingInfixSuggester(LuceneVersion, Directory, Analyzer, Analyzer, Int32) Create a new instance, loading from a previously built AnalyzingInfixSuggester directory, if it exists. This directory must be private to the infix suggester (i.e., not an external Lucene index). Note that Dispose() will also dispose the provided directory. Declaration public AnalyzingInfixSuggester(LuceneVersion matchVersion, Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer, int minPrefixChars) Parameters Type Name Description LuceneVersion matchVersion Directory dir Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 minPrefixChars Minimum number of leading characters before PrefixQuery is used (default 4). Prefixes shorter than this are indexed as character ngrams (increasing index size but making lookups faster). Fields | Improve this Doc View Source CONTEXTS_FIELD_NAME Field name used for the indexed context, as a StringField and a SortedSetDocValuesField , for filtering. Declaration protected const string CONTEXTS_FIELD_NAME = \"contexts\" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_MIN_PREFIX_CHARS Default minimum number of leading characters before PrefixQuery is used (4). Declaration public const int DEFAULT_MIN_PREFIX_CHARS = 4 Field Value Type Description System.Int32 | Improve this Doc View Source EXACT_TEXT_FIELD_NAME Field name used for the indexed text, as a StringField , for exact lookup. Declaration protected const string EXACT_TEXT_FIELD_NAME = \"exacttext\" Field Value Type Description System.String | Improve this Doc View Source m_indexAnalyzer Analyzer used at index time Declaration protected readonly Analyzer m_indexAnalyzer Field Value Type Description Analyzer | Improve this Doc View Source m_queryAnalyzer Analyzer used at search time Declaration protected readonly Analyzer m_queryAnalyzer Field Value Type Description Analyzer | Improve this Doc View Source m_searcherMgr IndexSearcher used for lookups. Declaration protected SearcherManager m_searcherMgr Field Value Type Description SearcherManager | Improve this Doc View Source TEXT_FIELD_NAME Field name used for the indexed text. Declaration protected const string TEXT_FIELD_NAME = \"text\" Field Value Type Description System.String Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) Adds a new suggestion. Be sure to use Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) instead if you want to replace a previous suggestion. After adding or updating a batch of new suggestions, you must call Refresh() in the end in order to see the suggestions in DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public virtual void Add(BytesRef text, IEnumerable<BytesRef> contexts, long weight, BytesRef payload) Parameters Type Name Description BytesRef text System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int64 weight BytesRef payload | Improve this Doc View Source AddNonMatch(StringBuilder, String) Called while highlighting a single result, to append a non-matching chunk of text from the suggestion to the provided fragments list. Declaration protected virtual void AddNonMatch(StringBuilder sb, string text) Parameters Type Name Description System.Text.StringBuilder sb The System.Text.StringBuilder to append to System.String text The text chunk to add | Improve this Doc View Source AddPrefixMatch(StringBuilder, String, String, String) Called while highlighting a single result, to append a matched prefix token, to the provided fragments list. Declaration protected virtual void AddPrefixMatch(StringBuilder sb, string surface, string analyzed, string prefixToken) Parameters Type Name Description System.Text.StringBuilder sb The System.Text.StringBuilder to append to System.String surface The fragment of the surface form (indexed during Build(IInputIterator) , corresponding to this match System.String analyzed The analyzed token that matched System.String prefixToken The prefix of the token that matched | Improve this Doc View Source AddWholeMatch(StringBuilder, String, String) Called while highlighting a single result, to append the whole matched token to the provided fragments list. Declaration protected virtual void AddWholeMatch(StringBuilder sb, string surface, string analyzed) Parameters Type Name Description System.Text.StringBuilder sb The System.Text.StringBuilder to append to System.String surface The surface form (original) text System.String analyzed The analyzed token corresponding to the surface form text | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iter) Parameters Type Name Description IInputIterator iter Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) Create the results based on the search hits. Can be overridden by subclass to add particular behavior (e.g. weight transformation) Declaration protected virtual IList<Lookup.LookupResult> CreateResults(IndexSearcher searcher, TopFieldDocs hits, int num, string charSequence, bool doHighlight, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description IndexSearcher searcher TopFieldDocs hits System.Int32 num System.String charSequence System.Boolean doHighlight System.Collections.Generic.IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Exceptions Type Condition System.IO.IOException If there are problems reading fields from the underlying Lucene index. | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Retrieve suggestions, specifying whether all terms must match ( allTermsRequired ) and whether the hits should be highlighted ( doHighlight ). Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > | Improve this Doc View Source DoLookup(String, Int32, Boolean, Boolean) Lookup, without any context. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > | Improve this Doc View Source FinishQuery(BooleanQuery, Boolean) Subclass can override this to tweak the Query before searching. Declaration protected virtual Query FinishQuery(BooleanQuery bq, bool allTermsRequired) Parameters Type Name Description BooleanQuery bq System.Boolean allTermsRequired Returns Type Description Query | Improve this Doc View Source GetDirectory(DirectoryInfo) Subclass can override to choose a specific Directory implementation. Declaration protected virtual Directory GetDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path Returns Type Description Directory | Improve this Doc View Source GetIndexWriterConfig(LuceneVersion, Analyzer, OpenMode) Override this to customize index settings, e.g. which codec to use. Declaration protected virtual IndexWriterConfig GetIndexWriterConfig(LuceneVersion matchVersion, Analyzer indexAnalyzer, OpenMode openMode) Parameters Type Name Description LuceneVersion matchVersion Analyzer indexAnalyzer OpenMode openMode Returns Type Description IndexWriterConfig | Improve this Doc View Source GetLastTokenQuery(String) This is called if the last token isn't ended (e.g. user did not type a space after it). Return an appropriate Query clause to add to the BooleanQuery . Declaration protected virtual Query GetLastTokenQuery(string token) Parameters Type Name Description System.String token Returns Type Description Query | Improve this Doc View Source GetSizeInBytes() Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source GetTextFieldType() Subclass can override this method to change the field type of the text field e.g. to change the index options Declaration protected virtual FieldType GetTextFieldType() Returns Type Description FieldType | Improve this Doc View Source Highlight(String, IEnumerable<String>, String) Override this method to customize the Object representing a single highlighted suggestions; the result is set on each HighlightKey member. Declaration protected virtual object Highlight(string text, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description System.String text System.Collections.Generic.IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description System.Object | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput out) Parameters Type Name Description DataInput out Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Refresh() Reopens the underlying searcher; it's best to \"batch up\" many additions/updates, and then call refresh once in the end. Declaration public virtual void Refresh() | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput in) Parameters Type Name Description DataOutput in Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) | Improve this Doc View Source Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) Updates a previous suggestion, matching the exact same text as before. Use this to change the weight or payload of an already added suggstion. If you know this text is not already present you can use Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) instead. After adding or updating a batch of new suggestions, you must call Refresh() in the end in order to see the suggestions in DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public virtual void Update(BytesRef text, IEnumerable<BytesRef> contexts, long weight, BytesRef payload) Parameters Type Name Description BytesRef text System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int64 weight BytesRef payload Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.html",
    "title": "Class AnalyzingSuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzingSuggester Suggester that first analyzes the surface form, adds the analyzed form to a weighted FST, and then does the same thing at lookup time. This means lookup is based on the analyzed form while suggestions are still the surface form(s). This can result in powerful suggester functionality. For example, if you use an analyzer removing stop words, then the partial text \"ghost chr...\" could see the suggestion \"The Ghost of Christmas Past\". Note that position increments MUST NOT be preserved for this example to work, so you should call the constructor with Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.preservePositionIncrements parameter set to false If SynonymFilter is used to map wifi and wireless network to hotspot then the partial text \"wirele...\" could suggest \"wifi router\". Token normalization like stemmers, accent removal, etc., would allow suggestions to ignore such variations. When two matching suggestions have the same weight, they are tie-broken by the analyzed form. If their analyzed form is the same then the order is undefined. There are some limitations: A lookup from a query like \"net\" in English won't be any different than \"net \" (ie, user added a trailing space) because analyzers don't reflect when they've seen a token separator and when they haven't. If you're using StopFilter , and the user will type \"fast apple\", but so far all they've typed is \"fast a\", again because the analyzer doesn't convey whether it's seen a token separator after the \"a\", StopFilter will remove that \"a\" causing far more matches than you'd expect. Lookups with the empty string return no results instead of all results. @lucene.experimental Inheritance System.Object Lookup AnalyzingSuggester FuzzySuggester Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class AnalyzingSuggester : Lookup Constructors | Improve this Doc View Source AnalyzingSuggester(Analyzer) Calls AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Declaration public AnalyzingSuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer | Improve this Doc View Source AnalyzingSuggester(Analyzer, Analyzer) Calls AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Declaration public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer | Improve this Doc View Source AnalyzingSuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean) Creates a new suggester. Declaration public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, SuggesterOptions options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, bool preservePositionIncrements) Parameters Type Name Description Analyzer indexAnalyzer Analyzer that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer Analyzer that will be used for analyzing query text during lookup SuggesterOptions options see EXACT_FIRST , PRESERVE_SEP System.Int32 maxSurfaceFormsPerAnalyzedForm Maximum number of surface forms to keep for a single analyzed form. When there are too many surface forms we discard the lowest weighted ones. System.Int32 maxGraphExpansions Maximum number of graph paths to expand from the analyzed form. Set this to -1 for no limit. System.Boolean preservePositionIncrements Whether position holes should appear in the automata Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source ConvertAutomaton(Automaton) Used by subclass to change the lookup automaton, if necessary. Declaration protected virtual Automaton ConvertAutomaton(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>) Returns all prefix paths to initialize the search. Declaration protected virtual IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> prefixPaths, Automaton lookupAutomaton, FST<PairOutputs<long?, BytesRef>.Pair> fst) Parameters Type Name Description System.Collections.Generic.IList < FSTUtil.Path < PairOutputs.Pair <>>> prefixPaths Automaton lookupAutomaton FST < PairOutputs.Pair <>> fst Returns Type Description System.Collections.Generic.IList < FSTUtil.Path < PairOutputs.Pair <>>> | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.html",
    "title": "Class BlendedInfixSuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlendedInfixSuggester Extension of the AnalyzingInfixSuggester which transforms the weight after search to take into account the position of the searched term into the indexed text. Please note that it increases the number of elements searched and applies the ponderation after. It might be costly for long suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingInfixSuggester BlendedInfixSuggester Implements System.IDisposable Inherited Members AnalyzingInfixSuggester.TEXT_FIELD_NAME AnalyzingInfixSuggester.EXACT_TEXT_FIELD_NAME AnalyzingInfixSuggester.CONTEXTS_FIELD_NAME AnalyzingInfixSuggester.m_queryAnalyzer AnalyzingInfixSuggester.m_indexAnalyzer AnalyzingInfixSuggester.m_searcherMgr AnalyzingInfixSuggester.DEFAULT_MIN_PREFIX_CHARS AnalyzingInfixSuggester.GetIndexWriterConfig(LuceneVersion, Analyzer, OpenMode) AnalyzingInfixSuggester.GetDirectory(DirectoryInfo) AnalyzingInfixSuggester.Build(IInputIterator) AnalyzingInfixSuggester.Add(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) AnalyzingInfixSuggester.Update(BytesRef, IEnumerable<BytesRef>, Int64, BytesRef) AnalyzingInfixSuggester.Refresh() AnalyzingInfixSuggester.DoLookup(String, Int32, Boolean, Boolean) AnalyzingInfixSuggester.GetLastTokenQuery(String) AnalyzingInfixSuggester.FinishQuery(BooleanQuery, Boolean) AnalyzingInfixSuggester.Highlight(String, IEnumerable<String>, String) AnalyzingInfixSuggester.AddNonMatch(StringBuilder, String) AnalyzingInfixSuggester.AddWholeMatch(StringBuilder, String, String) AnalyzingInfixSuggester.AddPrefixMatch(StringBuilder, String, String, String) AnalyzingInfixSuggester.Store(DataOutput) AnalyzingInfixSuggester.Load(DataInput) AnalyzingInfixSuggester.Dispose() AnalyzingInfixSuggester.GetSizeInBytes() AnalyzingInfixSuggester.Count Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class BlendedInfixSuggester : AnalyzingInfixSuggester, IDisposable Constructors | Improve this Doc View Source BlendedInfixSuggester(LuceneVersion, Directory, Analyzer) Create a new instance, loading from a previously built directory, if it exists. Declaration public BlendedInfixSuggester(LuceneVersion matchVersion, Directory dir, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Directory dir Analyzer analyzer | Improve this Doc View Source BlendedInfixSuggester(LuceneVersion, Directory, Analyzer, Analyzer, Int32, BlendedInfixSuggester.BlenderType, Int32) Create a new instance, loading from a previously built directory, if it exists. Declaration public BlendedInfixSuggester(LuceneVersion matchVersion, Directory dir, Analyzer indexAnalyzer, Analyzer queryAnalyzer, int minPrefixChars, BlendedInfixSuggester.BlenderType blenderType, int numFactor) Parameters Type Name Description LuceneVersion matchVersion Directory dir Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 minPrefixChars BlendedInfixSuggester.BlenderType blenderType Type of blending strategy, see BlenderType for more precisions System.Int32 numFactor Factor to multiply the number of searched elements before ponderate Exceptions Type Condition System.IO.IOException If there are problems opening the underlying Lucene index. Fields | Improve this Doc View Source DEFAULT_NUM_FACTOR Default factor Declaration public static int DEFAULT_NUM_FACTOR Field Value Type Description System.Int32 | Improve this Doc View Source LINEAR_COEF Coefficient used for linear blending Declaration protected static double LINEAR_COEF Field Value Type Description System.Double Methods | Improve this Doc View Source CalculateCoefficient(Int32) Calculate the weight coefficient based on the position of the first matching word. Subclass should override it to adapt it to particular needs Declaration protected virtual double CalculateCoefficient(int position) Parameters Type Name Description System.Int32 position of the first matching word in text Returns Type Description System.Double the coefficient | Improve this Doc View Source CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) Declaration protected override IList<Lookup.LookupResult> CreateResults(IndexSearcher searcher, TopFieldDocs hits, int num, string key, bool doHighlight, IEnumerable<string> matchedTokens, string prefixToken) Parameters Type Name Description IndexSearcher searcher TopFieldDocs hits System.Int32 num System.String key System.Boolean doHighlight System.Collections.Generic.IEnumerable < System.String > matchedTokens System.String prefixToken Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.CreateResults(IndexSearcher, TopFieldDocs, Int32, String, Boolean, IEnumerable<String>, String) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num, bool allTermsRequired, bool doHighlight) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int32 num System.Boolean allTermsRequired System.Boolean doHighlight Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides AnalyzingInfixSuggester.DoLookup(String, IEnumerable<BytesRef>, Int32, Boolean, Boolean) | Improve this Doc View Source GetTextFieldType() Declaration protected override FieldType GetTextFieldType() Returns Type Description FieldType Overrides AnalyzingInfixSuggester.GetTextFieldType() Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FreeTextSuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FreeTextSuggester.html",
    "title": "Class FreeTextSuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FreeTextSuggester Builds an ngram model from the text sent to Build(IInputIterator, Double) and predicts based on the last grams-1 tokens in the request sent to DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) . This tries to handle the \"long tail\" of suggestions for when the incoming query is a never before seen query string. Likely this suggester would only be used as a fallback, when the primary suggester fails to find any suggestions. Note that the weight for each suggestion is unused, and the suggestions are the analyzed forms (so your analysis process should normally be very \"light\"). This uses the stupid backoff language model to smooth scores across ngram models; see \"Large language models in machine translation\" for details. From DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) , the key of each result is the ngram token; the value is System.Int64.MaxValue * score (fixed point, cast to long). Divide by System.Int64.MaxValue to get the score back, which ranges from 0.0 to 1.0. onlyMorePopular is unused. @lucene.experimental Inheritance System.Object Lookup FreeTextSuggester Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public class FreeTextSuggester : Lookup Constructors | Improve this Doc View Source FreeTextSuggester(Analyzer) Instantiate, using the provided analyzer for both indexing and lookup, using bigram model by default. Declaration public FreeTextSuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer) Instantiate, using the provided indexing and lookup analyzers, using bigram model by default. Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer, Int32) Instantiate, using the provided indexing and lookup analyzers, with the specified model (2 = bigram, 3 = trigram, etc.). Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int grams) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 grams | Improve this Doc View Source FreeTextSuggester(Analyzer, Analyzer, Int32, Byte) Instantiate, using the provided indexing and lookup analyzers, and specified model (2 = bigram, 3 = trigram ,etc.). The separator is passed to SetTokenSeparator(String) to join multiple tokens into a single ngram token; it must be an ascii (7-bit-clean) byte. No input tokens should have this byte, otherwise System.ArgumentException is thrown. Declaration public FreeTextSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int grams, byte separator) Parameters Type Name Description Analyzer indexAnalyzer Analyzer queryAnalyzer System.Int32 grams System.Byte separator Fields | Improve this Doc View Source ALPHA The constant used for backoff smoothing; during lookup, this means that if a given trigram did not occur, and we backoff to the bigram, the overall score will be 0.4 times what the bigram model would have assigned. Declaration public const double ALPHA = 0.4 Field Value Type Description System.Double | Improve this Doc View Source CODEC_NAME Codec name used in the header for the saved model. Declaration public const string CODEC_NAME = \"freetextsuggest\" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_GRAMS By default we use a bigram model. Declaration public const int DEFAULT_GRAMS = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SEPARATOR The default character used to join multiple tokens into a single ngram token. The input tokens produced by the analyzer must not contain this character. Declaration public const byte DEFAULT_SEPARATOR = 30 Field Value Type Description System.Byte | Improve this Doc View Source VERSION_CURRENT Current version of the the saved model file format. Declaration public const int VERSION_CURRENT = 0 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Initial version of the the saved model file format. Declaration public const int VERSION_START = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source Build(IInputIterator, Double) Build the suggest index, using up to the specified amount of temporary RAM while building. Note that the weights for the suggestions are ignored. Declaration public virtual void Build(IInputIterator iterator, double ramBufferSizeMB) Parameters Type Name Description IInputIterator iterator System.Double ramBufferSizeMB | Improve this Doc View Source DoLookup(String, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Int32) Retrieve suggestions. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > | Improve this Doc View Source DoLookup(String, Int32) Lookup, without any context. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, int num) Parameters Type Name Description System.String key System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.html",
    "title": "Class FuzzySuggester | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzySuggester Implements a fuzzy AnalyzingSuggester . The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false for the Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions parameter. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances are not supported. Note that the fuzzy distance is measured in \"byte space\" on the bytes returned by the TokenStream 's ITermToBytesRefAttribute , usually UTF8. By default the analyzed bytes must be at least 3 DEFAULT_MIN_FUZZY_LENGTH bytes before any edits are considered. Furthermore, the first 1 DEFAULT_NON_FUZZY_PREFIX byte is not allowed to be edited. We allow up to 1 DEFAULT_MAX_EDITS edit. If Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.unicodeAware parameter in the constructor is set to true, maxEdits, minFuzzyLength, transpositions and nonFuzzyPrefix are measured in Unicode code points (actual letters) instead of bytes. NOTE: This suggester does not boost suggestions that required no edits over suggestions that did require edits. This is a known limitation. Note: complex query analyzers can have a significant impact on the lookup performance. It's recommended to not use analyzers that drop or inject terms like synonyms to keep the complexity of the prefix intersection low for good lookup performance. At index time, complex analyzers can safely be used. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingSuggester FuzzySuggester Inherited Members AnalyzingSuggester.GetSizeInBytes() AnalyzingSuggester.Build(IInputIterator) AnalyzingSuggester.Store(DataOutput) AnalyzingSuggester.Load(DataInput) AnalyzingSuggester.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) AnalyzingSuggester.Count AnalyzingSuggester.Get(String) Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class FuzzySuggester : AnalyzingSuggester Constructors | Improve this Doc View Source FuzzySuggester(Analyzer) Creates a FuzzySuggester instance initialized with default values. Declaration public FuzzySuggester(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer The Analyzer used for this suggester. | Improve this Doc View Source FuzzySuggester(Analyzer, Analyzer) Creates a FuzzySuggester instance with an index & a query analyzer initialized with default values. Declaration public FuzzySuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer) Parameters Type Name Description Analyzer indexAnalyzer Analyzer that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer Analyzer that will be used for analyzing query text during lookup | Improve this Doc View Source FuzzySuggester(Analyzer, Analyzer, SuggesterOptions, Int32, Int32, Boolean, Int32, Boolean, Int32, Int32, Boolean) Creates a FuzzySuggester instance. Declaration public FuzzySuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, SuggesterOptions options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, bool preservePositionIncrements, int maxEdits, bool transpositions, int nonFuzzyPrefix, int minFuzzyLength, bool unicodeAware) Parameters Type Name Description Analyzer indexAnalyzer The Analyzer that will be used for analyzing suggestions while building the index. Analyzer queryAnalyzer The Analyzer that will be used for analyzing query text during lookup SuggesterOptions options see EXACT_FIRST , PRESERVE_SEP System.Int32 maxSurfaceFormsPerAnalyzedForm Maximum number of surface forms to keep for a single analyzed form. When there are too many surface forms we discard the lowest weighted ones. System.Int32 maxGraphExpansions Maximum number of graph paths to expand from the analyzed form. Set this to -1 for no limit. System.Boolean preservePositionIncrements Whether position holes should appear in the automaton System.Int32 maxEdits must be >= 0 and <= MAXIMUM_SUPPORTED_DISTANCE . System.Boolean transpositions true if transpositions should be treated as a primitive edit operation. If this is false, comparisons will implement the classic Levenshtein algorithm. System.Int32 nonFuzzyPrefix length of common (non-fuzzy) prefix (see default DEFAULT_NON_FUZZY_PREFIX System.Int32 minFuzzyLength minimum length of lookup key before any edits are allowed (see default DEFAULT_MIN_FUZZY_LENGTH ) System.Boolean unicodeAware operate Unicode code points instead of bytes. Fields | Improve this Doc View Source DEFAULT_MAX_EDITS The default maximum number of edits for fuzzy suggestions. Declaration public const int DEFAULT_MAX_EDITS = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_FUZZY_LENGTH The default minimum length of the key passed to Lookup before any edits are allowed. Declaration public const int DEFAULT_MIN_FUZZY_LENGTH = 3 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_NON_FUZZY_PREFIX The default prefix length where edits are not allowed. Declaration public const int DEFAULT_NON_FUZZY_PREFIX = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_TRANSPOSITIONS The default transposition value passed to LevenshteinAutomata Declaration public const bool DEFAULT_TRANSPOSITIONS = true Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_UNICODE_AWARE Measure Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.maxEdits , Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.minFuzzyLength , Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions , and Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.nonFuzzyPrefix parameters in Unicode code points (actual letters) instead of bytes. Declaration public const bool DEFAULT_UNICODE_AWARE = false Field Value Type Description System.Boolean Methods | Improve this Doc View Source ConvertAutomaton(Automaton) Declaration protected override Automaton ConvertAutomaton(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton Overrides AnalyzingSuggester.ConvertAutomaton(Automaton) | Improve this Doc View Source GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>) Declaration protected override IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<long?, BytesRef>.Pair>> prefixPaths, Automaton lookupAutomaton, FST<PairOutputs<long?, BytesRef>.Pair> fst) Parameters Type Name Description System.Collections.Generic.IList < FSTUtil.Path < PairOutputs.Pair <>>> prefixPaths Automaton lookupAutomaton FST < PairOutputs.Pair <>> fst Returns Type Description System.Collections.Generic.IList < FSTUtil.Path < PairOutputs.Pair <>>> Overrides AnalyzingSuggester.GetFullPrefixPaths(IList<FSTUtil.Path<PairOutputs<Nullable<Int64>, BytesRef>.Pair>>, Automaton, FST<PairOutputs<Nullable<Int64>, BytesRef>.Pair>)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggestStopFilter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggestStopFilter.html",
    "title": "Class SuggestStopFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestStopFilter Like StopFilter except it will not remove the last token if that token was not followed by some token separator. For example, a query 'find the' would preserve the 'the' since it was not followed by a space or punctuation or something, and mark it KEYWORD so future stemmers won't touch it either while a query like \"find the popsicle' would remove 'the' as a stopword. Normally you'd use the ordinary StopFilter in your indexAnalyzer and then this class in your queryAnalyzer, when using one of the analyzing suggesters. Inheritance System.Object AttributeSource TokenStream TokenFilter SuggestStopFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestStopFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SuggestStopFilter(TokenStream, CharArraySet) Sole constructor. Declaration public SuggestStopFilter(TokenStream input, CharArraySet stopWords) Parameters Type Name Description TokenStream input CharArraySet stopWords Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.html",
    "title": "Class SimpleTerm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTerm Base class for queries that expand to sets of simple terms. Inheritance System.Object SrndQuery SimpleTerm SrndPrefixQuery SrndTermQuery SrndTruncQuery Implements IDistanceSubQuery System.IComparable < SimpleTerm > Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SimpleTerm : SrndQuery, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SimpleTerm(Boolean) Declaration public SimpleTerm(bool q) Parameters Type Name Description System.Boolean q Properties | Improve this Doc View Source FieldOperator Declaration public virtual string FieldOperator { get; } Property Value Type Description System.String | Improve this Doc View Source Quote Declaration public virtual string Quote { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source CompareTo(SimpleTerm) Declaration [Obsolete(\"deprecated (March 2011) Not normally used, to be removed from Lucene 4.0. This class implementing Comparable is to be removed at the same time.\")] public int CompareTo(SimpleTerm ost) Parameters Type Name Description SimpleTerm ost Returns Type Description System.Int32 | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) | Improve this Doc View Source SuffixToString(StringBuilder) Declaration protected virtual void SuffixToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString() | Improve this Doc View Source ToStringUnquoted() Declaration public abstract string ToStringUnquoted() Returns Type Description System.String | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public abstract void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Implements IDistanceSubQuery System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndPrefixQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndPrefixQuery.html",
    "title": "Class SrndPrefixQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SrndPrefixQuery Query that matches string prefixes Inheritance System.Object SrndQuery SimpleTerm SrndPrefixQuery Implements IDistanceSubQuery System.IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndPrefixQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndPrefixQuery(String, Boolean, Char) Declaration public SrndPrefixQuery(string prefix, bool quoted, char truncator) Parameters Type Name Description System.String prefix System.Boolean quoted System.Char truncator Properties | Improve this Doc View Source Prefix Declaration public virtual string Prefix { get; } Property Value Type Description System.String | Improve this Doc View Source SuffixOperator Declaration public virtual char SuffixOperator { get; } Property Value Type Description System.Char Methods | Improve this Doc View Source GetLucenePrefixTerm(String) Declaration public virtual Term GetLucenePrefixTerm(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Term | Improve this Doc View Source SuffixToString(StringBuilder) Declaration protected override void SuffixToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r Overrides SimpleTerm.SuffixToString(StringBuilder) | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTermQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTermQuery.html",
    "title": "Class SrndTermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SrndTermQuery Simple single-term clause Inheritance System.Object SrndQuery SimpleTerm SrndTermQuery Implements IDistanceSubQuery System.IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.SuffixToString(StringBuilder) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndTermQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndTermQuery(String, Boolean) Declaration public SrndTermQuery(string termText, bool quoted) Parameters Type Name Description System.String termText System.Boolean quoted Properties | Improve this Doc View Source TermText Declaration public virtual string TermText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetLuceneTerm(String) Declaration public virtual Term GetLuceneTerm(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Term | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTruncQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndTruncQuery.html",
    "title": "Class SrndTruncQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SrndTruncQuery Query that matches wildcards Inheritance System.Object SrndQuery SimpleTerm SrndTruncQuery Implements IDistanceSubQuery System.IComparable < SimpleTerm > Inherited Members SimpleTerm.Quote SimpleTerm.FieldOperator SimpleTerm.CompareTo(SimpleTerm) SimpleTerm.SuffixToString(StringBuilder) SimpleTerm.ToString() SimpleTerm.DistanceSubQueryNotAllowed() SimpleTerm.AddSpanQueries(SpanNearClauseFactory) SimpleTerm.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.IsFieldsSubQueryAcceptable SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SrndTruncQuery : SimpleTerm, IDistanceSubQuery, IComparable<SimpleTerm> Constructors | Improve this Doc View Source SrndTruncQuery(String, Char, Char) Declaration public SrndTruncQuery(string truncated, char unlimited, char mask) Parameters Type Name Description System.String truncated System.Char unlimited System.Char mask Properties | Improve this Doc View Source Truncated Declaration public virtual string Truncated { get; } Property Value Type Description System.String Methods | Improve this Doc View Source AppendRegExpForChar(Char, StringBuilder) Declaration protected virtual void AppendRegExpForChar(char c, StringBuilder re) Parameters Type Name Description System.Char c System.Text.StringBuilder re | Improve this Doc View Source MatchingChar(Char) Declaration protected virtual bool MatchingChar(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source ToStringUnquoted() Declaration public override string ToStringUnquoted() Returns Type Description System.String Overrides SimpleTerm.ToStringUnquoted() | Improve this Doc View Source TruncatedToPrefixAndPattern() Declaration protected virtual void TruncatedToPrefixAndPattern() | Improve this Doc View Source VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Declaration public override void VisitMatchingTerms(IndexReader reader, string fieldName, SimpleTerm.IMatchingTermVisitor mtv) Parameters Type Name Description IndexReader reader System.String fieldName SimpleTerm.IMatchingTermVisitor mtv Overrides SimpleTerm.VisitMatchingTerms(IndexReader, String, SimpleTerm.IMatchingTermVisitor) Implements IDistanceSubQuery System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.TooManyBasicQueries.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.TooManyBasicQueries.html",
    "title": "Class TooManyBasicQueries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TooManyBasicQueries Exception thrown when BasicQueryFactory would exceed the limit of query clauses. Inheritance System.Object System.Exception System.IO.IOException TooManyBasicQueries Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class TooManyBasicQueries : IOException Constructors | Improve this Doc View Source TooManyBasicQueries(Int32) Declaration public TooManyBasicQueries(int maxBasicQueries) Parameters Type Name Description System.Int32 maxBasicQueries"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanFilterBuilder.html",
    "title": "Class BooleanFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanFilterBuilder Builder for BooleanFilter Inheritance System.Object BooleanFilterBuilder Implements IFilterBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanFilterBuilder : IFilterBuilder Constructors | Improve this Doc View Source BooleanFilterBuilder(IFilterBuilder) Declaration public BooleanFilterBuilder(IFilterBuilder factory) Parameters Type Name Description IFilterBuilder factory Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BooleanQueryBuilder.html",
    "title": "Class BooleanQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQueryBuilder Builder for BooleanQuery Inheritance System.Object BooleanQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source BooleanQueryBuilder(IQueryBuilder) Declaration public BooleanQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingQueryBuilder.html",
    "title": "Class BoostingQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostingQueryBuilder Builder for BoostingQuery Inheritance System.Object BoostingQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostingQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source BoostingQueryBuilder(IQueryBuilder) Declaration public BoostingQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingTermBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.BoostingTermBuilder.html",
    "title": "Class BoostingTermBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostingTermBuilder Builder for PayloadTermQuery Inheritance System.Object SpanBuilderBase BoostingTermBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostingTermBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.CachedFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.CachedFilterBuilder.html",
    "title": "Class CachedFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachedFilterBuilder Filters are cached in an LRU Cache keyed on the contained query or filter object. Using this will speed up overall performance for repeated uses of the same expensive query/filter. The sorts of queries/filters likely to benefit from caching need not necessarily be complex - e.g. simple TermQuerys with a large DF (document frequency) can be expensive on large indexes. A good example of this might be a term query on a field with only 2 possible values - \"true\" or \"false\". In a large index, querying or filtering on this field requires reading millions of document ids from disk which can more usefully be cached as a filter bitset. For Queries/Filters to be cached and reused the object must implement hashcode and equals methods correctly so that duplicate queries/filters can be detected in the cache. The CoreParser.maxNumCachedFilters property can be used to control the size of the LRU Cache established during the construction of CoreParser instances. Inheritance System.Object CachedFilterBuilder Implements IFilterBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class CachedFilterBuilder : IFilterBuilder Constructors | Improve this Doc View Source CachedFilterBuilder(QueryBuilderFactory, FilterBuilderFactory, Int32) Declaration public CachedFilterBuilder(QueryBuilderFactory queryFactory, FilterBuilderFactory filterFactory, int cacheSize) Parameters Type Name Description QueryBuilderFactory queryFactory FilterBuilderFactory filterFactory System.Int32 cacheSize Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ConstantScoreQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ConstantScoreQueryBuilder.html",
    "title": "Class ConstantScoreQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQueryBuilder Builder for ConstantScoreQuery Inheritance System.Object ConstantScoreQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class ConstantScoreQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source ConstantScoreQueryBuilder(FilterBuilderFactory) Declaration public ConstantScoreQueryBuilder(FilterBuilderFactory filterFactory) Parameters Type Name Description FilterBuilderFactory filterFactory Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DisjunctionMaxQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DisjunctionMaxQueryBuilder.html",
    "title": "Class DisjunctionMaxQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisjunctionMaxQueryBuilder Builder for DisjunctionMaxQuery Inheritance System.Object DisjunctionMaxQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DisjunctionMaxQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source DisjunctionMaxQueryBuilder(IQueryBuilder) Declaration public DisjunctionMaxQueryBuilder(IQueryBuilder factory) Parameters Type Name Description IQueryBuilder factory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DuplicateFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.DuplicateFilterBuilder.html",
    "title": "Class DuplicateFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DuplicateFilterBuilder Builder for Lucene.Net.Sandbox.Queries.DuplicateFilter Inheritance System.Object DuplicateFilterBuilder Implements IFilterBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DuplicateFilterBuilder : IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net/Lucene.Net.Support.ExceptionToClassNameConventionAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ExceptionToClassNameConventionAttribute.html",
    "title": "Class ExceptionToClassNameConventionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionToClassNameConventionAttribute Use this attribute to make an exception to the class naming rules (which should not be named like Interfaces). Inheritance System.Object System.Attribute ExceptionToClassNameConventionAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] public class ExceptionToClassNameConventionAttribute : Attribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ExceptionToNetNumericConventionAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ExceptionToNetNumericConventionAttribute.html",
    "title": "Class ExceptionToNetNumericConventionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionToNetNumericConventionAttribute Properties, methods, or events marked with this attribute can ignore the numeric naming conventions of \"Int16\", \"Int32\", \"Int64\", and \"Single\" that are commonly used in .NET method and property names. Inheritance System.Object System.Attribute ExceptionToNetNumericConventionAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class | AttributeTargets.Event | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)] public class ExceptionToNetNumericConventionAttribute : Attribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ExceptionToNullableEnumConvention.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ExceptionToNullableEnumConvention.html",
    "title": "Class ExceptionToNullableEnumConvention | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionToNullableEnumConvention Use this attribute to make an exception to the nullable enum rule. Some of these cannot be avoided. Inheritance System.Object System.Attribute ExceptionToNullableEnumConvention Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)] public class ExceptionToNullableEnumConvention : Attribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.HashMap-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.HashMap-2.html",
    "title": "Class HashMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HashMap<TKey, TValue> A C# emulation of the Java Hashmap A System.Collections.Generic.Dictionary`2 is a close equivalent to the Java Hashmap. One difference java implementation of the class is that the Hashmap supports both null keys and values, where the C# Dictionary only supports null values not keys. Also, V Get(TKey) method in Java returns null if the key doesn't exist, instead of throwing an exception. This implementation doesn't throw an exception when a key doesn't exist, it will return null. This class is slower than using a System.Collections.Generic.Dictionary`2 , because of extra checks that have to be done on each access, to check for null. NOTE: This class works best with nullable types. default(T) is returned when a key doesn't exist in the collection (this being similar to how Java returns null). Therefore, if the expected behavior of the java code is to execute code based on if the key exists, when the key is an integer type, it will return 0 instead of null. Consider also implementing IDictionary, IEnumerable, and ICollection like System.Collections.Generic.Dictionary`2 does, so HashMap can be used in substituted in place for the same interfaces it implements. Inheritance System.Object HashMap<TKey, TValue> IdentityHashMap<TKey, TValue> LinkedHashMap <TKey, TValue> Implements System.Collections.Generic.IDictionary <TKey, TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class HashMap<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable Type Parameters Name Description TKey The type of keys in the dictionary TValue The type of values in the dictionary Remarks Unordered Dictionaries System.Collections.Generic.Dictionary`2 - use when order is not important and all keys are non-null. HashMap<TKey, TValue> - use when order is not important and support for a null key is required. Ordered Dictionaries LinkedHashMap<TKey, TValue> - use when you need to preserve entry insertion order. Keys are nullable. System.Collections.Generic.SortedDictionary`2 - use when you need natural sort order. Keys must be unique. TreeDictionary<K, V> - use when you need natural sort order. Keys may contain duplicates. LurchTable<TKey, TValue> - use when you need to sort by most recent access or most recent update. Works well for LRU caching. Constructors | Improve this Doc View Source HashMap() Declaration public HashMap() | Improve this Doc View Source HashMap(IEnumerable<KeyValuePair<TKey, TValue>>) Declaration public HashMap(IEnumerable<KeyValuePair<TKey, TValue>> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> other | Improve this Doc View Source HashMap(IEqualityComparer<TKey>) Declaration public HashMap(IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <TKey> comparer | Improve this Doc View Source HashMap(Int32) Declaration public HashMap(int initialCapacity) Parameters Type Name Description System.Int32 initialCapacity | Improve this Doc View Source HashMap(Int32, IEqualityComparer<TKey>) Declaration public HashMap(int initialCapacity, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 initialCapacity System.Collections.Generic.IEqualityComparer <TKey> comparer Properties | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public virtual TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public virtual ICollection<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <TKey> | Improve this Doc View Source Values Declaration public virtual ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public virtual void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public virtual void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item | Improve this Doc View Source AddIfAbsent(TKey, TValue) Declaration public TValue AddIfAbsent(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description TValue | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public virtual bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(TKey) Declaration public virtual bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source ContainsValue(TValue) Declaration public bool ContainsValue(TValue value) Parameters Type Name Description TValue value Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public virtual void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetEnumerator() Declaration public virtual IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Remove(TKey) Declaration public virtual bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public virtual bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public virtual bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods DictionaryExtensions.PutAll<TKey, TValue>(IDictionary<TKey, TValue>, IEnumerable<KeyValuePair<TKey, TValue>>) DictionaryExtensions.EntrySet<TKey, TValue>(IDictionary<TKey, TValue>) DictionaryExtensions.Put<TKey, TValue>(IDictionary<TKey, TValue>, TKey, TValue) EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ICreateOrUpdateValue-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ICreateOrUpdateValue-2.html",
    "title": "Interface ICreateOrUpdateValue<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICreateOrUpdateValue<TKey, TValue> An interface to provide conditional or custom creation or update logic to a concurrent dictionary. Inherited Members ICreateValue<TKey, TValue>.CreateValue(TKey, TValue) IUpdateValue<TKey, TValue>.UpdateValue(TKey, TValue) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface ICreateOrUpdateValue<TKey, TValue> : ICreateValue<TKey, TValue>, IUpdateValue<TKey, TValue> Type Parameters Name Description TKey TValue Remarks Generally implemented as a struct and passed by ref to save stack space and to retrieve the values that where inserted or updated. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.LinkedHashMap-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LinkedHashMap-2.html",
    "title": "Class LinkedHashMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LinkedHashMap<TKey, TValue> LinkedHashMap is a specialized dictionary that preserves the entry order of elements. Like a HashMap, there can be a null key, but it also guarantees that the enumeration order of the elements are the same as insertion order, regardless of the number of add/remove/update operations that are performed on it. Inheritance System.Object HashMap <TKey, TValue> LinkedHashMap<TKey, TValue> Implements System.Collections.Generic.IDictionary <TKey, TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerable Inherited Members HashMap<TKey, TValue>.ContainsValue(TValue) HashMap<TKey, TValue>.AddIfAbsent(TKey, TValue) HashMap<TKey, TValue>.Equals(Object) HashMap<TKey, TValue>.GetHashCode() HashMap<TKey, TValue>.ToString() HashMap<TKey, TValue>.GetEnumerator() HashMap<TKey, TValue>.IEnumerable.GetEnumerator() HashMap<TKey, TValue>.Add(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.Clear() HashMap<TKey, TValue>.Contains(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.CopyTo(KeyValuePair<TKey, TValue>[], Int32) HashMap<TKey, TValue>.Remove(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.Count HashMap<TKey, TValue>.IsReadOnly HashMap<TKey, TValue>.ContainsKey(TKey) HashMap<TKey, TValue>.Add(TKey, TValue) HashMap<TKey, TValue>.Remove(TKey) HashMap<TKey, TValue>.TryGetValue(TKey, TValue) HashMap<TKey, TValue>.Item[TKey] HashMap<TKey, TValue>.Keys HashMap<TKey, TValue>.Values System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class LinkedHashMap<TKey, TValue> : HashMap<TKey, TValue>, IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable Type Parameters Name Description TKey The type of keys in the dictionary TValue The type of values in the dictionary Remarks Unordered Dictionaries System.Collections.Generic.Dictionary`2 - use when order is not important and all keys are non-null. HashMap<TKey, TValue> - use when order is not important and support for a null key is required. Ordered Dictionaries LinkedHashMap<TKey, TValue> - use when you need to preserve entry insertion order. Keys are nullable. System.Collections.Generic.SortedDictionary`2 - use when you need natural sort order. Keys must be unique. TreeDictionary<K, V> - use when you need natural sort order. Keys may contain duplicates. LurchTable<TKey, TValue> - use when you need to sort by most recent access or most recent update. Works well for LRU caching. Constructors | Improve this Doc View Source LinkedHashMap() Declaration public LinkedHashMap() | Improve this Doc View Source LinkedHashMap(IEnumerable<KeyValuePair<TKey, TValue>>) Declaration public LinkedHashMap(IEnumerable<KeyValuePair<TKey, TValue>> source) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> source | Improve this Doc View Source LinkedHashMap(IEnumerable<KeyValuePair<TKey, TValue>>, IEqualityComparer<TKey>) Declaration public LinkedHashMap(IEnumerable<KeyValuePair<TKey, TValue>> source, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> source System.Collections.Generic.IEqualityComparer <TKey> comparer | Improve this Doc View Source LinkedHashMap(IEqualityComparer<TKey>) Declaration public LinkedHashMap(IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <TKey> comparer | Improve this Doc View Source LinkedHashMap(Int32) Declaration public LinkedHashMap(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source LinkedHashMap(Int32, IEqualityComparer<TKey>) Declaration public LinkedHashMap(int capacity, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 capacity System.Collections.Generic.IEqualityComparer <TKey> comparer Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Count | Improve this Doc View Source IsReadOnly Declaration public override bool IsReadOnly { get; } Property Value Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.IsReadOnly | Improve this Doc View Source Item[TKey] Declaration public override TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Item[TKey] | Improve this Doc View Source Keys Declaration public override ICollection<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <TKey> Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Keys | Improve this Doc View Source Values Declaration public override ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Values Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public override void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Add(TKey, TValue) | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public override void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Add(System.Collections.Generic.KeyValuePair<TKey, TValue>) | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public override bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Contains(System.Collections.Generic.KeyValuePair<TKey, TValue>) | Improve this Doc View Source ContainsKey(TKey) Declaration public override bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.ContainsKey(TKey) | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public override void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex Overrides Lucene.Net.Support.HashMap<TKey, TValue>.CopyTo(System.Collections.Generic.KeyValuePair<TKey, TValue>[], System.Int32) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> Overrides Lucene.Net.Support.HashMap<TKey, TValue>.GetEnumerator() | Improve this Doc View Source Remove(TKey) Declaration public override bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Remove(TKey) | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public override bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.Remove(System.Collections.Generic.KeyValuePair<TKey, TValue>) | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public override bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Overrides Lucene.Net.Support.HashMap<TKey, TValue>.TryGetValue(TKey, TValue) Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods DictionaryExtensions.PutAll<TKey, TValue>(IDictionary<TKey, TValue>, IEnumerable<KeyValuePair<TKey, TValue>>) DictionaryExtensions.EntrySet<TKey, TValue>(IDictionary<TKey, TValue>) DictionaryExtensions.Put<TKey, TValue>(IDictionary<TKey, TValue>, TKey, TValue) EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ListExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ListExtensions.html",
    "title": "Class ListExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ListExtensions Inheritance System.Object ListExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class ListExtensions Methods | Improve this Doc View Source AddRange<T>(IList<T>, IEnumerable<T>) Declaration public static void AddRange<T>(this IList<T> list, IEnumerable<T> values) Parameters Type Name Description System.Collections.Generic.IList <T> list System.Collections.Generic.IEnumerable <T> values Type Parameters Name Description T | Improve this Doc View Source BinarySearch<T>(IList<T>, T) Performs a binary search for the specified element in the specified sorted list. The list needs to be already sorted in natural sorting order. Searching in an unsorted array has an undefined result. It's also undefined which element is found if there are multiple occurrences of the same element. Declaration public static int BinarySearch<T>(this IList<T> list, T item) where T : IComparable<T> Parameters Type Name Description System.Collections.Generic.IList <T> list The sorted list to search. T item The element to find. Returns Type Description System.Int32 The non-negative index of the element, or a negative index which is the -index - 1 where the element would be inserted. Type Parameters Name Description T The element type. Exceptions Type Condition System.InvalidCastException If an element in the List or the search element does not implement System.IComparable<T> , or cannot be compared to each other. | Improve this Doc View Source BinarySearch<T>(IList<T>, T, IComparer<T>) Performs a binary search for the specified element in the specified sorted list using the specified comparator. The list needs to be already sorted according to the comparer passed. Searching in an unsorted array has an undefined result. It's also undefined which element is found if there are multiple occurrences of the same element. Declaration public static int BinarySearch<T>(this IList<T> list, T item, IComparer<T> comparer) where T : IComparable<T> Parameters Type Name Description System.Collections.Generic.IList <T> list The sorted System.Collections.Generic.IList<T> to search. T item The element to find. System.Collections.Generic.IComparer <T> comparer The comparer. If the comparer is null then the search uses the objects' natural ordering. Returns Type Description System.Int32 the non-negative index of the element, or a negative index which is the -index - 1 where the element would be inserted. Type Parameters Name Description T The element type. Exceptions Type Condition System.InvalidCastException when an element in the list and the searched element cannot be compared to each other using the comparer. | Improve this Doc View Source IntroSort<T>(IList<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(this IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(IList<T>, IComparer<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comparer The System.Collections.Generic.IComparer<T> to use for the sort. Type Parameters Name Description T | Improve this Doc View Source Shuffle<T>(IList<T>) Shuffles an System.Collections.Generic.IList<T> in place using a new System.Random instance. Declaration public static void Shuffle<T>(this IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list This System.Collections.Generic.IList<T> . Type Parameters Name Description T | Improve this Doc View Source Shuffle<T>(IList<T>, Random) Shuffles an System.Collections.Generic.IList<T> in place using the specified random instance. Declaration public static void Shuffle<T>(this IList<T> list, Random random) Parameters Type Name Description System.Collections.Generic.IList <T> list This System.Collections.Generic.IList<T> . System.Random random Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>) If the underlying type is System.Collections.Generic.List<T> , calls System.Collections.Generic.List`1.Sort . If not, uses TimSort<T>(IList<T>) Declaration public static void Sort<T>(this IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>, IComparer<T>) If the underlying type is System.Collections.Generic.List<T> , calls System.Collections.Generic.List`1.Sort(System.Collections.Generic.IComparer{`0}) . If not, uses TimSort<T>(IList<T>, IComparer<T>) Declaration public static void Sort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comparer the comparer to use for the sort Type Parameters Name Description T | Improve this Doc View Source Sort<T>(IList<T>, Comparison<T>) If the underlying type is System.Collections.Generic.List<T> , calls System.Collections.Generic.List`1.Sort(System.Collections.Generic.IComparer{`0}) . If not, uses TimSort<T>(IList<T>, IComparer<T>) Declaration public static void Sort<T>(this IList<T> list, Comparison<T> comparison) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Comparison <T> comparison the comparison function to use for the sort Type Parameters Name Description T | Improve this Doc View Source SubList<T>(IList<T>, Int32, Int32) Declaration public static IList<T> SubList<T>(this IList<T> list, int fromIndex, int toIndex) Parameters Type Name Description System.Collections.Generic.IList <T> list System.Int32 fromIndex System.Int32 toIndex Returns Type Description System.Collections.Generic.IList <T> Type Parameters Name Description T | Improve this Doc View Source Swap<T>(IList<T>, Int32, Int32) Declaration public static void Swap<T>(this IList<T> list, int indexA, int indexB) Parameters Type Name Description System.Collections.Generic.IList <T> list System.Int32 indexA System.Int32 indexB Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(this IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>, IComparer<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(this IList<T> list, IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comparer The System.Collections.Generic.IComparer<T> to use for the sort. Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.Enumerator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.Enumerator.html",
    "title": "Struct LurchTable<TKey, TValue>.Enumerator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct LurchTable<TKey, TValue>.Enumerator Provides an enumerator that iterates through the collection. Implements System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerator System.IDisposable Inherited Members System.ValueType.Equals(System.Object) System.ValueType.GetHashCode() System.ValueType.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>>, IEnumerator, IDisposable Properties | Improve this Doc View Source Current Gets the element in the collection at the current position of the enumerator. Declaration public KeyValuePair<TKey, TValue> Current { get; } Property Value Type Description System.Collections.Generic.KeyValuePair <TKey, TValue> Methods | Improve this Doc View Source Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Declaration public void Dispose() | Improve this Doc View Source MoveNext() Advances the enumerator to the next element of the collection. Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Sets the enumerator to its initial position, which is before the first element in the collection. Declaration public void Reset() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.KeyCollection.Enumerator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.KeyCollection.Enumerator.html",
    "title": "Struct LurchTable<TKey, TValue>.KeyCollection.Enumerator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct LurchTable<TKey, TValue>.KeyCollection.Enumerator Provides an enumerator that iterates through the collection. Implements System.Collections.Generic.IEnumerator <TKey> System.Collections.IEnumerator System.IDisposable Inherited Members System.ValueType.Equals(System.Object) System.ValueType.GetHashCode() System.ValueType.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public struct Enumerator : IEnumerator<TKey>, IEnumerator, IDisposable Properties | Improve this Doc View Source Current Gets the element in the collection at the current position of the enumerator. Declaration public TKey Current { get; } Property Value Type Description TKey Methods | Improve this Doc View Source Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Declaration public void Dispose() | Improve this Doc View Source MoveNext() Advances the enumerator to the next element of the collection. Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Sets the enumerator to its initial position, which is before the first element in the collection. Declaration public void Reset() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.KeyCollection.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.KeyCollection.html",
    "title": "Class LurchTable<TKey, TValue>.KeyCollection | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LurchTable<TKey, TValue>.KeyCollection Provides the collection of Keys for the LurchTable Inheritance System.Object LurchTable<TKey, TValue>.KeyCollection Implements System.Collections.Generic.ICollection <TKey> System.Collections.Generic.IEnumerable <TKey> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class KeyCollection : ICollection<TKey>, IEnumerable<TKey>, IEnumerable Properties | Improve this Doc View Source Count Gets the number of elements contained in the System.Collections.Generic.ICollection<T> . Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Contains(TKey) Determines whether the System.Collections.Generic.ICollection<T> contains a specific value. Declaration public bool Contains(TKey item) Parameters Type Name Description TKey item Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(TKey[], Int32) Copies the elements of the System.Collections.Generic.ICollection<T> to an System.Array , starting at a particular System.Array index. Declaration public void CopyTo(TKey[] array, int arrayIndex) Parameters Type Name Description TKey[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the collection. Declaration public LurchTable<TKey, TValue>.KeyCollection.Enumerator GetEnumerator() Returns Type Description LurchTable.KeyCollection.Enumerator <> Explicit Interface Implementations | Improve this Doc View Source ICollection<TKey>.Add(TKey) Declaration [Obsolete] void ICollection<TKey>.Add(TKey item) Parameters Type Name Description TKey item | Improve this Doc View Source ICollection<TKey>.Clear() Declaration [Obsolete] void ICollection<TKey>.Clear() | Improve this Doc View Source ICollection<TKey>.IsReadOnly Declaration [Obsolete] bool ICollection<TKey>.IsReadOnly { get; } Returns Type Description System.Boolean | Improve this Doc View Source ICollection<TKey>.Remove(TKey) Declaration [Obsolete] bool ICollection<TKey>.Remove(TKey item) Parameters Type Name Description TKey item Returns Type Description System.Boolean | Improve this Doc View Source IEnumerable<TKey>.GetEnumerator() Declaration [Obsolete] IEnumerator<TKey> IEnumerable<TKey>.GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <TKey> | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration [Obsolete] IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Util.AlreadySetException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AlreadySetException.html",
    "title": "Class AlreadySetException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AlreadySetException Thrown when Set(T) is called more than once. Inheritance System.Object System.Exception System.InvalidOperationException AlreadySetException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class AlreadySetException : InvalidOperationException Constructors | Improve this Doc View Source AlreadySetException() Initializes a new instance of AlreadySetException . Declaration public AlreadySetException() Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Attribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Attribute.html",
    "title": "Class Attribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Attribute Base class for Attributes that can be added to a AttributeSource . Attributes are used to add data in a dynamic, yet type-safe way to a source of usually streamed objects, e. g. a TokenStream . Inheritance System.Object Attribute NumericTokenStream.NumericTermAttribute CharTermAttribute FlagsAttribute KeywordAttribute OffsetAttribute PayloadAttribute PositionIncrementAttribute PositionLengthAttribute TypeAttribute BoostAttribute FuzzyTermsEnum.LevenshteinAutomataAttribute MaxNonCompetitiveBoostAttribute Implements IAttribute Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Attribute : IAttribute Methods | Improve this Doc View Source Clear() Clears the values in this Attribute and resets it to its default value. If this implementation implements more than one Attribute interface it clears all. Declaration public abstract void Clear() | Improve this Doc View Source Clone() Shallow clone. Subclasses must override this if they need to clone any members deeply, Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyTo(IAttribute) Copies the values from this Attribute into the passed-in target attribute. The target implementation must support all the IAttribute s this implementation supports. Declaration public abstract void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target | Improve this Doc View Source ReflectAsString(Boolean) This method returns the current attribute values as a string in the following format by calling the ReflectWith(IAttributeReflector) method: if prependAttClass =true: \"AttributeClass.Key=value,AttributeClass.Key=value\" if prependAttClass =false: \"key=value,key=value\" Declaration public string ReflectAsString(bool prependAttClass) Parameters Type Name Description System.Boolean prependAttClass Returns Type Description System.String See Also ReflectWith(IAttributeReflector) | Improve this Doc View Source ReflectWith(IAttributeReflector) This method is for introspection of attributes, it should simply add the key/values this attribute holds to the given IAttributeReflector . The default implementation calls Reflect(Type, String, Object) for all non-static fields from the implementing class, using the field name as key and the field value as value. The IAttribute class is also determined by Reflection. Please note that the default implementation can only handle single-Attribute implementations. Custom implementations look like this (e.g. for a combined attribute implementation): public void ReflectWith(IAttributeReflector reflector) { reflector.Reflect(typeof(ICharTermAttribute), \"term\", GetTerm()); reflector.Reflect(typeof(IPositionIncrementAttribute), \"positionIncrement\", GetPositionIncrement()); } If you implement this method, make sure that for each invocation, the same set of IAttribute interfaces and keys are passed to Reflect(Type, String, Object) in the same order, but possibly different values. So don't automatically exclude e.g. null properties! Declaration public virtual void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector See Also ReflectAsString(Boolean) | Improve this Doc View Source ToString() The default implementation of this method accesses all declared fields of this object and prints the values in the following syntax: public String ToString() { return \"start=\" + startOffset + \",end=\" + endOffset; } This method may be overridden by subclasses. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.AttributeFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.AttributeFactory.html",
    "title": "Class AttributeSource.AttributeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AttributeSource.AttributeFactory An AttributeSource.AttributeFactory creates instances of Attribute s. Inheritance System.Object AttributeSource.AttributeFactory Token.TokenAttributeFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class AttributeFactory Fields | Improve this Doc View Source DEFAULT_ATTRIBUTE_FACTORY This is the default factory that creates Attribute s using the System.Type of the supplied IAttribute interface by removing the I from the prefix. Declaration public static readonly AttributeSource.AttributeFactory DEFAULT_ATTRIBUTE_FACTORY Field Value Type Description AttributeSource.AttributeFactory Methods | Improve this Doc View Source CreateAttributeInstance<T>() returns an Attribute for the supplied IAttribute interface. Declaration public abstract Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.html",
    "title": "Class AttributeSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AttributeSource An AttributeSource contains a list of different Attribute s, and methods to add and get them. There can only be a single instance of an attribute in the same AttributeSource instance. This is ensured by passing in the actual type of the IAttribute to the AddAttribute<T>() , which then checks if an instance of that type is already present. If yes, it returns the instance, otherwise it creates a new instance and returns it. Inheritance System.Object AttributeSource TokenStream Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class AttributeSource Constructors | Improve this Doc View Source AttributeSource() An AttributeSource using the default attribute factory DEFAULT_ATTRIBUTE_FACTORY . Declaration public AttributeSource() | Improve this Doc View Source AttributeSource(AttributeSource) An AttributeSource that uses the same attributes as the supplied one. Declaration public AttributeSource(AttributeSource input) Parameters Type Name Description AttributeSource input | Improve this Doc View Source AttributeSource(AttributeSource.AttributeFactory) An AttributeSource using the supplied AttributeSource.AttributeFactory for creating new IAttribute instances. Declaration public AttributeSource(AttributeSource.AttributeFactory factory) Parameters Type Name Description AttributeSource.AttributeFactory factory Properties | Improve this Doc View Source HasAttributes Returns true , if this AttributeSource has any attributes Declaration public bool HasAttributes { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source AddAttribute<T>() The caller must pass in an interface type that extends IAttribute . This method first checks if an instance of the corresponding class is already in this AttributeSource and returns it. Otherwise a new instance is created, added to this AttributeSource and returned. Declaration public T AddAttribute<T>() where T : IAttribute Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source AddAttributeImpl(Attribute) Expert: Adds a custom Attribute instance with one or more IAttribute interfaces. Please note: It is not guaranteed, that att is added to the AttributeSource , because the provided attributes may already exist. You should always retrieve the wanted attributes using GetAttribute<T>() after adding with this method and cast to your System.Type . The recommended way to use custom implementations is using an AttributeSource.AttributeFactory . Declaration public void AddAttributeImpl(Attribute att) Parameters Type Name Description Attribute att | Improve this Doc View Source CaptureState() Captures the state of all Attribute s. The return value can be passed to RestoreState(AttributeSource.State) to restore the state of this or another AttributeSource . Declaration public virtual AttributeSource.State CaptureState() Returns Type Description AttributeSource.State | Improve this Doc View Source ClearAttributes() Resets all Attribute s in this AttributeSource by calling Clear() on each IAttribute implementation. Declaration public void ClearAttributes() | Improve this Doc View Source CloneAttributes() Performs a clone of all Attribute instances returned in a new AttributeSource instance. This method can be used to e.g. create another TokenStream with exactly the same attributes (using AttributeSource(AttributeSource) ). You can also use it as a (non-performant) replacement for CaptureState() , if you need to look into / modify the captured state. Declaration public AttributeSource CloneAttributes() Returns Type Description AttributeSource | Improve this Doc View Source CopyTo(AttributeSource) Copies the contents of this AttributeSource to the given target AttributeSource . The given instance has to provide all IAttribute s this instance contains. The actual attribute implementations must be identical in both AttributeSource instances; ideally both AttributeSource instances should use the same AttributeSource.AttributeFactory . You can use this method as a replacement for RestoreState(AttributeSource.State) , if you use CloneAttributes() instead of CaptureState() . Declaration public void CopyTo(AttributeSource target) Parameters Type Name Description AttributeSource target | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetAttribute<T>() The caller must pass in an interface type that extends IAttribute . Returns the instance of the corresponding Attribute contained in this AttributeSource Declaration public virtual T GetAttribute<T>() where T : IAttribute Returns Type Description T Type Parameters Name Description T Exceptions Type Condition System.ArgumentException if this AttributeSource does not contain the Attribute . It is recommended to always use AddAttribute<T>() even in consumers of TokenStream s, because you cannot know if a specific TokenStream really uses a specific Attribute . AddAttribute<T>() will automatically make the attribute available. If you want to only use the attribute, if it is available (to optimize consuming), use HasAttribute<T>() . | Improve this Doc View Source GetAttributeClassesEnumerator() Returns a new iterator that iterates the attribute classes in the same order they were added in. Declaration public IEnumerator<Type> GetAttributeClassesEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Type > | Improve this Doc View Source GetAttributeFactory() Returns the used AttributeSource.AttributeFactory . Declaration public AttributeSource.AttributeFactory GetAttributeFactory() Returns Type Description AttributeSource.AttributeFactory | Improve this Doc View Source GetAttributeImplsEnumerator() Returns a new iterator that iterates all unique IAttribute implementations. This iterator may contain less entries than GetAttributeClassesEnumerator() , if one instance implements more than one IAttribute interface. Declaration public IEnumerator<Attribute> GetAttributeImplsEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Attribute > | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source HasAttribute<T>() The caller must pass in an interface type that extends IAttribute . Returns true , if this AttributeSource contains the corrsponding Attribute . Declaration public bool HasAttribute<T>() where T : IAttribute Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source ReflectAsString(Boolean) This method returns the current attribute values as a string in the following format by calling the ReflectWith(IAttributeReflector) method: if prependAttClass =true: \"AttributeClass.Key=value,AttributeClass.Key=value\" if prependAttClass =false: \"key=value,key=value\" Declaration public string ReflectAsString(bool prependAttClass) Parameters Type Name Description System.Boolean prependAttClass Returns Type Description System.String See Also ReflectWith(IAttributeReflector) | Improve this Doc View Source ReflectWith(IAttributeReflector) This method is for introspection of attributes, it should simply add the key/values this AttributeSource holds to the given IAttributeReflector . This method iterates over all IAttribute implementations and calls the corresponding ReflectWith(IAttributeReflector) method. Declaration public void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector See Also ReflectWith ( IAttributeReflector ) | Improve this Doc View Source RestoreState(AttributeSource.State) Restores this state by copying the values of all attribute implementations that this state contains into the attributes implementations of the targetStream. The targetStream must contain a corresponding instance for each argument contained in this state (e.g. it is not possible to restore the state of an AttributeSource containing a ICharTermAttribute into a AttributeSource using a Token instance as implementation). Note that this method does not affect attributes of the targetStream that are not contained in this state. In other words, if for example the targetStream contains an IOffsetAttribute , but this state doesn't, then the value of the IOffsetAttribute remains unchanged. It might be desirable to reset its value to the default, in which case the caller should first call ClearAttributes() ( TokenStream.ClearAttributes() on the targetStream. Declaration public void RestoreState(AttributeSource.State state) Parameters Type Name Description AttributeSource.State state | Improve this Doc View Source ToString() Returns a string consisting of the class's simple name, the hex representation of the identity hash code, and the current reflection of all attributes. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also ReflectAsString(Boolean) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.FixedBitSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.FixedBitSetIterator.html",
    "title": "Class FixedBitSet.FixedBitSetIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedBitSet.FixedBitSetIterator A DocIdSetIterator which iterates over set bits in a FixedBitSet . Inheritance System.Object DocIdSetIterator FixedBitSet.FixedBitSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class FixedBitSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source FixedBitSetIterator(FixedBitSet) Creates an iterator over the given FixedBitSet . Declaration public FixedBitSetIterator(FixedBitSet bits) Parameters Type Name Description FixedBitSet bits | Improve this Doc View Source FixedBitSetIterator(Int64[], Int32, Int32) Creates an iterator over the given array of bits. Declaration public FixedBitSetIterator(long[] bits, int numBits, int wordLength) Parameters Type Name Description System.Int64 [] bits System.Int32 numBits System.Int32 wordLength Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FixedBitSet.html",
    "title": "Class FixedBitSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedBitSet BitSet of fixed length (numBits), backed by accessible ( GetBits() ) long[], accessed with an int index, implementing GetBits() and DocIdSet . If you need to manage more than 2.1B bits, use Int64BitSet . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet FixedBitSet Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class FixedBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source FixedBitSet(Int32) Declaration public FixedBitSet(int numBits) Parameters Type Name Description System.Int32 numBits | Improve this Doc View Source FixedBitSet(Int64[], Int32) Declaration public FixedBitSet(long[] storedBits, int numBits) Parameters Type Name Description System.Int64 [] storedBits System.Int32 numBits Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source And(DocIdSetIterator) Does in-place AND of the bits provided by the iterator. Declaration public void And(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source And(FixedBitSet) this = this AND other Declaration public void And(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source AndNot(DocIdSetIterator) Does in-place AND NOT of the bits provided by the iterator. Declaration public void AndNot(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source AndNot(FixedBitSet) this = this AND NOT other Declaration public void AndNot(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source AndNotCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of \"a and not b\" or \"intersection(a, not(b))\". Neither set is modified. Declaration public static long AndNotCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Bits2words(Int32) Returns the number of 64 bit words it would take to hold numBits Declaration public static int Bits2words(int numBits) Parameters Type Name Description System.Int32 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Returns number of set bits. NOTE: this visits every System.Int64 in the backing bits array, and the result is not internally cached! Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source Clear(Int32) Declaration public void Clear(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source Clear(Int32, Int32) Clears a range of bits. Declaration public void Clear(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public FixedBitSet Clone() Returns Type Description FixedBitSet | Improve this Doc View Source EnsureCapacity(FixedBitSet, Int32) If the given FixedBitSet is large enough to hold numBits , returns the given bits, otherwise returns a new FixedBitSet which can hold the requested number of bits. NOTE: the returned bitset reuses the underlying long[] of the given bits if possible. Also, calling Length on the returned bits may return a value greater than numBits . Declaration public static FixedBitSet EnsureCapacity(FixedBitSet bits, int numBits) Parameters Type Name Description FixedBitSet bits System.Int32 numBits Returns Type Description FixedBitSet | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Flip(Int32, Int32) Flips a range of bits Declaration public void Flip(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to flip | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndClear(Int32) Declaration public bool GetAndClear(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int32) Declaration public bool GetAndSet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetBits() Expert. Declaration public long[] GetBits() Returns Type Description System.Int64 [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source IntersectionCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of the intersection of the two sets. Neither set is modified. Declaration public static long IntersectionCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Intersects(FixedBitSet) Returns true if the sets have any elements in common Declaration public bool Intersects(FixedBitSet other) Parameters Type Name Description FixedBitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int32) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public int NextSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source Or(DocIdSetIterator) Does in-place OR of the bits provided by the iterator. Declaration public void Or(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source Or(FixedBitSet) this = this OR other Declaration public void Or(FixedBitSet other) Parameters Type Name Description FixedBitSet other | Improve this Doc View Source PrevSetBit(Int32) Returns the index of the last set bit before or on the index specified. -1 is returned if there are no more set bits. Declaration public int PrevSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source Set(Int32) Declaration public void Set(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source Set(Int32, Int32) Sets a range of bits Declaration public void Set(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to set | Improve this Doc View Source UnionCount(FixedBitSet, FixedBitSet) Returns the popcount or cardinality of the union of the two sets. Neither set is modified. Declaration public static long UnionCount(FixedBitSet a, FixedBitSet b) Parameters Type Name Description FixedBitSet a FixedBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Xor(DocIdSetIterator) Does in-place XOR of the bits provided by the iterator. Declaration public void Xor(DocIdSetIterator iter) Parameters Type Name Description DocIdSetIterator iter | Improve this Doc View Source Xor(FixedBitSet) this = this XOR other Declaration public void Xor(FixedBitSet other) Parameters Type Name Description FixedBitSet other Implements IBits Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder-1.html",
    "title": "Class Builder<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder<T> Builds a minimal FST (maps an Int32sRef term to an arbitrary output) from pre-sorted terms with outputs. The FST becomes an FSA if you use NoOutputs. The FST is written on-the-fly into a compact serialized format byte array, which can be saved to / loaded from a Directory or used directly for traversal. The FST is always finite (no cycles). NOTE: The algorithm is described at http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698 The parameterized type is the output type. See the subclasses of Outputs<T> . FSTs larger than 2.1GB are now possible (as of Lucene 4.2). FSTs containing more than 2.1B nodes are also now possible, however they cannot be packed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Builder Builder<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Builder<T> : Builder Type Parameters Name Description T Constructors | Improve this Doc View Source Builder(FST.INPUT_TYPE, Outputs<T>) Instantiates an FST/FSA builder without any pruning. A shortcut to Builder(FST.INPUT_TYPE, Int32, Int32, Boolean, Boolean, Int32, Outputs<T>, Builder.FreezeTail<T>, Boolean, Single, Boolean, Int32) with pruning options turned off. Declaration public Builder(FST.INPUT_TYPE inputType, Outputs<T> outputs) Parameters Type Name Description FST.INPUT_TYPE inputType Outputs <T> outputs | Improve this Doc View Source Builder(FST.INPUT_TYPE, Int32, Int32, Boolean, Boolean, Int32, Outputs<T>, Builder.FreezeTail<T>, Boolean, Single, Boolean, Int32) Instantiates an FST/FSA builder with all the possible tuning and construction tweaks. Read parameter documentation carefully. Declaration public Builder(FST.INPUT_TYPE inputType, int minSuffixCount1, int minSuffixCount2, bool doShareSuffix, bool doShareNonSingletonNodes, int shareMaxTailLength, Outputs<T> outputs, Builder.FreezeTail<T> freezeTail, bool doPackFST, float acceptableOverheadRatio, bool allowArrayArcs, int bytesPageBits) Parameters Type Name Description FST.INPUT_TYPE inputType The input type (transition labels). Can be anything from FST.INPUT_TYPE enumeration. Shorter types will consume less memory. Strings (character sequences) are represented as BYTE4 (full unicode codepoints). System.Int32 minSuffixCount1 If pruning the input graph during construction, this threshold is used for telling if a node is kept or pruned. If transition_count(node) >= minSuffixCount1, the node is kept. System.Int32 minSuffixCount2 (Note: only Mike McCandless knows what this one is really doing...) System.Boolean doShareSuffix If true , the shared suffixes will be compacted into unique paths. this requires an additional RAM-intensive hash map for lookups in memory. Setting this parameter to false creates a single suffix path for all input sequences. this will result in a larger FST, but requires substantially less memory and CPU during building. System.Boolean doShareNonSingletonNodes Only used if doShareSuffix is true . Set this to true to ensure FST is fully minimal, at cost of more CPU and more RAM during building. System.Int32 shareMaxTailLength Only used if doShareSuffix is true . Set this to System.Int32.MaxValue to ensure FST is fully minimal, at cost of more CPU and more RAM during building. Outputs <T> outputs The output type for each input sequence. Applies only if building an FST. For FSA, use Singleton and NoOutput as the singleton output object. Builder.FreezeTail <T> freezeTail System.Boolean doPackFST Pass true to create a packed FST. System.Single acceptableOverheadRatio How to trade speed for space when building the FST. this option is only relevant when doPackFST is true. GetMutable(Int32, Int32, Single) System.Boolean allowArrayArcs Pass false to disable the array arc optimization while building the FST; this will make the resulting FST smaller but slower to traverse. System.Int32 bytesPageBits How many bits wide to make each byte[] block in the Lucene.Net.Util.Fst.BytesStore ; if you know the FST will be large then make this larger. For example 15 bits = 32768 byte pages. Properties | Improve this Doc View Source MappedStateCount Declaration public virtual long MappedStateCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TermCount Declaration public virtual long TermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotStateCount Declaration public virtual long TotStateCount { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(Int32sRef, T) It's OK to add the same input twice in a row with different outputs, as long as outputs impls the merge method. Note that input is fully consumed after this method is returned (so caller is free to reuse), but output is not. So if your outputs are changeable (eg ByteSequenceOutputs or Int32SequenceOutputs ) then you cannot reuse across calls. Declaration public virtual void Add(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output | Improve this Doc View Source Finish() Returns final FST. NOTE: this will return null if nothing is accepted by the FST. Declaration public virtual FST<T> Finish() Returns Type Description FST <T> | Improve this Doc View Source GetFstSizeInBytes() Declaration public virtual long GetFstSizeInBytes() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.CompiledNode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.CompiledNode.html",
    "title": "Class Builder.CompiledNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder.CompiledNode Inheritance System.Object Builder.CompiledNode Implements Builder.INode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class CompiledNode : Builder.INode Properties | Improve this Doc View Source IsCompiled Declaration public bool IsCompiled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Node Declaration public long Node { get; set; } Property Value Type Description System.Int64 Implements Builder.INode Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.UnCompiledNode-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.UnCompiledNode-1.html",
    "title": "Class Builder.UnCompiledNode<S> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder.UnCompiledNode<S> Expert: holds a pending (seen but not yet serialized) Node. Inheritance System.Object Builder.UnCompiledNode<S> Implements Builder.INode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class UnCompiledNode<S> : Builder.INode Type Parameters Name Description S Constructors | Improve this Doc View Source UnCompiledNode(Builder<S>, Int32) Declaration public UnCompiledNode(Builder<S> owner, int depth) Parameters Type Name Description Builder <S> owner System.Int32 depth The node's depth starting from the automaton root. Needed for LUCENE-2934 (node expansion based on conditions other than the fanout size). Properties | Improve this Doc View Source Arcs Declaration public Builder.Arc<S>[] Arcs { get; set; } Property Value Type Description Builder.Arc <S>[] | Improve this Doc View Source Depth this node's depth, starting from the automaton root. Declaration public int Depth { get; } Property Value Type Description System.Int32 | Improve this Doc View Source InputCount Declaration public long InputCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IsCompiled Declaration public bool IsCompiled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsFinal Declaration public bool IsFinal { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NumArcs Declaration public int NumArcs { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Output Declaration public S Output { get; set; } Property Value Type Description S Methods | Improve this Doc View Source AddArc(Int32, Builder.INode) Declaration public void AddArc(int label, Builder.INode target) Parameters Type Name Description System.Int32 label Builder.INode target | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source DeleteLast(Int32, Builder.INode) Declaration public void DeleteLast(int label, Builder.INode target) Parameters Type Name Description System.Int32 label Builder.INode target | Improve this Doc View Source GetLastOutput(Int32) Declaration public S GetLastOutput(int labelToMatch) Parameters Type Name Description System.Int32 labelToMatch Returns Type Description S | Improve this Doc View Source PrependOutput(S) Declaration public void PrependOutput(S outputPrefix) Parameters Type Name Description S outputPrefix | Improve this Doc View Source ReplaceLast(Int32, Builder.INode, S, Boolean) Declaration public void ReplaceLast(int labelToMatch, Builder.INode target, S nextFinalOutput, bool isFinal) Parameters Type Name Description System.Int32 labelToMatch Builder.INode target S nextFinalOutput System.Boolean isFinal | Improve this Doc View Source SetLastOutput(Int32, S) Declaration public void SetLastOutput(int labelToMatch, S newOutput) Parameters Type Name Description System.Int32 labelToMatch S newOutput Implements Builder.INode Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDocIdSet.html",
    "title": "Class EliasFanoDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EliasFanoDocIdSet A DocIdSet in Elias-Fano encoding. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet EliasFanoDocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoDocIdSet : DocIdSet Constructors | Improve this Doc View Source EliasFanoDocIdSet(Int32, Int32) Construct an EliasFanoDocIdSet. For efficient encoding, the parameters should be chosen as low as possible. Declaration public EliasFanoDocIdSet(int numValues, int upperBound) Parameters Type Name Description System.Int32 numValues At least the number of document ids that will be encoded. System.Int32 upperBound At least the highest document id that will be encoded. Properties | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean true Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source EncodeFromDisi(DocIdSetIterator) Encode the document ids from a DocIdSetIterator. Declaration public virtual void EncodeFromDisi(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi This DocIdSetIterator should provide document ids that are consistent with numValues and upperBound as provided to the constructor. | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetIterator() Provides a DocIdSetIterator to access encoded document ids. Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source SufficientlySmallerThanBitSet(Int64, Int64) Provide an indication that is better to use an EliasFanoDocIdSet than a FixedBitSet to encode document identifiers. Declaration public static bool SufficientlySmallerThanBitSet(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues The number of document identifiers that is to be encoded. Should be non negative. System.Int64 upperBound The maximum possible value for a document identifier. Should be at least numValues . Returns Type Description System.Boolean See SufficientlySmallerThanBitSet(Int64, Int64) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.GrowableWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.GrowableWriter.html",
    "title": "Class GrowableWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GrowableWriter Implements PackedInt32s.Mutable , but grows the bit count of the underlying packed ints on-demand. Beware that this class will accept to set negative values but in order to do this, it will grow the number of bits per value to 64. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable GrowableWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class GrowableWriter : PackedInt32s.Mutable Constructors | Improve this Doc View Source GrowableWriter(Int32, Int32, Single) Declaration public GrowableWriter(int startBitsPerValue, int valueCount, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 startBitsPerValue the initial number of bits per value, may grow depending on the data System.Int32 valueCount the number of values System.Single acceptableOverheadRatio an acceptable overhead ratio Properties | Improve this Doc View Source BitsPerValue Declaration public override int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count | Improve this Doc View Source HasArray Declaration public override bool HasArray { get; } Property Value Type Description System.Boolean Overrides PackedInt32s.Reader.HasArray | Improve this Doc View Source Mutable Declaration public virtual PackedInt32s.Mutable Mutable { get; } Property Value Type Description PackedInt32s.Mutable Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides PackedInt32s.Mutable.Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Declaration public override void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val Overrides PackedInt32s.Mutable.Fill(Int32, Int32, Int64) | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source GetArray() Declaration public override object GetArray() Returns Type Description System.Object Overrides PackedInt32s.Reader.GetArray() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed() | Improve this Doc View Source Resize(Int32) Declaration public virtual GrowableWriter Resize(int newSize) Parameters Type Name Description System.Int32 newSize Returns Type Description GrowableWriter | Improve this Doc View Source Save(DataOutput) Declaration public override void Save(DataOutput out) Parameters Type Name Description DataOutput out Overrides PackedInt32s.Mutable.Save(DataOutput) | Improve this Doc View Source Set(Int32, Int64) Declaration public override void Set(int index, long value) Parameters Type Name Description System.Int32 index System.Int64 value Overrides PackedInt32s.Mutable.Set(Int32, Int64) | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Declaration public override int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicAppendingInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicAppendingInt64Buffer.html",
    "title": "Class MonotonicAppendingInt64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MonotonicAppendingInt64Buffer Utility class to buffer signed longs in memory, which is optimized for the case where the sequence is monotonic, although it can encode any sequence of arbitrary longs. It only supports appending. NOTE: This was MonotonicAppendingLongBuffer in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer MonotonicAppendingInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicAppendingInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source MonotonicAppendingInt64Buffer() Create an MonotonicAppendingInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public MonotonicAppendingInt64Buffer() | Improve this Doc View Source MonotonicAppendingInt64Buffer(Int32, Int32, Single) Declaration public MonotonicAppendingInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source MonotonicAppendingInt64Buffer(Single) Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public MonotonicAppendingInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Methods | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides AbstractAppendingInt64Buffer.RamBytesUsed() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedReader.html",
    "title": "Class MonotonicBlockPackedReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MonotonicBlockPackedReader Provides random access to a stream written with MonotonicBlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values MonotonicBlockPackedReader Inherited Members Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicBlockPackedReader : Int64Values Constructors | Improve this Doc View Source MonotonicBlockPackedReader(IndexInput, Int32, Int32, Int64, Boolean) Sole constructor. Declaration public MonotonicBlockPackedReader(IndexInput in, int packedIntsVersion, int blockSize, long valueCount, bool direct) Parameters Type Name Description IndexInput in System.Int32 packedIntsVersion System.Int32 blockSize System.Int64 valueCount System.Boolean direct Properties | Improve this Doc View Source Count Returns the number of values. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Get(Int64) Declaration public override long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source RamBytesUsed() Returns the approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.MonotonicBlockPackedWriter.html",
    "title": "Class MonotonicBlockPackedWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MonotonicBlockPackedWriter A writer for large monotonically increasing sequences of positive System.Int64 s. The sequence is divided into fixed-size blocks and for each block, values are modeled after a linear function f: x → A × x + B. The block encodes deltas from the expected values computed from this function using as few bits as possible. Each block has an overhead between 6 and 14 bytes. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <B, A, BitsPerValue> B: the B from f: x → A × x + B using a variable-length System.Int64 ( WriteVInt64(Int64) ) A: the A from f: x → A × x + B encoded using SingleToInt32Bits(Single) on 4 bytes ( WriteVInt32(Int32) ) BitsPerValue: a variable-length System.Int32 ( WriteVInt32(Int32) ) Ints: if BitsPerValue is 0 , then there is nothing to read and all values perfectly match the result of the function. Otherwise, these are the zigzag-encoded packed ( PackedInt32s ) deltas from the expected value (computed from the function) using exaclty BitsPerValue bits per value This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractBlockPackedWriter MonotonicBlockPackedWriter Inherited Members AbstractBlockPackedWriter.m_out AbstractBlockPackedWriter.m_values AbstractBlockPackedWriter.m_blocks AbstractBlockPackedWriter.m_off AbstractBlockPackedWriter.m_ord AbstractBlockPackedWriter.m_finished AbstractBlockPackedWriter.Reset(DataOutput) AbstractBlockPackedWriter.Finish() AbstractBlockPackedWriter.Ord AbstractBlockPackedWriter.WriteValues(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class MonotonicBlockPackedWriter : AbstractBlockPackedWriter Constructors | Improve this Doc View Source MonotonicBlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public MonotonicBlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize The number of values of a single block, must be a power of 2. Methods | Improve this Doc View Source Add(Int64) Declaration public override void Add(long l) Parameters Type Name Description System.Int64 l Overrides AbstractBlockPackedWriter.Add(Int64) | Improve this Doc View Source Flush() Declaration protected override void Flush() Overrides AbstractBlockPackedWriter.Flush() Extension Methods Number.IsNumber(Object) See Also MonotonicBlockPackedReader"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.Packed64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.Packed64.html",
    "title": "Class Packed64 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Packed64 Space optimized random access capable array of values with a fixed number of bits/value. Values are packed contiguously. The implementation strives to perform af fast as possible under the constraint of contiguous bits, by avoiding expensive operations. This comes at the cost of code clarity. Technical details: this implementation is a refinement of a non-branching version. The non-branching get and set methods meant that 2 or 4 atomics in the underlying array were always accessed, even for the cases where only 1 or 2 were needed. Even with caching, this had a detrimental effect on performance. Related to this issue, the old implementation used lookup tables for shifts and masks, which also proved to be a bit slower than calculating the shifts and masks on the fly. See https://issues.apache.org/jira/browse/LUCENE-4062 for details. Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.MutableImpl Packed64 Inherited Members PackedInt32s.MutableImpl.m_valueCount PackedInt32s.MutableImpl.m_bitsPerValue PackedInt32s.MutableImpl.BitsPerValue PackedInt32s.MutableImpl.Count PackedInt32s.Mutable.Save(DataOutput) PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class Packed64 : PackedInt32s.MutableImpl Constructors | Improve this Doc View Source Packed64(Int32, DataInput, Int32, Int32) Creates an array with content retrieved from the given DataInput . Declaration public Packed64(int packedIntsVersion, DataInput in, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion DataInput in A DataInput , positioned at the start of Packed64-content. System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. Exceptions Type Condition System.IO.IOException If the values for the backing array could not be retrieved. | Improve this Doc View Source Packed64(Int32, Int32) Creates an array with the internal structures adjusted for the given limits and initialized to 0. Declaration public Packed64(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides PackedInt32s.Mutable.Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Declaration public override void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val Overrides PackedInt32s.Mutable.Fill(Int32, Int32, Int64) | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index The position of the value. Returns Type Description System.Int64 The value at the given index. Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed() | Improve this Doc View Source Set(Int32, Int64) Declaration public override void Set(int index, long value) Parameters Type Name Description System.Int32 index System.Int64 value Overrides PackedInt32s.Mutable.Set(Int32, Int64) | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Declaration public override int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Mutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Mutable.html",
    "title": "Class PackedInt32s.Mutable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Mutable A packed integer array that can be modified. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable GrowableWriter PackedInt32s.MutableImpl Inherited Members PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) PackedInt32s.Reader.BitsPerValue PackedInt32s.Reader.Count PackedInt32s.Reader.RamBytesUsed() PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray NumericDocValues.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Mutable : PackedInt32s.Reader Methods | Improve this Doc View Source Clear() Sets all values to 0. Declaration public virtual void Clear() | Improve this Doc View Source Fill(Int32, Int32, Int64) Fill the mutable from fromIndex (inclusive) to toIndex (exclusive) with val . Declaration public virtual void Fill(int fromIndex, int toIndex, long val) Parameters Type Name Description System.Int32 fromIndex System.Int32 toIndex System.Int64 val | Improve this Doc View Source Save(DataOutput) Save this mutable into out . Instantiating a reader from the generated data will return a reader with the same number of bits per value. Declaration public virtual void Save(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source Set(Int32, Int64) Set the value at the given index in the array. Declaration public abstract void Set(int index, long value) Parameters Type Name Description System.Int32 index Where the value should be positioned. System.Int64 value A value conforming to the constraints set by the array. | Improve this Doc View Source Set(Int32, Int64[], Int32, Int32) Bulk set: set at least one and at most len longs starting at off in arr into this mutable, starting at index . Returns the actual number of values that have been set. Declaration public virtual int Set(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilter.html",
    "title": "Class HyphenationCompoundWordTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HyphenationCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a hyphenation grammar and a word dictionary to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase HyphenationCompoundWordTokenFilter Implements System.IDisposable Inherited Members CompoundWordTokenFilterBase.DEFAULT_MIN_WORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MIN_SUBWORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MAX_SUBWORD_SIZE CompoundWordTokenFilterBase.m_matchVersion CompoundWordTokenFilterBase.m_dictionary CompoundWordTokenFilterBase.m_tokens CompoundWordTokenFilterBase.m_minWordSize CompoundWordTokenFilterBase.m_minSubwordSize CompoundWordTokenFilterBase.m_maxSubwordSize CompoundWordTokenFilterBase.m_onlyLongestMatch CompoundWordTokenFilterBase.m_termAtt CompoundWordTokenFilterBase.m_offsetAtt CompoundWordTokenFilterBase.IncrementToken() CompoundWordTokenFilterBase.Reset() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenationCompoundWordTokenFilter : CompoundWordTokenFilterBase, IDisposable Constructors | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree) Create a HyphenationCompoundWordTokenFilter with no dictionary. Calls HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, Int32, Int32, Int32) Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator) Parameters Type Name Description LuceneVersion matchVersion TokenStream input HyphenationTree hyphenator | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet) Creates a new HyphenationCompoundWordTokenFilter instance. Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process HyphenationTree hyphenator the hyphenation pattern tree to use for hyphenation CharArraySet dictionary the word dictionary to match against. | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet, Int32, Int32, Int32, Boolean) Creates a new HyphenationCompoundWordTokenFilter instance. Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process HyphenationTree hyphenator the hyphenation pattern tree to use for hyphenation CharArraySet dictionary the word dictionary to match against. System.Int32 minWordSize only words longer than this get processed System.Int32 minSubwordSize only subwords longer than this get to the output stream System.Int32 maxSubwordSize only subwords shorter than this get to the output stream System.Boolean onlyLongestMatch Add only the longest matching subword to the stream | Improve this Doc View Source HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, Int32, Int32, Int32) Create a HyphenationCompoundWordTokenFilter with no dictionary. Calls HyphenationCompoundWordTokenFilter(LuceneVersion, TokenStream, HyphenationTree, CharArraySet, Int32, Int32, Int32, Boolean) Declaration public HyphenationCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, HyphenationTree hyphenator, int minWordSize, int minSubwordSize, int maxSubwordSize) Parameters Type Name Description LuceneVersion matchVersion TokenStream input HyphenationTree hyphenator System.Int32 minWordSize System.Int32 minSubwordSize System.Int32 maxSubwordSize Methods | Improve this Doc View Source Decompose() Declaration protected override void Decompose() Overrides CompoundWordTokenFilterBase.Decompose() | Improve this Doc View Source GetHyphenationTree(FileInfo) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(FileInfo hyphenationFile) Parameters Type Name Description System.IO.FileInfo hyphenationFile the file of the XML grammar to load Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(FileInfo, Encoding) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(FileInfo hyphenationFile, Encoding encoding) Parameters Type Name Description System.IO.FileInfo hyphenationFile the file of the XML grammar to load System.Text.Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(Stream) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(Stream hyphenationSource) Parameters Type Name Description System.IO.Stream hyphenationSource the InputSource pointing to the XML grammar Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(Stream, Encoding) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(Stream hyphenationSource, Encoding encoding) Parameters Type Name Description System.IO.Stream hyphenationSource the InputSource pointing to the XML grammar System.Text.Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(String) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(string hyphenationFilename) Parameters Type Name Description System.String hyphenationFilename the filename of the XML grammar to load Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetHyphenationTree(String, Encoding) Create a hyphenator tree Declaration public static HyphenationTree GetHyphenationTree(string hyphenationFilename, Encoding encoding) Parameters Type Name Description System.String hyphenationFilename the filename of the XML grammar to load System.Text.Encoding encoding The character encoding to use Returns Type Description HyphenationTree An object representing the hyphenation patterns Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilterFactory.html",
    "title": "Class HyphenationCompoundWordTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HyphenationCompoundWordTokenFilterFactory Factory for HyphenationCompoundWordTokenFilter . This factory accepts the following parameters: hyphenator (mandatory): path to the FOP xml hyphenation pattern. See http://offo.sourceforge.net/hyphenation/ . encoding (optional): encoding of the xml hyphenation file. defaults to UTF-8. dictionary (optional): dictionary of words. defaults to no dictionary. minWordSize (optional): minimal word length that gets decomposed. defaults to 5. minSubwordSize (optional): minimum length of subwords. defaults to 2. maxSubwordSize (optional): maximum length of subwords. defaults to 15. onlyLongestMatch (optional): if true, adds only the longest matching subword to the stream. defaults to false. <fieldType name=\"text_hyphncomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenationCompoundWordTokenFilterFactory\" hyphenator=\"hyphenator.xml\" encoding=\"UTF-8\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HyphenationCompoundWordTokenFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenationCompoundWordTokenFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source HyphenationCompoundWordTokenFilterFactory(IDictionary<String, String>) Creates a new HyphenationCompoundWordTokenFilterFactory Declaration public HyphenationCompoundWordTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware See Also HyphenationCompoundWordTokenFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.KeywordAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.KeywordAnalyzer.html",
    "title": "Class KeywordAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordAnalyzer \"Tokenizes\" the entire stream as a single token. This is useful for data like zip codes, ids, and some product names. Inheritance System.Object Analyzer KeywordAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source KeywordAnalyzer() Declaration public KeywordAnalyzer() Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.KeywordTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.KeywordTokenizer.html",
    "title": "Class KeywordTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordTokenizer Emits the entire input as a single token. Inheritance System.Object AttributeSource TokenStream Tokenizer KeywordTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source KeywordTokenizer(AttributeSource.AttributeFactory, TextReader, Int32) Declaration public KeywordTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Int32 bufferSize | Improve this Doc View Source KeywordTokenizer(TextReader) Declaration public KeywordTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source KeywordTokenizer(TextReader, Int32) Declaration public KeywordTokenizer(TextReader input, int bufferSize) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize Fields | Improve this Doc View Source DEFAULT_BUFFER_SIZE Default read buffer size Declaration public const int DEFAULT_BUFFER_SIZE = 256 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.KeywordTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.KeywordTokenizerFactory.html",
    "title": "Class KeywordTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordTokenizerFactory Factory for KeywordTokenizer . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory KeywordTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KeywordTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source KeywordTokenizerFactory(IDictionary<String, String>) Creates a new KeywordTokenizerFactory Declaration public KeywordTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LetterTokenizer.html",
    "title": "Class LetterTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LetterTokenizer A LetterTokenizer is a tokenizer that divides text at non-letters. That's to say, it defines tokens as maximal strings of adjacent letters, as defined by System.Char.IsLetter(System.Char) predicate. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LetterTokenizer : As of 3.1, CharTokenizer uses an System.Int32 based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer ArabicLetterTokenizer LowerCaseTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LetterTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source LetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new LetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public LetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source LetterTokenizer(LuceneVersion, TextReader) Construct a new LetterTokenizer . Declaration public LetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match. System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which satisfy IsLetter(Int32) . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LetterTokenizerFactory.html",
    "title": "Class LetterTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LetterTokenizerFactory Factory for LetterTokenizer . <fieldType name=\"text_letter\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LetterTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory LetterTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LetterTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source LetterTokenizerFactory(IDictionary<String, String>) Creates a new LetterTokenizerFactory Declaration public LetterTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LowerCaseFilter.html",
    "title": "Class LowerCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LowerCaseFilter Normalizes token text to lower case. You must specify the required LuceneVersion compatibility when creating LowerCaseFilter: As of 3.1, supplementary characters are properly lowercased. Inheritance System.Object AttributeSource TokenStream TokenFilter LowerCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LowerCaseFilter(LuceneVersion, TokenStream) Create a new LowerCaseFilter , that normalizes token text to lower case. Declaration public LowerCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LowerCaseFilterFactory.html",
    "title": "Class LowerCaseFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LowerCaseFilterFactory Factory for LowerCaseFilter . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LowerCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LowerCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source LowerCaseFilterFactory(IDictionary<String, String>) Creates a new LowerCaseFilterFactory Declaration public LowerCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LowerCaseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LowerCaseTokenizer.html",
    "title": "Class LowerCaseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LowerCaseTokenizer LowerCaseTokenizer performs the function of LetterTokenizer and LowerCaseFilter together. It divides text at non-letters and converts them to lower case. While it is functionally equivalent to the combination of LetterTokenizer and LowerCaseFilter , there is a performance advantage to doing the two tasks at once, hence this (redundant) implementation. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LowerCaseTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer LowerCaseTokenizer Implements System.IDisposable Inherited Members LetterTokenizer.IsTokenChar(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LowerCaseTokenizer : LetterTokenizer, IDisposable Constructors | Improve this Doc View Source LowerCaseTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new LowerCaseTokenizer using a given AttributeSource.AttributeFactory . Declaration public LowerCaseTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source LowerCaseTokenizer(LuceneVersion, TextReader) Construct a new LowerCaseTokenizer . Declaration public LowerCaseTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source Normalize(Int32) Converts char to lower case ToLower(Int32) . Declaration protected override int Normalize(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Int32 Overrides CharTokenizer.Normalize(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LowerCaseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.LowerCaseTokenizerFactory.html",
    "title": "Class LowerCaseTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LowerCaseTokenizerFactory Factory for LowerCaseTokenizer . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LowerCaseTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory LowerCaseTokenizerFactory Implements IMultiTermAwareComponent Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LowerCaseTokenizerFactory : TokenizerFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source LowerCaseTokenizerFactory(IDictionary<String, String>) Creates a new LowerCaseTokenizerFactory Declaration public LowerCaseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.SimpleAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.SimpleAnalyzer.html",
    "title": "Class SimpleAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleAnalyzer An Analyzer that filters LetterTokenizer with LowerCaseFilter You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, LowerCaseTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object Analyzer SimpleAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SimpleAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source SimpleAnalyzer(LuceneVersion) Creates a new SimpleAnalyzer Declaration public SimpleAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.StopAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.StopAnalyzer.html",
    "title": "Class StopAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StopAnalyzer Filters LetterTokenizer with LowerCaseFilter and StopFilter . You must specify the required LuceneVersion compatibility when creating StopAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, position increments are preserved Inheritance System.Object Analyzer StopwordAnalyzerBase StopAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StopAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source StopAnalyzer(LuceneVersion) Builds an analyzer which removes words in ENGLISH_STOP_WORDS_SET . Declaration public StopAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion | Improve this Doc View Source StopAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the stop words from the given set. Declaration public StopAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion CharArraySet stopWords Set of stop words | Improve this Doc View Source StopAnalyzer(LuceneVersion, FileInfo) Builds an analyzer with the stop words from the given file. Declaration public StopAnalyzer(LuceneVersion matchVersion, FileInfo stopwordsFile) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion System.IO.FileInfo stopwordsFile File to load stop words from See Also GetWordSet(TextReader, LuceneVersion) | Improve this Doc View Source StopAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public StopAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion System.IO.TextReader stopwords System.IO.TextReader to load stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source ENGLISH_STOP_WORDS_SET An unmodifiable set containing some common English words that are not usually useful for searching. Declaration public static readonly CharArraySet ENGLISH_STOP_WORDS_SET Field Value Type Description CharArraySet Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a LowerCaseTokenizer filtered with StopFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.StopFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.StopFilter.html",
    "title": "Class StopFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StopFilter Removes stop words from a token stream. You must specify the required LuceneVersion compatibility when creating StopFilter : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords and position increments are preserved Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter StopFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StopFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source StopFilter(LuceneVersion, TokenStream, CharArraySet) Constructs a filter which removes words from the input TokenStream that are named in the CharArraySet . Declaration public StopFilter(LuceneVersion matchVersion, TokenStream in, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the stop set if Version > 3.0. See LuceneVersion > for details. TokenStream in Input TokenStream CharArraySet stopWords A CharArraySet representing the stopwords. See Also MakeStopSet(LuceneVersion, String[]) Methods | Improve this Doc View Source Accept() Returns the next input Token whose Term is not a stop word. Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() | Improve this Doc View Source MakeStopSet(LuceneVersion, String[]) Builds a CharArraySet from an array of stop words, appropriate for passing into the StopFilter constructor. This permits this stopWords construction to be cached once when an Analyzer is constructed. Declaration public static CharArraySet MakeStopSet(LuceneVersion matchVersion, params string[] stopWords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.String [] stopWords An array of stopwords Returns Type Description CharArraySet See Also MakeStopSet(LuceneVersion, String[], Boolean) | Improve this Doc View Source MakeStopSet(LuceneVersion, String[], Boolean) Creates a stopword set from the given stopword array. Declaration public static CharArraySet MakeStopSet(LuceneVersion matchVersion, string[] stopWords, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.String [] stopWords An array of stopwords System.Boolean ignoreCase If true, all words are lower cased first. Returns Type Description CharArraySet a Set ( CharArraySet ) containing the words | Improve this Doc View Source MakeStopSet<T1>(LuceneVersion, IList<T1>) Builds a CharArraySet from an array of stop words, appropriate for passing into the StopFilter constructor. This permits this stopWords construction to be cached once when an Analyzer is constructed. Declaration public static CharArraySet MakeStopSet<T1>(LuceneVersion matchVersion, IList<T1> stopWords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.Collections.Generic.IList <T1> stopWords A List of System.String s or char[] or any other ToString()-able list representing the stopwords Returns Type Description CharArraySet A Set ( CharArraySet ) containing the words Type Parameters Name Description T1 See Also MakeStopSet(LuceneVersion, String[], Boolean) | Improve this Doc View Source MakeStopSet<T1>(LuceneVersion, IList<T1>, Boolean) Creates a stopword set from the given stopword list. Declaration public static CharArraySet MakeStopSet<T1>(LuceneVersion matchVersion, IList<T1> stopWords, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to enable correct Unicode 4.0 behavior in the returned set if Version > 3.0 System.Collections.Generic.IList <T1> stopWords A List of System.String s or char[] or any other ToString()-able list representing the stopwords System.Boolean ignoreCase if true, all words are lower cased first Returns Type Description CharArraySet A Set ( CharArraySet ) containing the words Type Parameters Name Description T1 Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue-1.html",
    "title": "Class FieldValueHitQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldValueHitQueue<T> Expert: A hit queue for sorting by hits by terms in more than one field. Uses FieldCache.DEFAULT for maintaining internal term lookup tables. @lucene.experimental @since 2.9 Inheritance System.Object PriorityQueue <T> FieldValueHitQueue<T> Inherited Members PriorityQueue<T>.LessThan(T, T) PriorityQueue<T>.GetSentinelObject() PriorityQueue<T>.Add(T) PriorityQueue<T>.InsertWithOverflow(T) PriorityQueue<T>.Top PriorityQueue<T>.Pop() PriorityQueue<T>.UpdateTop() PriorityQueue<T>.Count PriorityQueue<T>.Clear() PriorityQueue<T>.HeapArray System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldValueHitQueue<T> : PriorityQueue<T> where T : FieldValueHitQueue.Entry Type Parameters Name Description T Fields | Improve this Doc View Source m_comparers Declaration protected readonly FieldComparer[] m_comparers Field Value Type Description FieldComparer [] | Improve this Doc View Source m_fields Stores the sort criteria being used. Declaration protected readonly SortField[] m_fields Field Value Type Description SortField [] | Improve this Doc View Source m_firstComparer Declaration protected FieldComparer m_firstComparer Field Value Type Description FieldComparer | Improve this Doc View Source m_reverseMul Declaration protected readonly int[] m_reverseMul Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Comparers Declaration public virtual FieldComparer[] Comparers { get; } Property Value Type Description FieldComparer [] | Improve this Doc View Source ReverseMul Declaration public virtual int[] ReverseMul { get; } Property Value Type Description System.Int32 [] Methods | Improve this Doc View Source SetComparer(Int32, FieldComparer) Declaration public virtual void SetComparer(int pos, FieldComparer comparer) Parameters Type Name Description System.Int32 pos FieldComparer comparer Extension Methods Number.IsNumber(Object) See Also Search(Query, Filter, Int32, Sort) FieldCache"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.Entry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.Entry.html",
    "title": "Class FieldValueHitQueue.Entry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldValueHitQueue.Entry Inheritance System.Object ScoreDoc FieldValueHitQueue.Entry Inherited Members ScoreDoc.Score ScoreDoc.Doc ScoreDoc.ShardIndex System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class Entry : ScoreDoc Constructors | Improve this Doc View Source Entry(Int32, Int32, Single) Declaration public Entry(int slot, int doc, float score) Parameters Type Name Description System.Int32 slot System.Int32 doc System.Single score Properties | Improve this Doc View Source Slot Declaration public int Slot { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides ScoreDoc.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueHitQueue.html",
    "title": "Class FieldValueHitQueue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldValueHitQueue Inheritance System.Object FieldValueHitQueue Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldValueHitQueue Methods | Improve this Doc View Source Create<T>(SortField[], Int32) Creates a hit queue sorted by the given list of fields. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static FieldValueHitQueue<T> Create<T>(SortField[] fields, int size) where T : FieldValueHitQueue.Entry Parameters Type Name Description SortField [] fields SortField array we are sorting by in priority order (highest priority first); cannot be null or empty System.Int32 size The number of hits to retain. Must be greater than zero. Returns Type Description FieldValueHitQueue <T> Type Parameters Name Description T Exceptions Type Condition System.IO.IOException If there is a low-level IO error"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSet.html",
    "title": "Class FilteredDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredDocIdSet Abstract decorator class for a DocIdSet implementation that provides on-demand filtering/validation mechanism on a given DocIdSet . Technically, this same functionality could be achieved with ChainedFilter (under queries/), however the benefit of this class is it never materializes the full bitset for the filter. Instead, the Match(Int32) method is invoked on-demand, per docID visited during searching. If you know few docIDs will be visited, and the logic behind Match(Int32) is relatively costly, this may be a better way to filter than ChainedFilter. Inheritance System.Object DocIdSet FilteredDocIdSet BitsFilteredDocIdSet Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilteredDocIdSet : DocIdSet Constructors | Improve this Doc View Source FilteredDocIdSet(DocIdSet) Constructor. Declaration public FilteredDocIdSet(DocIdSet innerSet) Parameters Type Name Description DocIdSet innerSet Underlying DocIdSet Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable if the inner set is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source GetIterator() Implementation of the contract to build a DocIdSetIterator . Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() See Also DocIdSetIterator FilteredDocIdSetIterator | Improve this Doc View Source Match(Int32) Validation method to determine whether a docid should be in the result set. Declaration protected abstract bool Match(int docid) Parameters Type Name Description System.Int32 docid docid to be tested Returns Type Description System.Boolean true if input docid should be in the result set, false otherwise. Extension Methods Number.IsNumber(Object) See Also DocIdSet"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredDocIdSetIterator.html",
    "title": "Class FilteredDocIdSetIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredDocIdSetIterator Abstract decorator class of a DocIdSetIterator implementation that provides on-demand filter/validation mechanism on an underlying DocIdSetIterator . See DocIdSetIterator . Inheritance System.Object DocIdSetIterator FilteredDocIdSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilteredDocIdSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source FilteredDocIdSetIterator(DocIdSetIterator) Constructor. Declaration public FilteredDocIdSetIterator(DocIdSetIterator innerIter) Parameters Type Name Description DocIdSetIterator innerIter Underlying DocIdSetIterator . Fields | Improve this Doc View Source m_innerIter Declaration protected DocIdSetIterator m_innerIter Field Value Type Description DocIdSetIterator Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source Match(Int32) Validation method to determine whether a docid should be in the result set. Declaration protected abstract bool Match(int doc) Parameters Type Name Description System.Int32 doc docid to be tested Returns Type Description System.Boolean true if input docid should be in the result set, false otherwise. See Also FilteredDocIdSetIterator(DocIdSetIterator) | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.RandomAccessFilterStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.RandomAccessFilterStrategy.html",
    "title": "Class FilteredQuery.RandomAccessFilterStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredQuery.RandomAccessFilterStrategy A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy . Inheritance System.Object FilteredQuery.FilterStrategy FilteredQuery.RandomAccessFilterStrategy Inherited Members FilteredQuery.FilterStrategy.FilteredBulkScorer(AtomicReaderContext, Weight, Boolean, DocIdSet) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class RandomAccessFilterStrategy : FilteredQuery.FilterStrategy Methods | Improve this Doc View Source FilteredScorer(AtomicReaderContext, Weight, DocIdSet) Declaration public override Scorer FilteredScorer(AtomicReaderContext context, Weight weight, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context Weight weight DocIdSet docIdSet Returns Type Description Scorer Overrides FilteredQuery.FilterStrategy.FilteredScorer(AtomicReaderContext, Weight, DocIdSet) | Improve this Doc View Source UseRandomAccess(IBits, Int32) Expert: decides if a filter should be executed as \"random-access\" or not. Random-access means the filter \"filters\" in a similar way as deleted docs are filtered in Lucene. This is faster when the filter accepts many documents. However, when the filter is very sparse, it can be faster to execute the query+filter as a conjunction in some cases. The default implementation returns true if the first document accepted by the filter is < 100. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual bool UseRandomAccess(IBits bits, int firstFilterDoc) Parameters Type Name Description IBits bits System.Int32 firstFilterDoc Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.PhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PhraseQuery.html",
    "title": "Class PhraseQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhraseQuery A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by QueryParser for input like \"new york\" . This query may be combined with other terms or queries with a BooleanQuery . Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new PhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query PhraseQuery NGramPhraseQuery Implements System.Collections.Generic.IEnumerable < Term > System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PhraseQuery : Query, IEnumerable<Term>, IEnumerable Constructors | Improve this Doc View Source PhraseQuery() Constructs an empty phrase query. Declaration public PhraseQuery() Properties | Improve this Doc View Source Slop Sets the number of other words permitted between words in query phrase. If zero, then this is an exact phrase search. For larger values this works like a WITHIN or NEAR operator. The slop is in fact an edit-distance, where the units correspond to moves of terms in the query phrase out of position. For example, to switch the order of two words requires two moves (the first move places the words atop one another), so to permit re-orderings of phrases, the slop must be at least two. More exact matches are scored higher than sloppier matches, thus search results are sorted by exactness. The slop is zero by default, requiring exact matches. Declaration public virtual int Slop { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Term) Adds a term to the end of the query phrase. The relative position of the term is the one immediately after the last term added. Declaration public virtual void Add(Term term) Parameters Type Name Description Term term | Improve this Doc View Source Add(Term, Int32) Adds a term to the end of the query phrase. The relative position of the term within the phrase is specified explicitly. this allows e.g. phrases with more than one term at the same position or phrases with gaps (e.g. in connection with stopwords). Declaration public virtual void Add(Term term, int position) Parameters Type Name Description Term term System.Int32 position | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> queryTerms) Parameters Type Name Description System.Collections.Generic.ISet < Term > queryTerms Overrides Query.ExtractTerms(ISet<Term>) See Also ExtractTerms ( System.Collections.Generic.ISet < Term >) | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.PhraseQuery.terms collection. Declaration public IEnumerator<Term> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Term > An enumerator that can be used to iterate through the Lucene.Net.Search.PhraseQuery.terms collection. | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetPositions() Returns the relative positions of terms in this phrase. Declaration public virtual int[] GetPositions() Returns Type Description System.Int32 [] | Improve this Doc View Source GetTerms() Returns the set of terms in this phrase. Declaration public virtual Term[] GetTerms() Returns Type Description Term [] | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string f) Parameters Type Name Description System.String f Returns Type Description System.String Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the Lucene.Net.Search.PhraseQuery.terms collection. Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator An enumerator that can be used to iterate through the Lucene.Net.Search.PhraseQuery.terms collection. Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.PositiveScoresOnlyCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PositiveScoresOnlyCollector.html",
    "title": "Class PositiveScoresOnlyCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositiveScoresOnlyCollector A ICollector implementation which wraps another ICollector and makes sure only documents with scores > 0 are collected. Inheritance System.Object PositiveScoresOnlyCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PositiveScoresOnlyCollector : ICollector Constructors | Improve this Doc View Source PositiveScoresOnlyCollector(ICollector) Declaration public PositiveScoresOnlyCollector(ICollector c) Parameters Type Name Description ICollector c Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixFilter.html",
    "title": "Class PrefixFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixFilter A Filter that restricts search results to values that have a matching prefix in a given field. Inheritance System.Object Filter MultiTermQueryWrapperFilter < PrefixQuery > PrefixFilter Inherited Members MultiTermQueryWrapperFilter<PrefixQuery>.m_query MultiTermQueryWrapperFilter<PrefixQuery>.Equals(Object) MultiTermQueryWrapperFilter<PrefixQuery>.GetHashCode() MultiTermQueryWrapperFilter<PrefixQuery>.Field MultiTermQueryWrapperFilter<PrefixQuery>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixFilter : MultiTermQueryWrapperFilter<PrefixQuery> Constructors | Improve this Doc View Source PrefixFilter(Term) Declaration public PrefixFilter(Term prefix) Parameters Type Name Description Term prefix Properties | Improve this Doc View Source Prefix Declaration public virtual Term Prefix { get; } Property Value Type Description Term Methods | Improve this Doc View Source ToString() Prints a user-readable version of this query. Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Search.MultiTermQueryWrapperFilter<Lucene.Net.Search.PrefixQuery>.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixQuery.html",
    "title": "Class PrefixQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixQuery A Query that matches documents containing terms with a specified prefix. A PrefixQuery is built by QueryParser for input like app* . This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Inheritance System.Object Query MultiTermQuery PrefixQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixQuery : MultiTermQuery Constructors | Improve this Doc View Source PrefixQuery(Term) Constructs a query for terms starting with prefix . Declaration public PrefixQuery(Term prefix) Parameters Type Name Description Term prefix Properties | Improve this Doc View Source Prefix Returns the prefix of this query. Declaration public virtual Term Prefix { get; } Property Value Type Description Term Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.PrefixTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.PrefixTermsEnum.html",
    "title": "Class PrefixTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified prefix filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FilteredTermsEnum PrefixTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class PrefixTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source PrefixTermsEnum(TermsEnum, BytesRef) Declaration public PrefixTermsEnum(TermsEnum tenum, BytesRef prefixText) Parameters Type Name Description TermsEnum tenum BytesRef prefixText Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.QueryRescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.QueryRescorer.html",
    "title": "Class QueryRescorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryRescorer A Rescorer that uses a provided Query to assign scores to the first-pass hits. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Rescorer QueryRescorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class QueryRescorer : Rescorer Constructors | Improve this Doc View Source QueryRescorer(Query) Sole constructor, passing the 2nd pass query to assign scores to the 1st pass hits. Declaration public QueryRescorer(Query query) Parameters Type Name Description Query query Methods | Improve this Doc View Source Combine(Single, Boolean, Single) Implement this in a subclass to combine the first pass and second pass scores. If secondPassMatches is false then the second pass query failed to match a hit from the first pass query, and you should ignore the secondPassScore . Declaration protected abstract float Combine(float firstPassScore, bool secondPassMatches, float secondPassScore) Parameters Type Name Description System.Single firstPassScore System.Boolean secondPassMatches System.Single secondPassScore Returns Type Description System.Single | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Declaration public override Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation Overrides Rescorer.Explain(IndexSearcher, Explanation, Int32) | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Query, Double, Int32) Sugar API, calling Rescore(IndexSearcher, TopDocs, Int32) using a simple linear combination of firstPassScore + weight * secondPassScore Declaration public static TopDocs Rescore(IndexSearcher searcher, TopDocs topDocs, Query query, double weight, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs topDocs Query query System.Double weight System.Int32 topN Returns Type Description TopDocs | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Declaration public override TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs firstPassTopDocs System.Int32 topN Returns Type Description TopDocs Overrides Rescorer.Rescore(IndexSearcher, TopDocs, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.QueryWrapperFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.QueryWrapperFilter.html",
    "title": "Class QueryWrapperFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryWrapperFilter Constrains search results to only match those which also match a provided query. This could be used, for example, with a NumericRangeQuery on a suitably formatted date field to implement date filtering. One could re-use a single CachingWrapperFilter(QueryWrapperFilter) that matches, e.g., only documents modified within the last week. This would only need to be reconstructed once per day. Inheritance System.Object Filter QueryWrapperFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class QueryWrapperFilter : Filter Constructors | Improve this Doc View Source QueryWrapperFilter(Query) Constructs a filter which only matches documents matching query . Declaration public QueryWrapperFilter(Query query) Parameters Type Name Description Query query Properties | Improve this Doc View Source Query Returns the inner Query Declaration public Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansOrdered.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansOrdered.html",
    "title": "Class NearSpansOrdered | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NearSpansOrdered A Spans that is formed from the ordered subspans of a SpanNearQuery where the subspans do not overlap and have a maximum slop between them. The formed spans only contains minimum slop matches. The matching slop is computed from the distance(s) between the non overlapping matching Spans . Successive matches are always formed from the successive Spans of the SpanNearQuery . The formed spans may contain overlaps when the slop is at least 1. For example, when querying using t1 t2 t3 with slop at least 1, the fragment: t1 t2 t1 t3 t2 t3 matches twice: t1 t2 .. t3 t1 .. t2 t3 Expert: Only public for subclassing. Most implementations should not need this class Inheritance System.Object Spans NearSpansOrdered Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class NearSpansOrdered : Spans Constructors | Improve this Doc View Source NearSpansOrdered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public NearSpansOrdered(SpanNearQuery spanNearQuery, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanNearQuery spanNearQuery AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts | Improve this Doc View Source NearSpansOrdered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>, Boolean) Declaration public NearSpansOrdered(SpanNearQuery spanNearQuery, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts, bool collectPayloads) Parameters Type Name Description SpanNearQuery spanNearQuery AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts System.Boolean collectPayloads Properties | Improve this Doc View Source Doc Returns the document number of the current match. Initially invalid. Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Returns the end position of the current match. Initially invalid. Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Returns the start position of the current match. Initially invalid. Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start | Improve this Doc View Source SubSpans Declaration public virtual Spans[] SubSpans { get; } Property Value Type Description Spans [] Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Move to the next match, returning true iff any such exists. Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Skips to the first match beyond the current, whose document number is greater than or equal to target . The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. Returns true if there is such a match. Behaves as if written: bool SkipTo(int target) { do { if (!Next()) return false; } while (target > Doc); return true; } Most implementations are considerably more efficient than that. Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansUnordered.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.NearSpansUnordered.html",
    "title": "Class NearSpansUnordered | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NearSpansUnordered Similar to NearSpansOrdered , but for the unordered case. Expert: Only public for subclassing. Most implementations should not need this class Inheritance System.Object Spans NearSpansUnordered Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class NearSpansUnordered : Spans Constructors | Improve this Doc View Source NearSpansUnordered(SpanNearQuery, AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public NearSpansUnordered(SpanNearQuery query, AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description SpanNearQuery query AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start | Improve this Doc View Source SubSpans Declaration public virtual Spans[] SubSpans { get; } Property Value Type Description Spans [] Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() WARNING: The List is not necessarily in order of the the positions Declaration public override ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> Collection of byte[] payloads Overrides Spans.GetPayload() Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanFirstQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanFirstQuery.html",
    "title": "Class SpanFirstQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanFirstQuery Matches spans near the beginning of a field. This class is a simple extension of SpanPositionRangeQuery in that it assumes the start to be zero and only checks the end boundary. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPositionRangeQuery SpanFirstQuery Inherited Members SpanPositionRangeQuery.m_start SpanPositionRangeQuery.m_end SpanPositionRangeQuery.Start SpanPositionRangeQuery.End SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanFirstQuery : SpanPositionRangeQuery Constructors | Improve this Doc View Source SpanFirstQuery(SpanQuery, Int32) Construct a SpanFirstQuery matching spans in match whose end position is less than or equal to end . Declaration public SpanFirstQuery(SpanQuery match, int end) Parameters Type Name Description SpanQuery match System.Int32 end Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionRangeQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides SpanPositionRangeQuery.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides SpanPositionRangeQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanPositionRangeQuery.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides SpanPositionRangeQuery.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.TopTermsSpanBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.TopTermsSpanBooleanQueryRewrite.html",
    "title": "Class SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. Inheritance System.Object MultiTermQuery.RewriteMethod SpanRewriteMethod SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public sealed class TopTermsSpanBooleanQueryRewrite : SpanRewriteMethod Constructors | Improve this Doc View Source TopTermsSpanBooleanQueryRewrite(Int32) Create a SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite for at most size terms. Declaration public TopTermsSpanBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source Count return the maximum priority queue size. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides SpanRewriteMethod.Rewrite(IndexReader, MultiTermQuery) Extension Methods Number.IsNumber(Object) See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanMultiTermQueryWrapper-1.html",
    "title": "Class SpanMultiTermQueryWrapper<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanMultiTermQueryWrapper<Q> Wraps any MultiTermQuery as a SpanQuery , so it can be nested within other SpanQuery classes. The query is rewritten by default to a SpanOrQuery containing the expanded terms, but this can be customized. Example: WildcardQuery wildcard = new WildcardQuery(new Term(\"field\", \"bro?n\")); SpanQuery spanWildcard = new SpanMultiTermQueryWrapper<WildcardQuery>(wildcard); // do something with spanWildcard, such as use it in a SpanFirstQuery Inheritance System.Object Query SpanQuery SpanMultiTermQueryWrapper<Q> Implements ISpanMultiTermQueryWrapper Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanMultiTermQueryWrapper<Q> : SpanQuery, ISpanMultiTermQueryWrapper where Q : MultiTermQuery Type Parameters Name Description Q Constructors | Improve this Doc View Source SpanMultiTermQueryWrapper(Q) Create a new SpanMultiTermQueryWrapper<Q> . Declaration public SpanMultiTermQueryWrapper(Q query) Parameters Type Name Description Q query Query to wrap. NOTE: This will set MultiTermRewriteMethod on the wrapped query , changing its rewrite method to a suitable one for spans. Be sure to not change the rewrite method on the wrapped query afterwards! Doing so will throw System.NotSupportedException on rewriting this query! Fields | Improve this Doc View Source m_query Declaration protected readonly Q m_query Field Value Type Description Q | Improve this Doc View Source SCORING_SPAN_QUERY_REWRITE A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Declaration public static readonly SpanRewriteMethod SCORING_SPAN_QUERY_REWRITE Field Value Type Description SpanRewriteMethod See Also MultiTermRewriteMethod Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source MultiTermRewriteMethod Expert: Gets or Sets the rewrite method. This only makes sense to be a span rewrite method. Declaration public SpanRewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description SpanRewriteMethod | Improve this Doc View Source WrappedQuery Returns the wrapped query Declaration public virtual Query WrappedQuery { get; } Property Value Type Description Query Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Implements ISpanMultiTermQueryWrapper Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearPayloadCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearPayloadCheckQuery.html",
    "title": "Class SpanNearPayloadCheckQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNearPayloadCheckQuery Only return those matches that have a specific payload at the given position. Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanNearPayloadCheckQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNearPayloadCheckQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanNearPayloadCheckQuery(SpanNearQuery, ICollection<Byte[]>) Declaration public SpanNearPayloadCheckQuery(SpanNearQuery match, ICollection<byte[]> payloadToMatch) Parameters Type Name Description SpanNearQuery match The underlying SpanQuery to check System.Collections.Generic.ICollection < System.Byte []> payloadToMatch The ICollection{byte[]} of payloads to match. IMPORTANT: If the type provided does not implement System.Collections.Generic.IList<T> (including arrays), System.Collections.Generic.ISet<T> , or System.Collections.Generic.IDictionary<TKey, TValue> , it should provide an System.Object.Equals(System.Object) and System.Object.GetHashCode() implementation that compares the values of the byte arrays to ensure they are the same. Fields | Improve this Doc View Source m_payloadToMatch Declaration protected readonly ICollection<byte[]> m_payloadToMatch Field Value Type Description System.Collections.Generic.ICollection < System.Byte []> Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNearQuery.html",
    "title": "Class SpanNearQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNearQuery Matches spans which are near one another. One can specify slop , the maximum number of intervening unmatched positions, as well as whether matches are required to be in-order. Inheritance System.Object Query SpanQuery SpanNearQuery PayloadNearQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNearQuery : SpanQuery Constructors | Improve this Doc View Source SpanNearQuery(SpanQuery[], Int32, Boolean) Construct a SpanNearQuery . Matches spans matching a span from each clause, with up to slop total unmatched positions between them. * When inOrder is true , the spans from each clause must be * ordered as in clauses . Declaration public SpanNearQuery(SpanQuery[] clauses, int slop, bool inOrder) Parameters Type Name Description SpanQuery [] clauses The clauses to find near each other System.Int32 slop The slop value System.Boolean inOrder true if order is important | Improve this Doc View Source SpanNearQuery(SpanQuery[], Int32, Boolean, Boolean) Declaration public SpanNearQuery(SpanQuery[] clauses, int slop, bool inOrder, bool collectPayloads) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder System.Boolean collectPayloads Fields | Improve this Doc View Source m_clauses Declaration protected readonly IList<SpanQuery> m_clauses Field Value Type Description System.Collections.Generic.IList < SpanQuery > | Improve this Doc View Source m_field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source m_inOrder Declaration protected bool m_inOrder Field Value Type Description System.Boolean | Improve this Doc View Source m_slop Declaration protected int m_slop Field Value Type Description System.Int32 Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source IsInOrder Return true if matches are required to be in-order. Declaration public virtual bool IsInOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Slop Return the maximum number of intervening unmatched positions permitted. Declaration public virtual int Slop { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Returns true iff o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Return the clauses whose spans are matched. Declaration public virtual SpanQuery[] GetClauses() Returns Type Description SpanQuery [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNotQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanNotQuery.html",
    "title": "Class SpanNotQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNotQuery Removes matches which overlap with another SpanQuery or within a x tokens before or y tokens after another SpanQuery . Inheritance System.Object Query SpanQuery SpanNotQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanNotQuery : SpanQuery Constructors | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude) Parameters Type Name Description SpanQuery include SpanQuery exclude | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery, Int32) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude within dist tokens of include . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude, int dist) Parameters Type Name Description SpanQuery include SpanQuery exclude System.Int32 dist | Improve this Doc View Source SpanNotQuery(SpanQuery, SpanQuery, Int32, Int32) Construct a SpanNotQuery matching spans from include which have no overlap with spans from exclude within pre tokens before or post tokens of include . Declaration public SpanNotQuery(SpanQuery include, SpanQuery exclude, int pre, int post) Parameters Type Name Description SpanQuery include SpanQuery exclude System.Int32 pre System.Int32 post Properties | Improve this Doc View Source Exclude Return the SpanQuery whose matches must not overlap those returned. Declaration public virtual SpanQuery Exclude { get; } Property Value Type Description SpanQuery | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Include Return the SpanQuery whose matches are filtered. Declaration public virtual SpanQuery Include { get; } Property Value Type Description SpanQuery Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSDirectory.html",
    "title": "Class FSDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSDirectory Base class for Directory implementations that store index files in the file system. There are currently three core subclasses: SimpleFSDirectory is a straightforward implementation using System.IO.FileStream . However, it has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. NIOFSDirectory uses java.nio's FileChannel's positional io when reading to avoid synchronization when reading from the same file. Unfortunately, due to a Windows-only Sun JRE bug this is a poor choice for Windows, but on all other platforms this is the preferred choice. Applications using or System.Threading.Tasks.Task<TResult> should use SimpleFSDirectory instead. See NIOFSDirectory java doc for details. MMapDirectory uses memory-mapped IO when reading. This is a good choice if you have plenty of virtual memory relative to your index size, eg if you are running on a 64 bit runtime, or you are running on a 32 bit runtime but your index sizes are small enough to fit into the virtual memory space. Applications using or System.Threading.Tasks.Task should use SimpleFSDirectory instead. See MMapDirectory doc for details. Unfortunately, because of system peculiarities, there is no single overall best implementation. Therefore, we've added the Open(String) method (or one of its overloads), to allow Lucene to choose the best FSDirectory implementation given your environment, and the known limitations of each implementation. For users who have no reason to prefer a specific implementation, it's best to simply use Open(String) (or one of its overloads). For all others, you should instantiate the desired implementation directly. The locking implementation is by default NativeFSLockFactory , but can be changed by passing in a custom LockFactory instance. Inheritance System.Object Directory BaseDirectory FSDirectory MMapDirectory NIOFSDirectory SimpleFSDirectory Implements System.IDisposable Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenInput(String, IOContext) Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class FSDirectory : BaseDirectory, IDisposable Constructors | Improve this Doc View Source FSDirectory(DirectoryInfo) Declaration protected FSDirectory(DirectoryInfo dir) Parameters Type Name Description System.IO.DirectoryInfo dir | Improve this Doc View Source FSDirectory(DirectoryInfo, LockFactory) Create a new FSDirectory for the named location (ctor for subclasses). Declaration protected FSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Fields | Improve this Doc View Source DEFAULT_READ_CHUNK_SIZE Default read chunk size: 8192 bytes (this is the size up to which the runtime does not allocate additional arrays while reading/writing) Declaration [Obsolete(\"this constant is no longer used since Lucene 4.5.\")] public const int DEFAULT_READ_CHUNK_SIZE = 8192 Field Value Type Description System.Int32 | Improve this Doc View Source m_directory Declaration protected readonly DirectoryInfo m_directory Field Value Type Description System.IO.DirectoryInfo Properties | Improve this Doc View Source Directory the underlying filesystem directory Declaration public virtual DirectoryInfo Directory { get; } Property Value Type Description System.IO.DirectoryInfo | Improve this Doc View Source ReadChunkSize this setting has no effect anymore. Declaration [Obsolete(\"this is no longer used since Lucene 4.5.\")] public int ReadChunkSize { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateOutput(String, IOContext) Creates an IndexOutput for the file with the given name. Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Closes the store to future operations. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source EnsureCanWrite(String) Declaration protected virtual void EnsureCanWrite(string name) Parameters Type Name Description System.String name | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length in bytes of a file in the directory. Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source ListAll() Lists all files (not subdirectories) in the directory. Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() See Also ListAll(DirectoryInfo) | Improve this Doc View Source ListAll(DirectoryInfo) Lists all files (not subdirectories) in the directory. This method never returns null (throws System.IO.IOException instead). Declaration public static string[] ListAll(DirectoryInfo dir) Parameters Type Name Description System.IO.DirectoryInfo dir Returns Type Description System.String [] Exceptions Type Condition System.IO.DirectoryNotFoundException if the directory does not exist, or does exist but is not a directory or is invalid (for example, it is on an unmapped drive). System.Security.SecurityException The caller does not have the required permission. | Improve this Doc View Source OnIndexOutputClosed(FSDirectory.FSIndexOutput) Declaration protected virtual void OnIndexOutputClosed(FSDirectory.FSIndexOutput io) Parameters Type Name Description FSDirectory.FSIndexOutput io | Improve this Doc View Source Open(DirectoryInfo) Creates an FSDirectory instance, trying to pick the best implementation given the current environment. The directory returned uses the NativeFSLockFactory . Currently this returns MMapDirectory for most Solaris and Windows 64-bit runtimes, NIOFSDirectory for other non-Windows runtimes, and SimpleFSDirectory for other runtimes on Windows. It is highly recommended that you consult the implementation's documentation for your platform before using this method. NOTE : this method may suddenly change which implementation is returned from release to release, in the event that higher performance defaults become possible; if the precise implementation is important to your application, please instantiate it directly, instead. For optimal performance you should consider using MMapDirectory on 64 bit runtimes. See FSDirectory . Declaration public static FSDirectory Open(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path Returns Type Description FSDirectory | Improve this Doc View Source Open(DirectoryInfo, LockFactory) Just like Open(DirectoryInfo) , but allows you to also specify a custom LockFactory . Declaration public static FSDirectory Open(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path LockFactory lockFactory Returns Type Description FSDirectory | Improve this Doc View Source Open(String) Just like Open(DirectoryInfo) , but allows you to specify the directory as a System.String . Declaration public static FSDirectory Open(string path) Parameters Type Name Description System.String path The path (to a directory) to open Returns Type Description FSDirectory An open FSDirectory | Improve this Doc View Source Open(String, LockFactory) Just like Open(DirectoryInfo, LockFactory) , but allows you to specify the directory as a System.String . Declaration public static FSDirectory Open(string path, LockFactory lockFactory) Parameters Type Name Description System.String path The path (to a directory) to open LockFactory lockFactory Returns Type Description FSDirectory An open FSDirectory | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides BaseDirectory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() For debug output. Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Directory"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSLockFactory.html",
    "title": "Class FSLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSLockFactory Base class for file system based locking implementation. Inheritance System.Object LockFactory FSLockFactory NativeFSLockFactory SimpleFSLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix LockFactory.MakeLock(String) LockFactory.ClearLock(String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class FSLockFactory : LockFactory Fields | Improve this Doc View Source m_lockDir Directory for the lock files. Declaration protected DirectoryInfo m_lockDir Field Value Type Description System.IO.DirectoryInfo Properties | Improve this Doc View Source LockDir Gets the lock directory. Declaration public DirectoryInfo LockDir { get; } Property Value Type Description System.IO.DirectoryInfo Methods | Improve this Doc View Source SetLockDir(DirectoryInfo) Set the lock directory. This property can be only called once to initialize the lock directory. It is used by FSDirectory to set the lock directory to itself. Subclasses can also use this property to set the directory in the constructor. Declaration protected void SetLockDir(DirectoryInfo lockDir) Parameters Type Name Description System.IO.DirectoryInfo lockDir | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.IndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IndexInput.html",
    "title": "Class IndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexInput Abstract base class for input from a file in a Directory . A random-access input stream. Used for all Lucene index input operations. IndexInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every IndexInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new IndexInput which operates on the same underlying resource, but positioned independently. Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw System.ObjectDisposedException when the original one is closed. Inheritance System.Object DataInput IndexInput BufferedIndexInput ByteBufferIndexInput ChecksumIndexInput RAMInputStream Implements System.IDisposable Inherited Members DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexInput : DataInput, IDisposable Constructors | Improve this Doc View Source IndexInput(String) resourceDescription should be a non-null, opaque string describing this resource; it's returned from ToString() . Declaration protected IndexInput(string resourceDescription) Parameters Type Name Description System.String resourceDescription Properties | Improve this Doc View Source Length The number of bytes in the file. Declaration public abstract long Length { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Clone() Returns a clone of this stream. Clones of a stream access the same data, and are positioned at the same point as the stream they were cloned from. Expert: Subclasses must ensure that clones may be positioned at different points in the input from each other and from the stream they were cloned from. Warning: Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw System.ObjectDisposedException when the original one is closed. Declaration public override object Clone() Returns Type Description System.Object Overrides DataInput.Clone() | Improve this Doc View Source Dispose() Closes the stream to further operations. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes the stream to further operations. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetFilePointer() Returns the current position in this file, where the next read will occur. Declaration public abstract long GetFilePointer() Returns Type Description System.Int64 See Also Seek(Int64) | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next read will occur. Declaration public abstract void Seek(long pos) Parameters Type Name Description System.Int64 pos See Also GetFilePointer() | Improve this Doc View Source ToString() Returns the resourceDescription that was passed into the constructor. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Directory"
  },
  "api/Lucene.Net/Lucene.Net.Store.IndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IndexOutput.html",
    "title": "Class IndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexOutput Abstract base class for output to a file in a Directory . A random-access output stream. Used for all Lucene index output operations. IndexOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput RAMOutputStream Implements System.IDisposable Inherited Members DataOutput.WriteByte(Byte) DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteBytes(Byte[], Int32, Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexOutput : DataOutput, IDisposable Properties | Improve this Doc View Source Checksum Returns the current checksum of bytes written so far Declaration public abstract long Checksum { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Length Gets or Sets the file length. By default, this property's setter does nothing (it's optional for a Directory to implement it). But, certain Directory implementations (for example FSDirectory ) can use this to inform the underlying IO system to pre-allocate the file to the specified size. If the length is longer than the current file length, the bytes added to the file are undefined. Otherwise the file is truncated. Declaration public virtual long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Dispose() Closes this stream to further operations. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Closes this stream to further operations. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Flush() Forces any buffered output to be written. Declaration public abstract void Flush() | Improve this Doc View Source GetFilePointer() Returns the current position in this file, where the next write will occur. Declaration public abstract long GetFilePointer() Returns Type Description System.Int64 See Also Seek(Int64) | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next write will occur. Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public abstract void Seek(long pos) Parameters Type Name Description System.Int64 pos See Also GetFilePointer() Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Directory IndexInput"
  },
  "api/Lucene.Net/Lucene.Net.Store.InputStreamDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.InputStreamDataInput.html",
    "title": "Class InputStreamDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InputStreamDataInput A DataInput wrapping a plain System.IO.Stream . Inheritance System.Object DataInput InputStreamDataInput Implements System.IDisposable Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class InputStreamDataInput : DataInput, IDisposable Constructors | Improve this Doc View Source InputStreamDataInput(Stream) Declaration public InputStreamDataInput(Stream is) Parameters Type Name Description System.IO.Stream is Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CircularQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CircularQueue-1.html",
    "title": "Class CircularQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CircularQueue<T> Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> DirectedCollectionBase <T> SequencedBase <T> CircularQueue<T> Implements IQueue <T> IStack <T> IDirectedCollectionValue <T> ICollectionValue <T> IShowable System.IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members SequencedBase<T>.ComputeHashCode(ISequenced<T>, IEqualityComparer<T>) SequencedBase<T>.StaticEquals(ISequenced<T>, ISequenced<T>, IEqualityComparer<T>) SequencedBase<T>.GetSequencedHashCode() SequencedBase<T>.SequencedEquals(ISequenced<T>) SequencedBase<T>.Direction SequencedBase<T>.FindIndex(Func<T, Boolean>) SequencedBase<T>.FindLastIndex(Func<T, Boolean>) DirectedCollectionBase<T>.FindLast(Func<T, Boolean>, T) CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.countItems(IEnumerable<T>) EnumerableBase<T>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class CircularQueue<T> : SequencedBase<T>, IQueue<T>, IStack<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Constructors | Improve this Doc View Source CircularQueue(MemoryType) Declaration public CircularQueue(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType | Improve this Doc View Source CircularQueue(Int32, MemoryType) Declaration public CircularQueue(int capacity, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Int32 capacity MemoryType memoryType The memory type strategy of the internal enumerator used to iterate over the collection Properties | Improve this Doc View Source AllowsDuplicates Declaration public virtual bool AllowsDuplicates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Get the i'th item in the queue. The front of the queue is at index 0. Declaration public virtual T this[int i] { get; } Parameters Type Name Description System.Int32 i Property Value Type Description T | Improve this Doc View Source ListenableEvents Declaration public override EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.ListenableEvents Methods | Improve this Doc View Source Backwards() Declaration public override IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> Overrides Lucene.Net.Support.C5.DirectedCollectionBase<T>.Backwards() | Improve this Doc View Source Check() Declaration public virtual bool Check() Returns Type Description System.Boolean | Improve this Doc View Source Choose() Declaration public override T Choose() Returns Type Description T Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.Choose() | Improve this Doc View Source Dequeue() Declaration public virtual T Dequeue() Returns Type Description T | Improve this Doc View Source Enqueue(T) Declaration public virtual void Enqueue(T item) Parameters Type Name Description T item | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> Overrides Lucene.Net.Support.C5.EnumerableBase<T>.GetEnumerator() | Improve this Doc View Source Pop() Declaration public T Pop() Returns Type Description T | Improve this Doc View Source Push(T) Declaration public void Push(T item) Parameters Type Name Description T item Explicit Interface Implementations | Improve this Doc View Source IDirectedEnumerable<T>.Backwards() Declaration IDirectedEnumerable<T> IDirectedEnumerable<T>.Backwards() Returns Type Description IDirectedEnumerable <T> Implements IQueue<T> IStack<T> IDirectedCollectionValue<T> ICollectionValue<T> IShowable System.IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ClearedEventArgs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ClearedEventArgs.html",
    "title": "Class ClearedEventArgs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClearedEventArgs Inheritance System.Object System.EventArgs ClearedEventArgs ClearedRangeEventArgs Inherited Members System.EventArgs.Empty System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ClearedEventArgs : EventArgs Constructors | Improve this Doc View Source ClearedEventArgs(Boolean, Int32) Declaration public ClearedEventArgs(bool full, int count) Parameters Type Name Description System.Boolean full True if the operation cleared all of the collection System.Int32 count The number of items removed by the clear. Fields | Improve this Doc View Source Count Declaration public readonly int Count Field Value Type Description System.Int32 | Improve this Doc View Source Full Declaration public readonly bool Full Field Value Type Description System.Boolean Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ClearedRangeEventArgs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ClearedRangeEventArgs.html",
    "title": "Class ClearedRangeEventArgs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClearedRangeEventArgs Inheritance System.Object System.EventArgs ClearedEventArgs ClearedRangeEventArgs Inherited Members ClearedEventArgs.Full ClearedEventArgs.Count System.EventArgs.Empty System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ClearedRangeEventArgs : ClearedEventArgs Constructors | Improve this Doc View Source ClearedRangeEventArgs(Boolean, Int32, Nullable<Int32>) Declaration public ClearedRangeEventArgs(bool full, int count, int? start) Parameters Type Name Description System.Boolean full System.Int32 count System.Nullable < System.Int32 > start Fields | Improve this Doc View Source Start Declaration public readonly int? Start Field Value Type Description System.Nullable < System.Int32 > Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides ClearedEventArgs.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionBase-1.html",
    "title": "Class CollectionBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionBase<T> Base class (abstract) for ICollection implementations. Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase<T> DirectedCollectionBase<T> HashSet<T> Implements ICollectionValue <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable IShowable System.IFormattable Inherited Members CollectionValueBase<T>.ListenableEvents CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Choose() CollectionValueBase<T>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(IEnumerable<T>) EnumerableBase<T>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class CollectionBase<T> : CollectionValueBase<T>, ICollectionValue<T>, IEnumerable<T>, IEnumerable, IShowable, IFormattable Type Parameters Name Description T Constructors | Improve this Doc View Source CollectionBase(IEqualityComparer<T>, MemoryType) Declaration protected CollectionBase(IEqualityComparer<T> itemequalityComparer, MemoryType memoryType) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> itemequalityComparer MemoryType memoryType The type of memory for the enumerator used to iterate the collection Fields | Improve this Doc View Source isReadOnlyBase The underlying field of the ReadOnly property Declaration protected bool isReadOnlyBase Field Value Type Description System.Boolean | Improve this Doc View Source itemequalityComparer The item equalityComparer of the collection Declaration protected readonly IEqualityComparer<T> itemequalityComparer Field Value Type Description System.Collections.Generic.IEqualityComparer <T> | Improve this Doc View Source size The number of items in the collection Declaration protected int size Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 The size of this collection Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.Count | Improve this Doc View Source CountSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). Declaration public override Speed CountSpeed { get; } Property Value Type Description Speed A characterization of the speed of the Count property in this collection. Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.CountSpeed | Improve this Doc View Source EqualityComparer Declaration public virtual IEqualityComparer<T> EqualityComparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <T> | Improve this Doc View Source IsEmpty Declaration public override bool IsEmpty { get; } Property Value Type Description System.Boolean True if this collection is empty Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.IsEmpty | Improve this Doc View Source IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean True if this collection is read only | Improve this Doc View Source stamp The current stamp value Declaration protected int stamp { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source checkRange(Int32, Int32) Utility method for range checking. Declaration protected void checkRange(int start, int count) Parameters Type Name Description System.Int32 start start of range System.Int32 count size of range Exceptions Type Condition System.ArgumentOutOfRangeException if the start or count is negative or if the range does not fit within collection size. | Improve this Doc View Source ComputeHashCode(ICollectionValue<T>, IEqualityComparer<T>) Compute the unsequenced hash code of a collection Declaration public static int ComputeHashCode(ICollectionValue<T> items, IEqualityComparer<T> itemequalityComparer) Parameters Type Name Description ICollectionValue <T> items The collection to compute hash code for System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The item equalitySCG.Comparer Returns Type Description System.Int32 The hash code | Improve this Doc View Source GetUnsequencedHashCode() Get the unsequenced collection hash code of this collection: from the cached value if present and up to date, else (re)compute. Declaration public virtual int GetUnsequencedHashCode() Returns Type Description System.Int32 The hash code | Improve this Doc View Source modifycheck(Int32) Check if the collection has been modified since a specified time, expressed as a stamp value. Declaration protected virtual void modifycheck(int thestamp) Parameters Type Name Description System.Int32 thestamp The stamp identifying the target time Exceptions Type Condition CollectionModifiedException if this collection has been updated since a target time | Improve this Doc View Source StaticEquals(ICollection<T>, ICollection<T>, IEqualityComparer<T>) Examine if collection1 and collection2 are equal as unsequenced collections using the specified item equalityComparer (assumed compatible with the two collections). Declaration public static bool StaticEquals(ICollection<T> collection1, ICollection<T> collection2, IEqualityComparer<T> itemequalityComparer) Parameters Type Name Description ICollection <T> collection1 The first collection ICollection <T> collection2 The second collection System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The item equalityComparer to use for comparison Returns Type Description System.Boolean True if equal | Improve this Doc View Source UnsequencedEquals(ICollection<T>) Check if the contents of otherCollection is equal to the contents of this in the unsequenced sense. Uses the item equality comparer of this collection Declaration public virtual bool UnsequencedEquals(ICollection<T> otherCollection) Parameters Type Name Description ICollection <T> otherCollection The collection to compare to. Returns Type Description System.Boolean True if equal | Improve this Doc View Source updatecheck() Check if it is valid to perform update operations, and if so increment stamp. Declaration protected virtual void updatecheck() Exceptions Type Condition ReadOnlyCollectionException If collection is read-only Implements ICollectionValue<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable IShowable System.IFormattable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionModifiedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionModifiedException.html",
    "title": "Class CollectionModifiedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionModifiedException An exception thrown by enumerators, range views etc. when accessed after the underlying collection has been modified. Inheritance System.Object System.Exception CollectionModifiedException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class CollectionModifiedException : Exception Constructors | Improve this Doc View Source CollectionModifiedException() Create a simple exception with no further explanation. Declaration public CollectionModifiedException() | Improve this Doc View Source CollectionModifiedException(String) Create the exception with an explanation of the reason. Declaration public CollectionModifiedException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.MultipleEnumerationException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.MultipleEnumerationException.html",
    "title": "Class MultipleEnumerationException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultipleEnumerationException An exception thrown by the MemorySafeEnumerator if the collection is enumerated multiple times when the memory mode is set to Strict Inheritance System.Object System.Exception MultipleEnumerationException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class MultipleEnumerationException : Exception Constructors | Improve this Doc View Source MultipleEnumerationException() Create a simple exception with no further explanation. Declaration public MultipleEnumerationException() | Improve this Doc View Source MultipleEnumerationException(String) Create a simple exception with the an explanation contained in the error message. Declaration public MultipleEnumerationException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.NoSuchItemException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.NoSuchItemException.html",
    "title": "Class NoSuchItemException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoSuchItemException An exception thrown by a lookup or lookup with update operation that does not find the lookup item and has no other means to communicate failure. The typical scenario is a lookup by key in a dictionary with an indexer, see e.g. C5.IDictionary`2.Item(`0) Inheritance System.Object System.Exception NoSuchItemException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class NoSuchItemException : Exception Constructors | Improve this Doc View Source NoSuchItemException() Create a simple exception with no further explanation. Declaration public NoSuchItemException() | Improve this Doc View Source NoSuchItemException(String) Create the exception with an explanation of the reason. Declaration public NoSuchItemException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.NotAViewException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.NotAViewException.html",
    "title": "Class NotAViewException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NotAViewException An exception thrown by an operation on a list ( C5.IList`1 ) that only makes sense for a view, not for an underlying list. Inheritance System.Object System.Exception NotAViewException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class NotAViewException : Exception Constructors | Improve this Doc View Source NotAViewException() Create a simple exception with no further explanation. Declaration public NotAViewException() | Improve this Doc View Source NotAViewException(String) Create the exception with an explanation of the reason. Declaration public NotAViewException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.NotComparableException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.NotComparableException.html",
    "title": "Class NotComparableException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NotComparableException An exception thrown by an operation that need to construct a natural comparer for a type. Inheritance System.Object System.Exception NotComparableException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class NotComparableException : Exception Constructors | Improve this Doc View Source NotComparableException() Create a simple exception with no further explanation. Declaration public NotComparableException() | Improve this Doc View Source NotComparableException(String) Create the exception with an explanation of the reason. Declaration public NotComparableException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ReadOnlyCollectionException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ReadOnlyCollectionException.html",
    "title": "Class ReadOnlyCollectionException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReadOnlyCollectionException An exception thrown by an update operation on a Read-Only collection or dictionary. This exception will be thrown unconditionally when an update operation (method or set property) is called. No check is made to see if the update operation, if allowed, would actually change the collection. Inheritance System.Object System.Exception ReadOnlyCollectionException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ReadOnlyCollectionException : Exception Constructors | Improve this Doc View Source ReadOnlyCollectionException() Create a simple exception with no further explanation. Declaration public ReadOnlyCollectionException() | Improve this Doc View Source ReadOnlyCollectionException(String) Create the exception with an explanation of the reason. Declaration public ReadOnlyCollectionException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.SequencedBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.SequencedBase-1.html",
    "title": "Class SequencedBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SequencedBase<T> Base class (abstract) for sequenced collection implementations. Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> DirectedCollectionBase <T> SequencedBase<T> CircularQueue<T> TreeSet<T> Implements IDirectedCollectionValue <T> ICollectionValue <T> IShowable System.IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members DirectedCollectionBase<T>.Backwards() DirectedCollectionBase<T>.IDirectedEnumerable<T>.Backwards() DirectedCollectionBase<T>.FindLast(Func<T, Boolean>, T) CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ListenableEvents CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Choose() CollectionValueBase<T>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(IEnumerable<T>) EnumerableBase<T>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class SequencedBase<T> : DirectedCollectionBase<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Constructors | Improve this Doc View Source SequencedBase(IEqualityComparer<T>, MemoryType) Declaration protected SequencedBase(IEqualityComparer<T> itemequalityComparer, MemoryType memoryType) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> itemequalityComparer MemoryType memoryType The type of memory for the enumerator used to iterate the collection Properties | Improve this Doc View Source Direction Forwards if same, else Backwards Declaration public override EnumerationDirection Direction { get; } Property Value Type Description EnumerationDirection The enumeration direction relative to the original collection. Overrides Lucene.Net.Support.C5.DirectedCollectionBase<T>.Direction Methods | Improve this Doc View Source ComputeHashCode(ISequenced<T>, IEqualityComparer<T>) Compute the unsequenced hash code of a collection Declaration public static int ComputeHashCode(ISequenced<T> items, IEqualityComparer<T> itemequalityComparer) Parameters Type Name Description ISequenced <T> items The collection to compute hash code for System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The item equalitySCG.Comparer Returns Type Description System.Int32 The hash code | Improve this Doc View Source FindIndex(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection and return the index of the first one. Declaration public int FindIndex(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate defining the predicate Returns Type Description System.Int32 the index, if found, a negative value else | Improve this Doc View Source FindLastIndex(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection and return the index of the last one. Declaration public int FindLastIndex(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate defining the predicate Returns Type Description System.Int32 the index, if found, a negative value else | Improve this Doc View Source GetSequencedHashCode() Get the sequenced collection hash code of this collection: from the cached value if present and up to date, else (re)compute. Declaration public virtual int GetSequencedHashCode() Returns Type Description System.Int32 The hash code | Improve this Doc View Source SequencedEquals(ISequenced<T>) Check if the contents of that is equal to the contents of this in the sequenced sense. Using the item equalityComparer of this collection. Declaration public virtual bool SequencedEquals(ISequenced<T> otherCollection) Parameters Type Name Description ISequenced <T> otherCollection The collection to compare to. Returns Type Description System.Boolean True if equal | Improve this Doc View Source StaticEquals(ISequenced<T>, ISequenced<T>, IEqualityComparer<T>) Examine if tit and tat are equal as sequenced collections using the specified item equalityComparer (assumed compatible with the two collections). Declaration public static bool StaticEquals(ISequenced<T> collection1, ISequenced<T> collection2, IEqualityComparer<T> itemequalityComparer) Parameters Type Name Description ISequenced <T> collection1 The first collection ISequenced <T> collection2 The second collection System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The item equalityComparer to use for comparison Returns Type Description System.Boolean True if equal Implements IDirectedCollectionValue<T> ICollectionValue<T> IShowable System.IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.SequencedCollectionEqualityComparer-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.SequencedCollectionEqualityComparer-2.html",
    "title": "Class SequencedCollectionEqualityComparer<T, W> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SequencedCollectionEqualityComparer<T, W> Prototype for a sequenced equalityComparer for something (T) that implements ISequenced[W]. This will use ISequenced[W] specific implementations of the equality comparer operations. Inheritance System.Object SequencedCollectionEqualityComparer<T, W> Implements System.Collections.Generic.IEqualityComparer <T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class SequencedCollectionEqualityComparer<T, W> : IEqualityComparer<T> where T : ISequenced<W> Type Parameters Name Description T W Properties | Improve this Doc View Source Default Declaration public static SequencedCollectionEqualityComparer<T, W> Default { get; } Property Value Type Description SequencedCollectionEqualityComparer <T, W> Methods | Improve this Doc View Source Equals(T, T) Check if two items are equal with respect to this sequenced equalityComparer Declaration public bool Equals(T collection1, T collection2) Parameters Type Name Description T collection1 first collection T collection2 second collection Returns Type Description System.Boolean True if equal | Improve this Doc View Source GetHashCode(T) Get the hash code with respect to this sequenced equalityComparer Declaration public int GetHashCode(T collection) Parameters Type Name Description T collection The collection Returns Type Description System.Int32 The hash code Implements System.Collections.Generic.IEqualityComparer<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ValueCollection.Enumerator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ValueCollection.Enumerator.html",
    "title": "Struct LurchTable<TKey, TValue>.ValueCollection.Enumerator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct LurchTable<TKey, TValue>.ValueCollection.Enumerator Provides an enumerator that iterates through the collection. Implements System.Collections.Generic.IEnumerator <TValue> System.Collections.IEnumerator System.IDisposable Inherited Members System.ValueType.Equals(System.Object) System.ValueType.GetHashCode() System.ValueType.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public struct Enumerator : IEnumerator<TValue>, IEnumerator, IDisposable Properties | Improve this Doc View Source Current Gets the element in the collection at the current position of the enumerator. Declaration public TValue Current { get; } Property Value Type Description TValue Methods | Improve this Doc View Source Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Declaration public void Dispose() | Improve this Doc View Source MoveNext() Advances the enumerator to the next element of the collection. Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Sets the enumerator to its initial position, which is before the first element in the collection. Declaration public void Reset() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ValueCollection.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ValueCollection.html",
    "title": "Class LurchTable<TKey, TValue>.ValueCollection | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LurchTable<TKey, TValue>.ValueCollection Provides the collection of Values for the LurchTable Inheritance System.Object LurchTable<TKey, TValue>.ValueCollection Implements System.Collections.Generic.ICollection <TValue> System.Collections.Generic.IEnumerable <TValue> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class ValueCollection : ICollection<TValue>, IEnumerable<TValue>, IEnumerable Properties | Improve this Doc View Source Count Gets the number of elements contained in the System.Collections.Generic.ICollection<T> . Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Contains(TValue) Determines whether the System.Collections.Generic.ICollection<T> contains a specific value. Declaration public bool Contains(TValue value) Parameters Type Name Description TValue value Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(TValue[], Int32) Copies the elements of the System.Collections.Generic.ICollection<T> to an System.Array , starting at a particular System.Array index. Declaration public void CopyTo(TValue[] array, int arrayIndex) Parameters Type Name Description TValue[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the collection. Declaration public LurchTable<TKey, TValue>.ValueCollection.Enumerator GetEnumerator() Returns Type Description LurchTable.ValueCollection.Enumerator <> Explicit Interface Implementations | Improve this Doc View Source ICollection<TValue>.Add(TValue) Declaration [Obsolete] void ICollection<TValue>.Add(TValue item) Parameters Type Name Description TValue item | Improve this Doc View Source ICollection<TValue>.Clear() Declaration [Obsolete] void ICollection<TValue>.Clear() | Improve this Doc View Source ICollection<TValue>.IsReadOnly Declaration [Obsolete] bool ICollection<TValue>.IsReadOnly { get; } Returns Type Description System.Boolean | Improve this Doc View Source ICollection<TValue>.Remove(TValue) Declaration [Obsolete] bool ICollection<TValue>.Remove(TValue item) Parameters Type Name Description TValue item Returns Type Description System.Boolean | Improve this Doc View Source IEnumerable<TValue>.GetEnumerator() Declaration [Obsolete] IEnumerator<TValue> IEnumerable<TValue>.GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <TValue> | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration [Obsolete] IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.html",
    "title": "Class LurchTable<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LurchTable<TKey, TValue> LurchTable stands for \"Least Used Recently Concurrent Hash Table\" and has definate similarities to both the .NET 4 ConcurrentDictionary as well as Java's LinkedHashMap. This gives you a thread-safe dictionary/hashtable that stores element ordering by insertion, updates, or access. In addition it can be configured to use a 'hard-limit' count of items that will automatically 'pop' the oldest item in the collection. Inheritance System.Object LurchTable<TKey, TValue> Implements System.Collections.Generic.IDictionary <TKey, TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerable System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class LurchTable<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable, IDisposable Type Parameters Name Description TKey The type of keys in the dictionary. TValue The type of values in the dictionary. Constructors | Improve this Doc View Source LurchTable(LurchTableOrder, Int32) Creates a LurchTable that orders items by ordering and removes items once the specified limit is reached. Declaration public LurchTable(LurchTableOrder ordering, int limit) Parameters Type Name Description LurchTableOrder ordering The type of linking for the items System.Int32 limit The maximum allowable number of items, or int.MaxValue for unlimited | Improve this Doc View Source LurchTable(LurchTableOrder, Int32, IEqualityComparer<TKey>) Creates a LurchTable that orders items by ordering and removes items once the specified limit is reached. Declaration public LurchTable(LurchTableOrder ordering, int limit, IEqualityComparer<TKey> comparer) Parameters Type Name Description LurchTableOrder ordering The type of linking for the items System.Int32 limit The maximum allowable number of items, or int.MaxValue for unlimited System.Collections.Generic.IEqualityComparer <TKey> comparer The element hash generator for keys, or null to use System.Collections.Generic.EqualityComparer`1.Default | Improve this Doc View Source LurchTable(LurchTableOrder, Int32, Int32, Int32, Int32, IEqualityComparer<TKey>) Creates a LurchTable that orders items by ordering and removes items once the specified limit is reached. Declaration public LurchTable(LurchTableOrder ordering, int limit, int hashSize, int allocSize, int lockSize, IEqualityComparer<TKey> comparer) Parameters Type Name Description LurchTableOrder ordering The type of linking for the items System.Int32 limit The maximum allowable number of items, or int.MaxValue for unlimited System.Int32 hashSize The number of hash buckets to use for the collection, usually 1/2 estimated capacity System.Int32 allocSize The number of entries to allocate at a time, usually 1/16 estimated capacity System.Int32 lockSize The number of concurrency locks to preallocate, usually 1/256 estimated capacity System.Collections.Generic.IEqualityComparer <TKey> comparer The element hash generator for keys, or null to use System.Collections.Generic.EqualityComparer`1.Default | Improve this Doc View Source LurchTable(Int32) Creates a LurchTable that can store up to capacity items efficiently. Declaration public LurchTable(int capacity) Parameters Type Name Description System.Int32 capacity The initial allowable number of items before allocation of more memory | Improve this Doc View Source LurchTable(Int32, LurchTableOrder) Creates a LurchTable that can store up to capacity items efficiently. Declaration public LurchTable(int capacity, LurchTableOrder ordering) Parameters Type Name Description System.Int32 capacity The initial allowable number of items before allocation of more memory LurchTableOrder ordering The type of linking for the items | Improve this Doc View Source LurchTable(Int32, LurchTableOrder, IEqualityComparer<TKey>) Creates a LurchTable that can store up to capacity items efficiently. Declaration public LurchTable(int capacity, LurchTableOrder ordering, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 capacity The initial allowable number of items before allocation of more memory LurchTableOrder ordering The type of linking for the items System.Collections.Generic.IEqualityComparer <TKey> comparer The element hash generator for keys, or null to use System.Collections.Generic.EqualityComparer`1.Default Properties | Improve this Doc View Source Comparer Retrives the key comparer being used by this instance. Declaration public IEqualityComparer<TKey> Comparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <TKey> | Improve this Doc View Source Count Gets the number of elements contained in the System.Collections.Generic.ICollection<T> . Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[TKey] Gets or sets the element with the specified key. Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Gets an System.Collections.Generic.ICollection<T> containing the keys of the System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public LurchTable<TKey, TValue>.KeyCollection Keys { get; } Property Value Type Description LurchTable.KeyCollection <> | Improve this Doc View Source Limit Gets or Sets the record limit allowed in this instance. Declaration public int Limit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Ordering Retrieves the LurchTableOrder Ordering enumeration this instance was created with. Declaration public LurchTableOrder Ordering { get; } Property Value Type Description LurchTableOrder | Improve this Doc View Source Values Gets an System.Collections.Generic.ICollection<T> containing the values in the System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public LurchTable<TKey, TValue>.ValueCollection Values { get; } Property Value Type Description LurchTable.ValueCollection <> Methods | Improve this Doc View Source Add(TKey, TValue) Adds an element with the provided key and value to the System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source AddOrUpdate(TKey, TValue, KeyValueUpdate<TKey, TValue>) Adds a key/value pair to the System.Collections.Generic.IDictionary<TKey, TValue> if the key does not already exist, or updates a key/value pair if the key already exists. Declaration public TValue AddOrUpdate(TKey key, TValue addValue, KeyValueUpdate<TKey, TValue> fnUpdate) Parameters Type Name Description TKey key TValue addValue KeyValueUpdate <TKey, TValue> fnUpdate Returns Type Description TValue | Improve this Doc View Source AddOrUpdate(TKey, Func<TKey, TValue>, KeyValueUpdate<TKey, TValue>) Adds a key/value pair to the System.Collections.Generic.IDictionary<TKey, TValue> if the key does not already exist, or updates a key/value pair if the key already exists. Declaration public TValue AddOrUpdate(TKey key, Func<TKey, TValue> fnCreate, KeyValueUpdate<TKey, TValue> fnUpdate) Parameters Type Name Description TKey key System.Func <TKey, TValue> fnCreate KeyValueUpdate <TKey, TValue> fnUpdate Returns Type Description TValue Remarks Adds or modifies an element with the provided key and value. If the key does not exist in the collection, the factory method fnCreate will be called to produce the new value, if the key exists, the converter method fnUpdate will be called to create an updated value. | Improve this Doc View Source AddOrUpdate<T>(TKey, ref T) Add, update, or fetche a key/value pair from the dictionary via an implementation of the CSharpTest.Net.Collections.ICreateOrUpdateValue`2 interface. Declaration public bool AddOrUpdate<T>(TKey key, ref T createOrUpdateValue) where T : ICreateOrUpdateValue<TKey, TValue> Parameters Type Name Description TKey key T createOrUpdateValue Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source Clear() Removes all items from the System.Collections.Generic.ICollection<T> . Declaration public void Clear() | Improve this Doc View Source ContainsKey(TKey) Determines whether the System.Collections.Generic.IDictionary<TKey, TValue> contains an element with the specified key. Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Dequeue() Removes the oldest entry in the collection based on the ordering supplied to the constructor. If an item is not available a busy-wait loop is used to wait for for an item. Declaration public KeyValuePair<TKey, TValue> Dequeue() Returns Type Description System.Collections.Generic.KeyValuePair <TKey, TValue> The Key/Value pair removed. Exceptions Type Condition System.InvalidOperationException Raised if the table is unordered | Improve this Doc View Source Dispose() Clears references to all objects and invalidates the collection Declaration public void Dispose() | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the collection. Declaration public LurchTable<TKey, TValue>.Enumerator GetEnumerator() Returns Type Description LurchTable.Enumerator <> | Improve this Doc View Source GetOrAdd(TKey, TValue) Adds a key/value pair to the System.Collections.Generic.IDictionary<TKey, TValue> if the key does not already exist. Declaration public TValue GetOrAdd(TKey key, TValue value) Parameters Type Name Description TKey key The key of the element to add. TValue value The value to be added, if the key does not already exist. Returns Type Description TValue | Improve this Doc View Source GetOrAdd(TKey, Func<TKey, TValue>) Adds a key/value pair to the System.Collections.Generic.IDictionary<TKey, TValue> if the key does not already exist. Declaration public TValue GetOrAdd(TKey key, Func<TKey, TValue> fnCreate) Parameters Type Name Description TKey key The key of the element to add. System.Func <TKey, TValue> fnCreate Constructs a new value for the key. Returns Type Description TValue | Improve this Doc View Source Initialize() WARNING: not thread-safe, reinitializes all internal structures. Use Clear() for a thread-safe delete all. If you have externally provided exclusive access this method may be used to more efficiently clear the collection. Declaration public void Initialize() | Improve this Doc View Source Peek(out KeyValuePair<TKey, TValue>) Retrieves the oldest entry in the collection based on the ordering supplied to the constructor. Declaration public bool Peek(out KeyValuePair<TKey, TValue> value) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> value Returns Type Description System.Boolean True if the out parameter value was set. Exceptions Type Condition System.InvalidOperationException Raised if the table is unordered | Improve this Doc View Source Remove(TKey) Removes the element with the specified key from the System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key The key of the element to remove. Returns Type Description System.Boolean true if the element is successfully removed; otherwise, false. This method also returns false if key was not found in the original System.Collections.Generic.IDictionary<TKey, TValue> . | Improve this Doc View Source TryAdd(TKey, TValue) Adds an element with the provided key and value to the System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public bool TryAdd(TKey key, TValue value) Parameters Type Name Description TKey key The object to use as the key of the element to add. TValue value The object to use as the value of the element to add. Returns Type Description System.Boolean | Improve this Doc View Source TryAdd(TKey, Func<TKey, TValue>) Adds an element with the provided key and value to the System.Collections.Generic.IDictionary<TKey, TValue> by calling the provided factory method to construct the value if the key is not already present in the collection. Declaration public bool TryAdd(TKey key, Func<TKey, TValue> fnCreate) Parameters Type Name Description TKey key System.Func <TKey, TValue> fnCreate Returns Type Description System.Boolean | Improve this Doc View Source TryDequeue(out KeyValuePair<TKey, TValue>) Removes the oldest entry in the collection based on the ordering supplied to the constructor. Declaration public bool TryDequeue(out KeyValuePair<TKey, TValue> value) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> value Returns Type Description System.Boolean False if no item was available Exceptions Type Condition System.InvalidOperationException Raised if the table is unordered | Improve this Doc View Source TryDequeue(Predicate<KeyValuePair<TKey, TValue>>, out KeyValuePair<TKey, TValue>) Removes the oldest entry in the collection based on the ordering supplied to the constructor. Declaration public bool TryDequeue(Predicate<KeyValuePair<TKey, TValue>> predicate, out KeyValuePair<TKey, TValue> value) Parameters Type Name Description System.Predicate < System.Collections.Generic.KeyValuePair <TKey, TValue>> predicate System.Collections.Generic.KeyValuePair <TKey, TValue> value Returns Type Description System.Boolean False if no item was available Exceptions Type Condition System.InvalidOperationException Raised if the table is unordered | Improve this Doc View Source TryGetValue(TKey, out TValue) Gets the value associated with the specified key. Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean true if the object that implements System.Collections.Generic.IDictionary<TKey, TValue> contains an element with the specified key; otherwise, false. | Improve this Doc View Source TryRemove(TKey, out TValue) Removes the element with the specified key from the System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public bool TryRemove(TKey key, out TValue value) Parameters Type Name Description TKey key The key of the element to remove. TValue value The value that was removed. Returns Type Description System.Boolean true if the element is successfully removed; otherwise, false. This method also returns false if key was not found in the original System.Collections.Generic.IDictionary<TKey, TValue> . | Improve this Doc View Source TryRemove(TKey, KeyValuePredicate<TKey, TValue>) Removes the element with the specified key from the System.Collections.Generic.IDictionary<TKey, TValue> if the fnCondition predicate is null or returns true. Declaration public bool TryRemove(TKey key, KeyValuePredicate<TKey, TValue> fnCondition) Parameters Type Name Description TKey key KeyValuePredicate <TKey, TValue> fnCondition Returns Type Description System.Boolean | Improve this Doc View Source TryRemove<T>(TKey, ref T) Conditionally removes a key/value pair from the dictionary via an implementation of the CSharpTest.Net.Collections.IRemoveValue`2 interface. Declaration public bool TryRemove<T>(TKey key, ref T removeValue) where T : IRemoveValue<TKey, TValue> Parameters Type Name Description TKey key T removeValue Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source TryUpdate(TKey, TValue) Updates an element with the provided key to the value if it exists. Declaration public bool TryUpdate(TKey key, TValue value) Parameters Type Name Description TKey key The object to use as the key of the element to update. TValue value The new value for the key if found. Returns Type Description System.Boolean Returns true if the key provided was found and updated to the value. | Improve this Doc View Source TryUpdate(TKey, TValue, TValue) Updates an element with the provided key to the value if it exists. Declaration public bool TryUpdate(TKey key, TValue value, TValue comparisonValue) Parameters Type Name Description TKey key The object to use as the key of the element to update. TValue value The new value for the key if found. TValue comparisonValue The value that is compared to the value of the element with key. Returns Type Description System.Boolean Returns true if the key provided was found and updated to the value. | Improve this Doc View Source TryUpdate(TKey, KeyValueUpdate<TKey, TValue>) Modify the value associated with the result of the provided update method as an atomic operation, Allows for reading/writing a single record within the syncronization lock. Declaration public bool TryUpdate(TKey key, KeyValueUpdate<TKey, TValue> fnUpdate) Parameters Type Name Description TKey key KeyValueUpdate <TKey, TValue> fnUpdate Returns Type Description System.Boolean Events | Improve this Doc View Source ItemAdded Event raised after an item is added to the collection Declaration public event Action<KeyValuePair<TKey, TValue>> ItemAdded Event Type Type Description System.Action < System.Collections.Generic.KeyValuePair <TKey, TValue>> | Improve this Doc View Source ItemRemoved Event raised after an item is removed from the collection Declaration public event Action<KeyValuePair<TKey, TValue>> ItemRemoved Event Type Type Description System.Action < System.Collections.Generic.KeyValuePair <TKey, TValue>> | Improve this Doc View Source ItemUpdated Event raised after an item is updated in the collection Declaration public event LurchTable<TKey, TValue>.ItemUpdatedMethod ItemUpdated Event Type Type Description LurchTable.ItemUpdatedMethod <> Explicit Interface Implementations | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue>) Declaration void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue>) Declaration bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration void ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.IsReadOnly Declaration bool ICollection<KeyValuePair<TKey, TValue>>.IsReadOnly { get; } Returns Type Description System.Boolean | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue>) Declaration bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source IDictionary<TKey, TValue>.Keys Declaration [Obsolete] ICollection<TKey> IDictionary<TKey, TValue>.Keys { get; } Returns Type Description System.Collections.Generic.ICollection <TKey> | Improve this Doc View Source IDictionary<TKey, TValue>.Values Declaration [Obsolete] ICollection<TValue> IDictionary<TKey, TValue>.Values { get; } Returns Type Description System.Collections.Generic.ICollection <TValue> | Improve this Doc View Source IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator() Declaration IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable Extension Methods DictionaryExtensions.PutAll<TKey, TValue>(IDictionary<TKey, TValue>, IEnumerable<KeyValuePair<TKey, TValue>>) DictionaryExtensions.EntrySet<TKey, TValue>(IDictionary<TKey, TValue>) DictionaryExtensions.Put<TKey, TValue>(IDictionary<TKey, TValue>, TKey, TValue) EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTableCorruptionException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTableCorruptionException.html",
    "title": "Class LurchTableCorruptionException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LurchTableCorruptionException Exception class: LurchTableCorruptionException The LurchTable internal datastructure appears to be corrupted. Inheritance System.Object System.Exception LurchTableCorruptionException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class LurchTableCorruptionException : Exception Constructors | Improve this Doc View Source LurchTableCorruptionException() The LurchTable internal datastructure appears to be corrupted. Declaration public LurchTableCorruptionException() | Improve this Doc View Source LurchTableCorruptionException(Exception) The LurchTable internal datastructure appears to be corrupted. Declaration public LurchTableCorruptionException(Exception innerException) Parameters Type Name Description System.Exception innerException | Improve this Doc View Source LurchTableCorruptionException(Exception, Int32, String) Constructs the exception from an hresult and message bypassing the message formatting Declaration protected LurchTableCorruptionException(Exception innerException, int hResult, string message) Parameters Type Name Description System.Exception innerException System.Int32 hResult System.String message Methods | Improve this Doc View Source Assert(Boolean) if(condition == false) throws The LurchTable internal datastructure appears to be corrupted. Declaration public static void Assert(bool condition) Parameters Type Name Description System.Boolean condition Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.State.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.State.html",
    "title": "Class State | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class State Automaton state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object State Implements System.IComparable < State > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class State : IComparable<State> Constructors | Improve this Doc View Source State() Constructs a new state. Initially, the new state is a reject state. Declaration public State() Properties | Improve this Doc View Source Accept Sets acceptance for this state. If true , this state is an accept state. Declaration public virtual bool Accept { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Number Return this state's number. Expert: Will be useless unless GetNumberedStates() has been called first to number the states. Declaration public virtual int Number { get; } Property Value Type Description System.Int32 The number. | Improve this Doc View Source NumTransitions Declaration public virtual int NumTransitions { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TransitionsArray Declaration public Transition[] TransitionsArray { get; } Property Value Type Description Transition [] Methods | Improve this Doc View Source AddTransition(Transition) Adds an outgoing transition. Declaration public virtual void AddTransition(Transition t) Parameters Type Name Description Transition t Transition. | Improve this Doc View Source CompareTo(State) Compares this object with the specified object for order. States are ordered by the time of construction. Declaration public virtual int CompareTo(State s) Parameters Type Name Description State s Returns Type Description System.Int32 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetTransitions() Returns the set of outgoing transitions. Subsequent changes are reflected in the automaton. Declaration public virtual IEnumerable<Transition> GetTransitions() Returns Type Description System.Collections.Generic.IEnumerable < Transition > Transition set. | Improve this Doc View Source Reduce() Reduces this state. A state is \"reduced\" by combining overlapping and adjacent edge intervals with same destination. Declaration public virtual void Reduce() | Improve this Doc View Source SetTransitions(Transition[]) Declaration public virtual void SetTransitions(Transition[] transitions) Parameters Type Name Description Transition [] transitions | Improve this Doc View Source SortTransitions(IComparer<Transition>) Returns sorted list of outgoing transitions. Declaration public virtual void SortTransitions(IComparer<Transition> comparer) Parameters Type Name Description System.Collections.Generic.IComparer < Transition > comparer Comparer to sort with. | Improve this Doc View Source Step(Int32) Performs lookup in transitions, assuming determinism. Declaration public virtual State Step(int c) Parameters Type Name Description System.Int32 c Codepoint to look up. Returns Type Description State Destination state, null if no matching outgoing transition. See Also Step(Int32, ICollection<State>) | Improve this Doc View Source Step(Int32, ICollection<State>) Performs lookup in transitions, allowing nondeterminism. Declaration public virtual void Step(int c, ICollection<State> dest) Parameters Type Name Description System.Int32 c Codepoint to look up. System.Collections.Generic.ICollection < State > dest Collection where destination states are stored. See Also Step(Int32) | Improve this Doc View Source ToString() Returns string describing this state. Normally invoked via ToString() . Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source TrimTransitionsArray() Downsizes transitionArray to numTransitions. Declaration public virtual void TrimTransitionsArray() Implements System.IComparable<T> Extension Methods Number.IsNumber(Object)"
  },
  "cli/analysis/stempel-patch-stems.html": {
    "href": "cli/analysis/stempel-patch-stems.html",
    "title": "stempel-patch-stems | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "stempel-patch-stems Name analysis-stempel-patch-stems - Generates patch commands from an already prepared stemmer table for the Egothor stemmer in the Lucene.Net.Analysis.Stempel project. Synopsis lucene analysis stempel-patch-stems <STEMMER_TABLE_FILE> [-e|--encoding] [?|-h|--help] Description See the Egothor project documentation for more information. Arguments STEMMER_TABLE_FILE The path to a file containing a stemmer table. Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the stemmer files. If not supplied, the default value is UTF-8 . Note this value can alternatively be supplied by setting the environment variable egothor.stemmer.charset . Example lucene analysis stempel-patch-stems X:\\stemmer-data\\table1.txt X:\\stemmer-data\\table2.txt --encoding UTF-16"
  },
  "cli/analysis/stempel-compile-stems.html": {
    "href": "cli/analysis/stempel-compile-stems.html",
    "title": "stempel-compile-stems | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "stempel-compile-stems Name analysis-stempel-compile-stems - Compiles a stemmer table for the Egothor stemmer in the Lucene.Net.Analysis.Stempel project. Synopsis lucene analysis stempel-compile-stems <STEMMING_ALGORITHM> <STEMMER_TABLE_FILE> [-e|--encoding] [?|-h|--help] Description See the Egothor project documentation for more information. Arguments STEMMING_ALGORITHM The name of the desired stemming algorithm to use. Possible values are Multi (which changes the stemmer to use the MultiTrie2 rather than a Trie class to store its data) or 0 which instructs the stemmer to store the original data. Any other supplied value will use the default algorithm. See the Egothor project documentation for more information. STEMMER_TABLE_FILE The path to a file containing a stemmer table. Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the stemmer files. If not supplied, the default value is UTF-8 . Note this value can alternatively be supplied by setting the environment variable egothor.stemmer.charset . Example lucene analysis stempel-compile-stems test X:\\stemmer-data\\table1.txt X:\\stemmer-data\\table2.txt"
  },
  "cli/analysis/index.html": {
    "href": "cli/analysis/index.html",
    "title": "analysis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "analysis Description Utilities to manage specialized analyzers. Commands kuromoji-build-dictionary stempel-compile-stems stempel-patch-stems"
  },
  "cli/index.html": {
    "href": "cli/index.html",
    "title": "Lucene.Net command line interface (CLI) tools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Lucene.Net command line interface (CLI) tools The Lucene.Net command line interface (CLI) is a new cross-platform toolchain with utilities for maintaining Lucene.Net and demos for learning basic Lucene.Net functionality. Prerequisites .NET Core 2.1 Runtime Installation Perform a one-time install of the lucene-cli tool using the following dotnet CLI command: dotnet tool install lucene-cli -g --version 4.8.0-beta00006 You may then use the lucene-cli tool to analyze and update Lucene.Net indexes and use its demos. CLI Commands The following commands are installed: analysis demo index lock Command structure CLI command structure consists of the driver (\"lucene\"), the command, and possibly command arguments and options. You see this pattern in most CLI operations, such as checking a Lucene.Net index for problematic segments and fixing (removing) them: lucene index check C:\\my-index --verbose lucene index fix C:\\my-index"
  },
  "cli/lock/verify-server.html": {
    "href": "cli/lock/verify-server.html",
    "title": "verify-server | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "verify-server Name lock-verify-server - Server that must be running when you use VerifyingLockFactory (or stress-test ). Synopsis lucene lock verify-server <IP_HOSTNAME> <MAX_CLIENTS> [?|-h|--help] Description This server simply verifies that at most one process holds the lock at a time. Arguments IP_HOSTNAME Hostname or IP address that verify-server will listen on. MAX_CLIENTS The maximum number of threads that are observing the lock from within the verify-server process. When using stress-test , each thread will be used by a single connected client and the server won't start running until this number of clients is reached. Options ?|-h|--help Prints out a short help for the command. Example Run the server on IP 127.0.0.4 with a 10 connected clients: lucene lock verify-server 127.0.0.4 10"
  },
  "cli/lock/stress-test.html": {
    "href": "cli/lock/stress-test.html",
    "title": "stress-test | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "stress-test Name lock-stress-test - Simple tool that forever acquires and releases a lock using a specific LockFactory . Synopsis lucene lock stress-test <ID> <VERIFIER_HOST> <VERIFIER_PORT> <LOCK_FACTORY_TYPE> <LOCK_DIRECTORY> <SLEEP_TIME_MS> <TRIES> [?|-h|--help] Description You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running verify-server . Arguments ID An integer from 0 - 255 (should be unique for test process). VERIFIER_HOST Hostname or IP address that verify-server is listening on. VERIFIER_PORT Port that verify-server is listening on. LOCK_FACTORY_TYPE The primary LockFactory implementation that we will use. LOCK_DIRECTORY The path to the lock directory (only utilized if LOCK_FACTORY_TYPE is set to SimpleFSLockFactory or NativeFSLockFactory ). SLEEP_TIME_MS Milliseconds to pause between each lock obtain/release. TRIES Number of locking tries. Options ?|-h|--help Prints out a short help for the command. Example Run the client (stress test), connecting to the server on IP address 127.0.0.4 and port 54464 using the ID 3, the NativeFSLockFactory , specifying the lock directory as F:\\temp , sleep for 50 milliseconds, and try to obtain a lock up to 10 times: lucene lock stress-test 3 127.0.0.4 54464 NativeFSLockFactory F:\\temp 50 10"
  },
  "cli/lock/index.html": {
    "href": "cli/lock/index.html",
    "title": "lock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "lock Description Utilities for verifying concurrent locking integrity. Commands stress-test verify-server"
  },
  "cli/index/upgrade.html": {
    "href": "cli/index/upgrade.html",
    "title": "upgrade | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "upgrade Name index-upgrade - Upgrades all segments of an index from previous Lucene.Net versions to the current segment file format. Synopsis lucene index upgrade [<INDEX_DIRECTORY>] [-d|--delete-prior-commits] [-v|--verbose] [-dir|--directory-type] [?|-h|--help] Description This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. WARNING: This tool may reorder document IDs! Be sure to make a backup of your index before you use this. Also, ensure you are using the correct version of this utility to match your application's version of Lucene.Net. This operation cannot be reversed. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -d|--delete-prior-commits Deletes prior commits. -v|--verbose Verbose output. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. Defaults to the optional FSDirectory for your OS platform. Examples Upgrade the index format of the index located at X:\\lucene-index\\ to the same version as this tool, using the SimpleFSDirectory implementation: lucene index upgrade X:\\lucene-index -dir SimpleFSDirectory Upgrade the index located at C:\\indexes\\category-index\\ verbosely, deleting all but the last commit: lucene index upgrade C:\\indexes\\category-index --verbose --delete-prior-commits"
  },
  "cli/index/split.html": {
    "href": "cli/index/split.html",
    "title": "split | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "split Name index-split - Splits an index into multiple equal parts. Synopsis lucene index split <OUTPUT_DIRECTORY> <INPUT_DIRECTORY>[ <INPUT_DIRECTORY_2>...] [-n|--number-of-parts] [-s|--sequential] [?|-h|--help] Description Splits the input index into multiple equal parts. The method employed here uses IndexWriter.AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document ids that fall outside the selected partition. Deletes are only applied to a buffered list of deleted documents and don't affect the source index. This tool works also with read-only indexes. The disadvantage of this tool is that source index needs to be read as many times as there are parts to be created. The multiple passes may be slow. NOTE: This tool is unaware of documents added automatically via IndexWriter.AddDocuments(IEnumerable&lt;IEnumerable&lt;IIndexableField&gt;&gt;, Analyzer) or IndexWriter.UpdateDocuments(Term, IEnumerable&lt;IEnumerable&lt;IIndexableField&gt;&gt;, Analyzer) , which means it can easily break up such document groups. Arguments OUTPUT_DIRECTORY Path to output directory to contain partial indexes. INPUT_DIRECTORY, INPUT_DIRECTORY_2 The path of the source index, which can have deletions and can have multiple segments (or multiple readers). Multiple values can be supplied separated by a space. Options ?|-h|--help Prints out a short help for the command. -n|--number-of-parts <NUMBER> The number of parts (output indices) to produce. If omitted, defaults to 2. -s|--sequential Sequential doc-id range split (default is round-robin). Example Split the index located at X:\\old-index\\ sequentially, placing the resulting 2 indices into the X:\\new-index\\ directory: lucene index split X:\\new-index X:\\old-index --sequential Split the index located at T:\\in\\ into 4 parts and place them into the T:\\out\\ directory: lucene index split T:\\out T:\\in -n 4"
  },
  "cli/index/merge.html": {
    "href": "cli/index/merge.html",
    "title": "merge | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "merge Name index-merge - Merges multiple indexes into a single index. Synopsis lucene index merge <OUTPUT_DIRECTORY> <INPUT_DIRECTORY> <INPUT_DIRECTORY_2>[ <INPUT_DIRECTORY_N>...] [?|-h|--help] Description Merges the the input index directories into a combined index at the output directory path. Arguments OUTPUT_DIRECTORY The output directory to merge the input indexes into. INPUT_DIRECTORY, INPUT_DIRECTORY_2, INPUT_DIRECTORY_N Two or more input index directories, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Merge the indexes C:\\product-index1 and C:\\product-index2 into an index located at X:\\merged-index : lucene index merge X:\\merged-index C:\\product-index1 C:\\product-index2"
  },
  "cli/index/list-term-info.html": {
    "href": "cli/index/list-term-info.html",
    "title": "list-term-info | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-term-info Name index-list-term-info - Gets document frequency and total number of occurrences of a term. Synopsis lucene index list-term-info <INDEX_DIRECTORY> <FIELD> <TERM> [?|-h|--help] Description Gets document frequency and total number of occurrences (sum of the term frequency for each document) of a term. Arguments INDEX_DIRECTORY The directory of the index. FIELD The field to consider. TERM The term to consider. Options ?|-h|--help Prints out a short help for the command. Example List the term information from the index located at C:\\project-index\\ : lucene index list-term-info C:\\project-index"
  },
  "cli/index/list-taxonomy-stats.html": {
    "href": "cli/index/list-taxonomy-stats.html",
    "title": "list-taxonomy-stats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-taxonomy-stats Name index-list-taxonomy-stats - Displays the taxonomy statistical information for a taxonomy index. Synopsis lucene index list-taxonomy-stats [<INDEX_DIRECTORY>] [-tree|--show-tree] [?|-h|--help] Description Prints how many ords are under each dimension. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. NOTE: This directory must be a facet taxonomy directory for the command to succeed. Options ?|-h|--help Prints out a short help for the command. -tree|--show-tree Recursively lists all descendant nodes. Example List the taxonomy statistics from the index located at X:\\category-taxonomy-index\\ , viewing all descendant nodes: lucene index list-taxonomy-stats X:\\category-taxonomy-index -tree"
  },
  "cli/index/list-segments.html": {
    "href": "cli/index/list-segments.html",
    "title": "list-segments | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-segments Name index-list-segments - Lists segments in an index. Synopsis lucene index list-segments [<INDEX_DIRECTORY>] [?|-h|--help] Description After running this command to view segments, use copy-segments to copy segments from one index directory to another or delete-segments to remove segments from an index. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. Example List the segments in the index located at X:\\lucene-index\\ : lucene index list-segments X:\\lucene-index"
  },
  "cli/index/list-high-freq-terms.html": {
    "href": "cli/index/list-high-freq-terms.html",
    "title": "list-high-freq-terms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-high-freq-terms Name index-list-high-freq-terms - Lists the top N most frequent terms by document frequency. Synopsis lucene index list-high-freq-terms [<INDEX_DIRECTORY>] [-t|--total-term-frequency] [-n|--number-of-terms] [-f|--field] [?|-h|--help] Description Extracts the top N most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -t|--total-term-frequency Specifies that both the document frequency and term frequency are reported, ordered by descending total term frequency. -n|--number-of-terms <NUMBER> The number of terms to consider. If omitted, defaults to 100. -f|--field <FIELD> The field to consider. If omitted, considers all fields. Examples List the high frequency terms in the index located at F:\\product-index\\ on the description field, reporting both document frequency and term frequency: lucene index list-high-freq-terms F:\\product-index --total-term-frequency --field description List the high frequency terms in the index located at C:\\lucene-index\\ on the name field, tracking 30 terms: lucene index list-high-freq-terms C:\\lucene-index --f name -n 30"
  },
  "cli/index/list-cfs.html": {
    "href": "cli/index/list-cfs.html",
    "title": "list-cfs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "list-cfs Name index-list-cfs - Lists sub-files from a .cfs compound file. Synopsis lucene index list-cfs <CFS_FILE_NAME> [-dir|--directory-type] [?|-h|--help] Description Prints the filename and size of each file within a given .cfs compound file. The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc. Arguments CFS_FILE_NAME The .cfs compound file containing words to parse. Options ?|-h|--help Prints out a short help for the command. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If omitted, defaults to the optimal FSDirectory for your OS platform. Example Lists the files within the X:\\categories\\_53.cfs compound file using the NIOFSDirectory directory implementation: lucene index list-cfs X:\\categories_53.cfs -dir NIOFSDirectory"
  },
  "cli/index/index.html": {
    "href": "cli/index/index.html",
    "title": "index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "index Description Utilities to manage specialized analyzers. WARNING: Many of these operations change an index in ways that cannot be reversed. Always make a backup of your index before running these commands. Commands check copy-segments delete-segments extract-cfs fix list-cfs list-high-freq-terms list-segments list-taxonomy-stats list-term-info merge split upgrade"
  },
  "cli/index/fix.html": {
    "href": "cli/index/fix.html",
    "title": "fix | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "fix Name index-fix - Fixes an index by removing problematic segments. Synopsis lucene index fix [<INDEX_DIRECTORY>] [-v|--verbose] [-c|--cross-check-term-vectors] [-dir|--directory-type] [--dry-run] [?|-h|--help] Description Basic tool to write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. WARNING: This command should only be used on an emergency basis as it will cause documents (perhaps many) to be permanently removed from the index. Always make a backup copy of your index before running this! Do not run this tool on an index that is actively being written to. You have been warned! Arguments INDEX_DIRECTORY The directory of the index. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -v|--verbose Enables verbose output. -c|--cross-check-term-vectors Cross check term vectors. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If omitted, it defaults to the optimal FSDirectory for your OS platform. --dry-run Doesn't change the index, but reports any actions that would be taken if this option were not supplied. Examples Check what a fix operation would do if run on the index located at X:\\product-index\\ , using verbose output: lucene index fix X:\\product-index --verbose --dry-run Fix the index located at X:\\product-index and cross check term vectors: lucene index fix X:\\product-index -c"
  },
  "cli/index/extract-cfs.html": {
    "href": "cli/index/extract-cfs.html",
    "title": "extract-cfs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "extract-cfs Name index-extract-cfs - Extracts sub-files from a .cfs compound file. Synopsis lucene index extract-cfs <CFS_FILE_NAME> [-dir|--directory-type] [?|-h|--help] Description Extracts .cfs compound files (that were created using the CompoundFileDirectory from Lucene.Net.Misc) to the current working directory. In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored. Arguments CFS_FILE_NAME The path to a .cfs compound file containing words to parse. Options ?|-h|--help Prints out a short help for the command. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If ommitted, it defaults to the optimal FSDirectory for your OS platform. Examples Extract the files from the compound file at X:\\lucene-index\\_81.cfs to the current working directory: lucene index extract-cfs X:\\lucene-index_81.cfs Extract the files from the compound file at X:\\lucene-index\\_64.cfs to the current working directory using the SimpleFSDirectory implementation: lucene index extract-cfs X:\\lucene-index_64.cfs --directory-type SimpleFSDirectory"
  },
  "cli/index/delete-segments.html": {
    "href": "cli/index/delete-segments.html",
    "title": "delete-segments | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "delete-segments Name index-delete-segments - Deletes segments from an index. Synopsis lucene index delete-segments <INDEX_DIRECTORY> <SEGMENT>[ <SEGMENT_2>...] [?|-h|--help] Description You can easily accidentally remove segments from your index, so be careful! Always make a backup of your index first. Arguments INDEX_DIRECTORY The directory of the index. SEGMENT The segments to delete, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Delete the segments named _8c and _83 from the index located at X:\\category-data\\ : lucene index delete-segments X:\\category-data _8c _83"
  },
  "cli/index/copy-segments.html": {
    "href": "cli/index/copy-segments.html",
    "title": "copy-segments | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "copy-segments Name index-copy-segments - Copies segments from one index to another index. Synopsis lucene index copy-segments <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> <SEGMENT>[ <SEGMENT_2>...] [?|-h|--help] Description This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple FileStream) so it will not work with non FSDirectory Directory implementations. Arguments INPUT_DIRECTORY The directory of the index to copy. OUTPUT_DIRECTORY The directory of the destination index. SEGMENT, SEGMENT_2 The segments to copy, separated by a space. Options ?|-h|--help Prints out a short help for the command. Example Copy the _71_Lucene41_0 segment from the index located at X:\\lucene-index to the index located at X:\\output : lucene index copy-segments X:\\lucene-index X:\\output _71_Lucene41_0"
  },
  "cli/index/check.html": {
    "href": "cli/index/check.html",
    "title": "check | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "check Name index-check - Checks an index for problematic segments. Synopsis lucene index check [<INDEX_DIRECTORY>] [-v|--verbose] [-c|--cross-check-term-vectors] [-dir|--directory-type] [-s|--segment] [?|-h|--help] Description Basic tool to check the health of an index. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Arguments INDEX_DIRECTORY The path to the directory of the index to check. If omitted, it defaults to the current working directory. Options ?|-h|--help Prints out a short help for the command. -v|--verbose Enable verbose output. -c|--cross-check-term-vectors Cross-check term vectors. -dir|--directory-type <DIRECTORY_TYPE> The FSDirectory implementation to use. If ommitted, it defaults to the optimal FSDirectory for your OS platform. -s|--segment <SEGMENT> Only check the specified segment(s). This can be specified multiple times, to check more than one segment, eg --segment _2 --segment _a. Examples Check the index located at X:\\lucenenet-index\\ verbosely, scanning only the segments named _1j_Lucene41_0 and _2u_Lucene41_0 for problems: lucene index check X:\\lucenenet-index -v -s _1j_Lucene41_0 -s _2u_Lucene41_0 Check the index located at C:\\taxonomy\\ using the MMapDirectory memory-mapped directory implementation: lucene index check C:\\taxonomy --directory-type MMapDirectory"
  },
  "cli/demo/simple-sorted-set-facets.html": {
    "href": "cli/demo/simple-sorted-set-facets.html",
    "title": "simple-sorted-set-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "simple-sorted-set-facets Name demo-simple-sorted-set-facets - Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts. Synopsis lucene demo simple-sorted-set-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo simple-sorted-set-facets"
  },
  "cli/demo/simple-facets.html": {
    "href": "cli/demo/simple-facets.html",
    "title": "simple-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "simple-facets Name demo-simple-facets - Shows simple usage of faceted indexing and searching. Synopsis lucene demo simple-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo simple-facets"
  },
  "cli/demo/search-files.html": {
    "href": "cli/demo/search-files.html",
    "title": "search-files | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "search-files Name demo-search-files - Simple command-line based search demo. Synopsis lucene demo search-files \\<INDEX_DIRECTORY> [-f|--field] [-r|--repeat] [-qf|--queries-file] [-q|--query] [--raw] [-p|--page-size] [?|-h|--help] lucene demo search-files [-src|--view-source-code] [-out|--output-source-code] Description Run the index-files demo first to generate an index to search. NOTE: To run queries interactively in the console, omit both the --queries-file and the --query arguments. Arguments INDEX_DIRECTORY The directory of the index that has previously been created using the index-files demo . Options ?|-h|--help Prints out a short help for the command. -f|--field <FIELD> The index field to use in the search. If not supplied, defaults to contents . -r|--repeat <NUMBER> Repeat the search and time as a benchmark. -qf|--queries-file <PATH> A file containing the queries to perform. -q|--query <QUERY> A query to perform. --raw Output raw format. -p|--page-size <NUMBER> Hits per page to display. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Examples Search the index located in the X:\\test-index directory interactively, showing 15 results per page in raw format: lucene demo search-files X:\\test-index -p 15 --raw Run the query \"foobar\" against the \"path\" field in the index located in the X:\\test-index directory: lucene demo search-files X:\\test-index --field path --query foobar"
  },
  "cli/demo/range-facets.html": {
    "href": "cli/demo/range-facets.html",
    "title": "range-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "range-facets Name demo-range-facets - Shows simple usage of dynamic range faceting. Synopsis lucene demo range-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo range-facets"
  },
  "cli/demo/multi-category-lists-facets.html": {
    "href": "cli/demo/multi-category-lists-facets.html",
    "title": "multi-category-lists-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "multi-category-lists-facets Name demo-multi-category-lists-facets - Demonstrates indexing categories into different indexed fields. Synopsis lucene demo multi-category-lists-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo multi-category-lists-facets"
  },
  "cli/demo/index.html": {
    "href": "cli/demo/index.html",
    "title": "demo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "demo Description Demos for various Lucene.Net functionality including C# code samples. Commands associations-facets distance-facets expression-aggregation-facets index-files multi-category-lists-facets range-facets search-files simple-facets simple-sorted-set-facets"
  },
  "cli/demo/index-files.html": {
    "href": "cli/demo/index-files.html",
    "title": "index-files | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "index-files Name demo-index-files - Index all files under a directory. Synopsis lucene demo index-files \\<INDEX_DIRECTORY> \\<SOURCE_DIRECTORY> [-u|--update] [?|-h|--help] lucene demo index-files [-src|--view-source-code] [-out|--output-source-code] Description This demo can be used to learn how to build a Lucene.Net index. After the index has been built, you can run the search-files demo to run queries against it. Arguments INDEX_DIRECTORY The directory of the index. SOURCE_DIRECTORY The source directory containing the files to index. This directory will be analyzed recursively. Options ?|-h|--help Prints out a short help for the command. -u|--update Adds new documents to an existing index. If not supplied, any existing index in the INDEX_DIRECTORY will be overwritten. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example Indexes the contents of C:\\Users\\BGates\\Documents\\ and places the Lucene.Net index in X:\\test-index\\ . lucene demo index-files X:\\test-index C:\\Users\\BGates\\Documents"
  },
  "cli/demo/expression-aggregation-facets.html": {
    "href": "cli/demo/expression-aggregation-facets.html",
    "title": "expression-aggregation-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "expression-aggregation-facets Name demo-expression-aggregation-facets - Shows facets aggregation by an expression. Synopsis lucene demo expression-aggregation-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo expression-aggregation-facets"
  },
  "cli/demo/distance-facets.html": {
    "href": "cli/demo/distance-facets.html",
    "title": "distance-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "distance-facets Name demo-distance-facets - Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. Synopsis lucene demo distance-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo distance-facets"
  },
  "cli/demo/associations-facets.html": {
    "href": "cli/demo/associations-facets.html",
    "title": "associations-facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "associations-facets Name demo-associations-facets - Shows example usage of category associations. Synopsis lucene demo associations-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example lucene demo associations-facets"
  },
  "cli/benchmark/sample.html": {
    "href": "cli/benchmark/sample.html",
    "title": "sample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "sample Name benchmark-sample - Sample of a performance test written programatically instead of using an algorithm file. Synopsis lucene benchmark sample [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help] Options ?|-h|--help Prints out a short help for the command. -src|--view-source-code Prints the source code to the console. Use SPACE or n to move to the next page of text, ENTER to scroll to the next line of text, q or x to quit. -out|--output-source-code <DIRECTORY> Outputs the source code to the specified directory. Example Runs the sample. lucene benchmark sample"
  },
  "cli/benchmark/run.html": {
    "href": "cli/benchmark/run.html",
    "title": "run | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "run Name benchmark-run - Runs a benchmark based on an algorithm file. Synopsis lucene benchmark run <ALGORITHM_FILE> <OUTPUT_DIRECTORY> [?|-h|--help] Arguments ALGORITHM_FILE An algorithm file specifying the parameters of the benchmark to run. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. Example Runs a benchmark on the c:\\check.alg algorithm file. lucene benchmark run c:\\check.alg"
  },
  "cli/benchmark/run-trec-eval.html": {
    "href": "cli/benchmark/run-trec-eval.html",
    "title": "run-trec-eval | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "run-trec-eval Name benchmark-run-trec-eval - Runs a TREC evaluation. Synopsis lucene benchmark run-trec-eval <INPUT_TOPICS_FILE> <INPUT_QUERY_RELEVANCE_FILE> <OUTPUT_SUBMISSION_FILE> <INDEX_DIRECTORY> [-t|--query-on-title] [-d|--query-on-description] [-n|--query-on-narrative] [?|-h|--help] Arguments INPUT_TOPICS_FILE Input file containing queries. INPUT_QUERY_RELEVANCE_FILE Input file conataining relevance judgements. OUTPUT_SUBMISSION_FILE Output submission file for TREC evaluation. INDEX_DIRECTORY The index directory. Options ?|-h|--help Prints out a short help for the command. -t|--query-on-title Use title field in query. This flag will automatically be on if no other field is specified. -d|--query-on-description Use description field in query. -n|--query-on-narrative Use narrative field in query. Example Runs a TREC evaluation on the c:\\topics queries file and the c:\\queries relevance judgements on the c:\\lucene-index index using the description and narrative fields and places the output in c:\\output.txt . lucene benchmark run-trec-eval c:\\topics.txt c:\\queries.txt c:\\submissions.txt c:\\output.txt c:\\lucene-index -d -n"
  },
  "cli/benchmark/index.html": {
    "href": "cli/benchmark/index.html",
    "title": "benchmark | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "benchmark Description Utilities for benchmarking Lucene.Net. Commands extract-reuters extract-wikipedia find-quality-queries run run-trec-eval sample"
  },
  "cli/benchmark/find-quality-queries.html": {
    "href": "cli/benchmark/find-quality-queries.html",
    "title": "find-quality-queries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "find-quality-queries Name benchmark-find-quality-queries - Suggests quality queries based on index contents. Used for making quality test benchmarks. Synopsis lucene benchmark find-quality-queries <INPUT_DIRECTORY> [?|-h|--help] Arguments INDEX_DIRECTORY Path to the index. Options ?|-h|--help Prints out a short help for the command. Example Finds quality queries on the c:\\lucene-index index directory. lucene benchmark find-quality-queries c:\\lucene-index"
  },
  "cli/benchmark/extract-wikipedia.html": {
    "href": "cli/benchmark/extract-wikipedia.html",
    "title": "extract-wikipedia | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "extract-wikipedia Name benchmark-extract-wikipedia - Extracts a downloaded Wikipedia dump into separate files for indexing. Synopsis lucene benchmark extract-wikipedia <INPUT_WIKIPEDIA_FILE> <OUTPUT_DIRECTORY> [-d|--discard-image-only-docs] [?|-h|--help] Arguments INPUT_WIKIPEDIA_FILE Input path to a Wikipedia XML file. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. -d|--discard-image-only-docs Tells the extractor to skip WIKI docs that contain only images. Example Extracts the c:\\wiki.xml file into the c:\\out directory, skipping any docs that only contain images. lucene benchmark extract-wikipedia c:\\wiki.xml c:\\out -d"
  },
  "cli/benchmark/extract-reuters.html": {
    "href": "cli/benchmark/extract-reuters.html",
    "title": "extract-reuters | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "extract-reuters Name benchmark-extract-reuters - Splits Reuters SGML documents into simple text files containing: Title, Date, Dateline, Body. Synopsis lucene benchmark extract-reuters <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> [?|-h|--help] Arguments INPUT_DIRECTORY Path to Reuters SGML files. OUTPUT_DIRECTORY Path to a directory where the output files will be written. Options ?|-h|--help Prints out a short help for the command. Example Extracts the reuters SGML files in the z:\\input directory and places the content in the z:\\output directory. lucene benchmark extract-reuters z:\\input z:\\output"
  },
  "cli/analysis/kuromoji-build-dictionary.html": {
    "href": "cli/analysis/kuromoji-build-dictionary.html",
    "title": "kuromoji-build-dictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "kuromoji-build-dictionary Name analysis-kuromoji-build-dictionary - Generates a set of custom dictionary files for the Lucene.Net.Analysis.Kuromoji library. Synopsis lucene analysis kuromoji-build-dictionary <FORMAT> <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> [-e|--encoding] [-n|--normalize] [?|-h|--help] Description Generates the following set of binary files: CharacterDefinition.dat ConnectionCosts.dat TokenInfoDictionary$buffer.dat TokenInfoDictionary$fst.dat TokenInfoDictionary$posDict.dat TokenInfoDictionary$targetMap.dat UnknownDictionary$buffer.dat UnknownDictionary$posDict.dat UnknownDictionary$targetMap.dat If these files are placed into a subdirectory of your application named kuromoji-data , they will be used automatically by Lucene.Net.Analysis.Kuromoji features such as the JapaneseAnalyzer or JapaneseTokenizer. To use an alternate directory location, put the path in an environment variable named kuromoji.data.dir . The files must be placed in a subdirectory of this location named kuromoji-data . See this blog post for information about the dictionary format. A sample is available at https://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/ . The Kuromoji project documentation may also be helpful. Arguments FORMAT The dictionary format. Valid values are IPADIC and UNIDIC. If an invalid value is passed, IPADIC is assumed. INPUT_DIRECTORY The directory where the dictionary input files are located. OUTPUT_DIRECTORY The directory to put the dictionary output. Options ?|-h|--help Prints out a short help for the command. -e|--encoding <ENCODING> The file encoding used by the input files. If not supplied, the default value is EUC-JP . -n|--normalize Normalize the entries using normalization form KC. Example lucene analysis kuromoji-build-dictionary IPADIC X:\\kuromoji-data X:\\kuromoji-dictionary --normalize"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoFormat.html",
    "title": "Class Lucene3xSegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene3xSegmentInfoFormat Lucene3x ReadOnly SegmentInfoFormat implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene3xSegmentInfoFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax [Obsolete(\"(4.0) this is only used to read indexes created before 4.0.\")] public class Lucene3xSegmentInfoFormat : SegmentInfoFormat Fields | Improve this Doc View Source DS_COMPOUND_KEY Declaration public static readonly string DS_COMPOUND_KEY Field Value Type Description System.String | Improve this Doc View Source DS_NAME_KEY Declaration public static readonly string DS_NAME_KEY Field Value Type Description System.String | Improve this Doc View Source DS_OFFSET_KEY Declaration public static readonly string DS_OFFSET_KEY Field Value Type Description System.String | Improve this Doc View Source FORMAT_3_1 Each segment records the Lucene version that created it. Declaration public static readonly int FORMAT_3_1 Field Value Type Description System.Int32 | Improve this Doc View Source FORMAT_DIAGNOSTICS This format adds optional per-segment String diagnostics storage, and switches userData to Map. Declaration public static readonly int FORMAT_DIAGNOSTICS Field Value Type Description System.Int32 | Improve this Doc View Source FORMAT_HAS_VECTORS Each segment records whether it has term vectors. Declaration public static readonly int FORMAT_HAS_VECTORS Field Value Type Description System.Int32 | Improve this Doc View Source NORMGEN_KEY Declaration public static readonly string NORMGEN_KEY Field Value Type Description System.String | Improve this Doc View Source NORMGEN_PREFIX Declaration public static readonly string NORMGEN_PREFIX Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_CODEC_NAME Declaration public static readonly string UPGRADED_SI_CODEC_NAME Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_EXTENSION Extension used for saving each SegmentInfo, once a 3.x index is first committed to with 4.0. Declaration public static readonly string UPGRADED_SI_EXTENSION Field Value Type Description System.String | Improve this Doc View Source UPGRADED_SI_VERSION_CURRENT Declaration public static readonly int UPGRADED_SI_VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source UPGRADED_SI_VERSION_START Declaration public static readonly int UPGRADED_SI_VERSION_START Field Value Type Description System.Int32 Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter Methods | Improve this Doc View Source GetDocStoreIsCompoundFile(SegmentInfo) Declaration public static bool GetDocStoreIsCompoundFile(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.Boolean Whether doc store files are stored in compound file (*.cfx). | Improve this Doc View Source GetDocStoreOffset(SegmentInfo) Declaration public static int GetDocStoreOffset(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.Int32 If this segment shares stored fields & vectors, this offset is where in that file this segment's docs begin. | Improve this Doc View Source GetDocStoreSegment(SegmentInfo) Declaration public static string GetDocStoreSegment(SegmentInfo si) Parameters Type Name Description SegmentInfo si Returns Type Description System.String Name used to derive fields/vectors file we share with other segments. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xSegmentInfoReader.html",
    "title": "Class Lucene3xSegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene3xSegmentInfoReader Lucene 3x implementation of SegmentInfoReader . @lucene.experimental Inheritance System.Object SegmentInfoReader Lucene3xSegmentInfoReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading existing 3.x indexes\")] public class Lucene3xSegmentInfoReader : SegmentInfoReader Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory System.String segmentName IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) | Improve this Doc View Source ReadLegacyInfos(SegmentInfos, Directory, IndexInput, Int32) Declaration public static void ReadLegacyInfos(SegmentInfos infos, Directory directory, IndexInput input, int format) Parameters Type Name Description SegmentInfos infos Directory directory IndexInput input System.Int32 format Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsFormat.html",
    "title": "Class Lucene40StoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40StoredFieldsFormat Lucene 4.0 Stored Fields Format. Stored fields are represented by two files: The field index, or .fdx file. This is used to find the location within the field data file of the fields of a particular document. Because it contains fixed-length data, this file may be easily randomly accessed. The position of document n 's field data is the Uint64 ( WriteInt64(Int64) ) at n*8 in this file. This contains, for each document, a pointer to its field data, as follows: FieldIndex (.fdx) --> <Header>, <FieldValuesPosition> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldValuesPosition --> Uint64 ( WriteInt64(Int64) ) The field data, or .fdt file. This contains the stored fields of each document, as follows: FieldData (.fdt) --> <Header>, <DocFieldData> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocFieldData --> FieldCount, <FieldNum, Bits, Value> FieldCount FieldCount --> VInt ( WriteVInt32(Int32) ) FieldNum --> VInt ( WriteVInt32(Int32) ) Bits --> Byte ( WriteByte(Byte) ) low order bit reserved. second bit is one for fields containing binary data third bit reserved. 4th to 6th bit (mask: 0x7<<3) define the type of a numeric field: all bits in mask are cleared if no numeric field at all 1<<3: Value is Int 2<<3: Value is Long 3<<3: Value is Int as Float (as of Int32BitsToSingle(Int32) 4<<3: Value is Long as Double (as of System.BitConverter.Int64BitsToDouble(System.Int64) Value --> String | BinaryValue | Int | Long (depending on Bits) BinaryValue --> ValueSize, < Byte ( WriteByte(Byte) ) >^ValueSize ValueSize --> VInt ( WriteVInt32(Int32) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat Lucene40StoredFieldsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40StoredFieldsFormat : StoredFieldsFormat Constructors | Improve this Doc View Source Lucene40StoredFieldsFormat() Sole constructor. Declaration public Lucene40StoredFieldsFormat() Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsReader.html",
    "title": "Class Lucene40StoredFieldsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40StoredFieldsReader Class responsible for access to stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object StoredFieldsReader Lucene40StoredFieldsReader Implements System.IDisposable Inherited Members StoredFieldsReader.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40StoredFieldsReader : StoredFieldsReader, IDisposable Constructors | Improve this Doc View Source Lucene40StoredFieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Sole constructor. Declaration public Lucene40StoredFieldsReader(Directory d, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory d SegmentInfo si FieldInfos fn IOContext context Properties | Improve this Doc View Source Count Returns number of documents. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Returns a cloned FieldsReader that shares open IndexInput s with the original one. It is the caller's job not to dispose the original FieldsReader until all clones are called (eg, currently SegmentReader manages this logic). Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Closes the underlying IndexInput streams. This means that the Fields values will not be accessible. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsReader.Dispose(Boolean) Exceptions Type Condition System.IO.IOException If an I/O error occurs. | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source RawDocs(Int32[], Int32, Int32) Returns the length in bytes of each raw document in a contiguous range of length numDocs starting with startDocID . Returns the IndexInput (the fieldStream), already seeked to the starting point for startDocID . Declaration public IndexInput RawDocs(int[] lengths, int startDocID, int numDocs) Parameters Type Name Description System.Int32 [] lengths System.Int32 startDocID System.Int32 numDocs Returns Type Description IndexInput | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor) Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Lucene40StoredFieldsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsReader.html",
    "title": "Class Lucene41PostingsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsReader Concrete class that reads docId(maybe frq,pos,offset,payloads) list with postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase Lucene41PostingsReader Implements System.IDisposable Inherited Members PostingsReaderBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsReader : PostingsReaderBase, IDisposable Constructors | Improve this Doc View Source Lucene41PostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, String) Sole constructor. Declaration public Lucene41PostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext ioContext, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext ioContext System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Lucene.Net.Codecs.Lucene41.Lucene41SkipReader"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.Int32BlockTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.Int32BlockTermState.html",
    "title": "Class Lucene41PostingsWriter.Int32BlockTermState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsWriter.Int32BlockTermState NOTE: This was IntBlockTermState in Lucene Inheritance System.Object TermState OrdTermState BlockTermState Lucene41PostingsWriter.Int32BlockTermState Inherited Members BlockTermState.DocFreq BlockTermState.TotalTermFreq BlockTermState.TermBlockOrd BlockTermState.BlockFilePointer OrdTermState.Ord System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Int32BlockTermState : BlockTermState Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermState.Clone() | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides BlockTermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BlockTermState.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesConsumer.html",
    "title": "Class Lucene45DocValuesConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesConsumer Writer for Lucene45DocValuesFormat Inheritance System.Object DocValuesConsumer Lucene45DocValuesConsumer Implements System.IDisposable Inherited Members DocValuesConsumer.MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) DocValuesConsumer.MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) DocValuesConsumer.MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) DocValuesConsumer.MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) DocValuesConsumer.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax public class Lucene45DocValuesConsumer : DocValuesConsumer, IDisposable Constructors | Improve this Doc View Source Lucene45DocValuesConsumer(SegmentWriteState, String, String, String, String) Expert: Creates a new writer. Declaration public Lucene45DocValuesConsumer(SegmentWriteState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension) Parameters Type Name Description SegmentWriteState state System.String dataCodec System.String dataExtension System.String metaCodec System.String metaExtension Fields | Improve this Doc View Source BINARY_FIXED_UNCOMPRESSED Uncompressed binary, written directly (fixed length). Declaration public const int BINARY_FIXED_UNCOMPRESSED = 0 Field Value Type Description System.Int32 | Improve this Doc View Source BINARY_PREFIX_COMPRESSED Compressed binary with shared prefixes Declaration public const int BINARY_PREFIX_COMPRESSED = 2 Field Value Type Description System.Int32 | Improve this Doc View Source BINARY_VARIABLE_UNCOMPRESSED Uncompressed binary, written directly (variable length). Declaration public const int BINARY_VARIABLE_UNCOMPRESSED = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DELTA_COMPRESSED Compressed using packed blocks of System.Int32 s. Declaration public const int DELTA_COMPRESSED = 0 Field Value Type Description System.Int32 | Improve this Doc View Source GCD_COMPRESSED Compressed by computing the GCD. Declaration public const int GCD_COMPRESSED = 1 Field Value Type Description System.Int32 | Improve this Doc View Source SORTED_SET_SINGLE_VALUED_SORTED Single-valued sorted set values, encoded as sorted values, so no level of indirection: docId -> ord. Declaration public static readonly int SORTED_SET_SINGLE_VALUED_SORTED Field Value Type Description System.Int32 | Improve this Doc View Source SORTED_SET_WITH_ADDRESSES Standard storage for sorted set values with 1 level of indirection: docId -> address -> ord. Declaration public static readonly int SORTED_SET_WITH_ADDRESSES Field Value Type Description System.Int32 | Improve this Doc View Source TABLE_COMPRESSED Compressed by giving IDs to unique values. Declaration public const int TABLE_COMPRESSED = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Declaration public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values Overrides DocValuesConsumer.AddBinaryField(FieldInfo, IEnumerable<BytesRef>) | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Declaration public override void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> values Overrides DocValuesConsumer.AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrd Overrides DocValuesConsumer.AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrdCount System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> ords Overrides DocValuesConsumer.AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddTermsDict(FieldInfo, IEnumerable<BytesRef>) Expert: writes a value dictionary for a sorted/sortedset field. Declaration protected virtual void AddTermsDict(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesConsumer.Dispose(Boolean) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesFormat.html",
    "title": "Class Lucene45DocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesFormat Lucene 4.5 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with these strategies: NUMERIC : Delta-compressed: per-document integers written in blocks of 16k. For each block the minimum value in that block is encoded, and each entry is a delta from that minimum value. Each block of deltas is compressed with bitpacking. For more information, see BlockPackedWriter . Table-compressed: when the number of unique values is very small (< 256), and when there are unused \"gaps\" in the range of values used (such as SmallSingle ), a lookup table is written instead. Each per-document entry is instead the ordinal to this table, and those ordinals are compressed with bitpacking ( PackedInt32s ). GCD-compressed: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. BINARY : Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed directly with multiplication ( docID * length ). Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Prefix-compressed Binary: values are written in chunks of 16, with the first value written completely and other values sharing prefixes. Chunk addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each chunk the deviation from the delta (actual - expected) is written. SORTED : Sorted: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, along with the per-document ordinals written using one of the numeric strategies above. SORTED_SET : SortedSet: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, an ordinal list and per-document index into this list are written using the numeric strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry | SortedSetEntry NumericEntry --> GCDNumericEntry | TableNumericEntry | DeltaNumericEntry GCDNumericEntry --> NumericHeader,MinValue,GCD TableNumericEntry --> NumericHeader,TableSize,Int64 ( WriteInt64(Int64) ) TableSize DeltaNumericEntry --> NumericHeader NumericHeader --> FieldNumber,EntryType,NumericType,MissingOffset,PackedVersion,DataOffset,Count,BlockSize BinaryEntry --> FixedBinaryEntry | VariableBinaryEntry | PrefixBinaryEntry FixedBinaryEntry --> BinaryHeader VariableBinaryEntry --> BinaryHeader,AddressOffset,PackedVersion,BlockSize PrefixBinaryEntry --> BinaryHeader,AddressInterval,AddressOffset,PackedVersion,BlockSize BinaryHeader --> FieldNumber,EntryType,BinaryType,MissingOffset,MinLength,MaxLength,DataOffset SortedEntry --> FieldNumber,EntryType,BinaryEntry,NumericEntry SortedSetEntry --> EntryType,BinaryEntry,NumericEntry,NumericEntry FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) EntryType,CompressionType --> Byte ( WriteByte(Byte) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) MinValue,GCD,MissingOffset,AddressOffset,DataOffset --> Int64 ( WriteInt64(Int64) ) TableSize --> vInt ( WriteVInt32(Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and an ordinary Lucene45DocValuesProducer.NumericEntry for the document-to-ord metadata. SortedSet fields have three entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and two Lucene45DocValuesProducer.NumericEntry s for the document-to-ord-index and ordinal list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 ( Lucene45DocValuesProducer.NumericEntry ) or 1 ( Lucene45DocValuesProducer.BinaryEntry ) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) NumericType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 16k integers, every integer is delta-encoded from the minimum value within the block. 1 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. 2 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. BinaryType indicates how Binary values will be stored: 0 --> fixed-width. All values have the same length, addressing by multiplication. 1 --> variable-width. An address for each value is stored. 2 --> prefix-compressed. An address to the start of every interval'th value is stored. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length). Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. MissingOffset points to a byte[] containing a bitset of all documents that had a value for the field. If its -1, then there are no missing values. Checksum contains the CRC32 checksum of all bytes in the .dvm file up until the checksum. this is used to verify integrity of the file on opening the index. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) TableCompressedNumerics --> PackedInts ( PackedInt32s ) GCDCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) Addresses --> MonotonicBlockPackedInts(blockSize=16k) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat Lucene45DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax [DocValuesFormatName(\"Lucene45\")] public sealed class Lucene45DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene45DocValuesFormat() Sole Constructor Declaration public Lucene45DocValuesFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsEnum.html",
    "title": "Class MappingMultiDocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MappingMultiDocsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum MappingMultiDocsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class MappingMultiDocsEnum : DocsEnum Constructors | Improve this Doc View Source MappingMultiDocsEnum() Sole constructor. Declaration public MappingMultiDocsEnum() Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source MergeState Sets the MergeState , which is used to re-map document IDs. Declaration public MergeState MergeState { get; set; } Property Value Type Description MergeState | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListReader.html",
    "title": "Class MultiLevelSkipListReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiLevelSkipListReader This abstract class reads skip lists with multiple levels. See MultiLevelSkipListWriter for the information about the encoding of the multi level skip lists. Subclasses must implement the abstract method ReadSkipData(Int32, IndexInput) which defines the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiLevelSkipListReader Lucene40SkipListReader Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class MultiLevelSkipListReader : IDisposable Constructors | Improve this Doc View Source MultiLevelSkipListReader(IndexInput, Int32, Int32) Creates a MultiLevelSkipListReader , where Lucene.Net.Codecs.MultiLevelSkipListReader.skipInterval and Lucene.Net.Codecs.MultiLevelSkipListReader.skipMultiplier are the same. Declaration protected MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval | Improve this Doc View Source MultiLevelSkipListReader(IndexInput, Int32, Int32, Int32) Creates a MultiLevelSkipListReader . Declaration protected MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval, int skipMultiplier) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval System.Int32 skipMultiplier Fields | Improve this Doc View Source m_maxNumberOfSkipLevels The maximum number of skip levels possible for this index. Declaration protected int m_maxNumberOfSkipLevels Field Value Type Description System.Int32 | Improve this Doc View Source m_skipDoc Doc id of current skip entry per level. Declaration protected int[] m_skipDoc Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Doc Returns the id of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int Doc { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Subclasses may override to dispose their own resources. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Init(Int64, Int32) Initializes the reader, for reuse on a new term. Declaration public virtual void Init(long skipPointer, int df) Parameters Type Name Description System.Int64 skipPointer System.Int32 df | Improve this Doc View Source ReadSkipData(Int32, IndexInput) Subclasses must implement the actual skip data encoding in this method. Declaration protected abstract int ReadSkipData(int level, IndexInput skipStream) Parameters Type Name Description System.Int32 level The level skip data shall be read from. IndexInput skipStream The skip stream to read from. Returns Type Description System.Int32 | Improve this Doc View Source SeekChild(Int32) Seeks the skip entry on the given level. Declaration protected virtual void SeekChild(int level) Parameters Type Name Description System.Int32 level | Improve this Doc View Source SetLastSkipData(Int32) Copies the values of the last read skip entry on this level . Declaration protected virtual void SetLastSkipData(int level) Parameters Type Name Description System.Int32 level | Improve this Doc View Source SkipTo(Int32) Skips entries to the first beyond the current whose document number is greater than or equal to target . Returns the current doc count. Declaration public virtual int SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DerefBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DerefBytesDocValuesField.html",
    "title": "Class DerefBytesDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DerefBytesDocValuesField Field that stores a per-document BytesRef value. Here's an example usage: document.Add(new DerefBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField DerefBytesDocValuesField Implements IIndexableField Inherited Members BinaryDocValuesField.fType Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use BinaryDocValuesField instead.\")] public class DerefBytesDocValuesField : BinaryDocValuesField, IIndexableField Constructors | Improve this Doc View Source DerefBytesDocValuesField(String, BytesRef) Create a new fixed or variable-length DocValues field. Declaration public DerefBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source DerefBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length DocValues field. Declaration public DerefBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also BinaryDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Document.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Document.html",
    "title": "Class Document | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Document Documents are the unit of indexing and search. A Document is a set of fields. Each field has a name and a textual value. A field may be stored ( IsStored ) with the document, in which case it is returned with search hits on the document. Thus each document should typically contain one or more stored fields which uniquely identify it. Note that fields which are not IsStored are not available in documents retrieved from the index, e.g. with Doc or Document(Int32) . Inheritance System.Object Document Implements System.Collections.Generic.IEnumerable < IIndexableField > System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class Document : IEnumerable<IIndexableField>, IEnumerable Constructors | Improve this Doc View Source Document() Constructs a new document with no fields. Declaration public Document() Properties | Improve this Doc View Source Fields Returns a List of all the fields in a document. Note that fields which are not stored are not available in documents retrieved from the index, e.g. Doc(Int32) or Document(Int32) . Declaration public IList<IIndexableField> Fields { get; } Property Value Type Description System.Collections.Generic.IList < IIndexableField > Methods | Improve this Doc View Source Add(IIndexableField) Adds a field to a document. Several fields may be added with the same name. In this case, if the fields are indexed, their text is treated as though appended for the purposes of search. Note that add like the RemoveField(String) and RemoveFields(String) methods only makes sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void Add(IIndexableField field) Parameters Type Name Description IIndexableField field | Improve this Doc View Source Get(String) Returns the string value of the field with the given name if any exist in this document, or null . If multiple fields exist with this name, this method returns the first value added. If only binary fields with this name exist, returns null . For Int32Field , Int64Field , SingleField and DoubleField it returns the string value of the number. If you want the actual numeric field instance back, use GetField(String) . Declaration public string Get(string name) Parameters Type Name Description System.String name Returns Type Description System.String | Improve this Doc View Source GetBinaryValue(String) Returns an array of bytes for the first (or only) field that has the name specified as the method parameter. this method will return null if no binary fields with the specified name are available. There may be non-binary fields with the same name. Declaration public BytesRef GetBinaryValue(string name) Parameters Type Name Description System.String name the name of the field. Returns Type Description BytesRef a BytesRef containing the binary field value or null | Improve this Doc View Source GetBinaryValues(String) Returns an array of byte arrays for of the fields that have the name specified as the method parameter. This method returns an empty array when there are no matching fields. It never returns null . Declaration public BytesRef[] GetBinaryValues(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description BytesRef [] a BytesRef[] of binary field values | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<IIndexableField> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < IIndexableField > | Improve this Doc View Source GetField(String) Returns a field with the given name if any exist in this document, or null . If multiple fields exists with this name, this method returns the first value added. Declaration public IIndexableField GetField(string name) Parameters Type Name Description System.String name Returns Type Description IIndexableField | Improve this Doc View Source GetFields(String) Returns an array of IIndexableField s with the given name. This method returns an empty array when there are no matching fields. It never returns null . Declaration public IIndexableField[] GetFields(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description IIndexableField [] a IndexableField[] array | Improve this Doc View Source GetValues(String) Returns an array of values of the field specified as the method parameter. This method returns an empty array when there are no matching fields. It never returns null . For Int32Field , Int64Field , SingleField and DoubleField it returns the string value of the number. If you want the actual numeric field instances back, use GetFields(String) . Declaration public string[] GetValues(string name) Parameters Type Name Description System.String name the name of the field Returns Type Description System.String [] a string[] of field values | Improve this Doc View Source RemoveField(String) Removes field with the specified name from the document. If multiple fields exist with this name, this method removes the first field that has been added. If there is no field with the specified name, the document remains unchanged. Note that the RemoveField(String) and RemoveFields(String) methods like the add method only make sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void RemoveField(string name) Parameters Type Name Description System.String name | Improve this Doc View Source RemoveFields(String) Removes all fields with the given name from the document. If there is no field with the specified name, the document remains unchanged. Note that the RemoveField(String) and RemoveFields(String) methods like the add method only make sense prior to adding a document to an index. These methods cannot be used to change the content of an existing index! In order to achieve this, a document has to be deleted from an index and a new changed version of that document has to be added. Declaration public void RemoveFields(string name) Parameters Type Name Description System.String name | Improve this Doc View Source ToString() Prints the fields of a document for human consumption. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods DocumentExtensions.GetField<T>(Document, String) DocumentExtensions.GetFields<T>(Document, String) DocumentExtensions.AddBinaryDocValuesField(Document, String, BytesRef) DocumentExtensions.AddDoubleDocValuesField(Document, String, Double) DocumentExtensions.AddDoubleField(Document, String, Double, Field.Store) DocumentExtensions.AddDoubleField(Document, String, Double, FieldType) DocumentExtensions.AddSingleDocValuesField(Document, String, Single) DocumentExtensions.AddSingleField(Document, String, Single, Field.Store) DocumentExtensions.AddSingleField(Document, String, Single, FieldType) DocumentExtensions.AddInt32Field(Document, String, Int32, Field.Store) DocumentExtensions.AddInt32Field(Document, String, Int32, FieldType) DocumentExtensions.AddInt64Field(Document, String, Int64, Field.Store) DocumentExtensions.AddInt64Field(Document, String, Int64, FieldType) DocumentExtensions.AddNumericDocValuesField(Document, String, Int64) DocumentExtensions.AddSortedDocValuesField(Document, String, BytesRef) DocumentExtensions.AddSortedSetDocValuesField(Document, String, BytesRef) DocumentExtensions.AddStoredField(Document, String, Byte[]) DocumentExtensions.AddStoredField(Document, String, Byte[], Int32, Int32) DocumentExtensions.AddStoredField(Document, String, BytesRef) DocumentExtensions.AddStoredField(Document, String, String) DocumentExtensions.AddStoredField(Document, String, Int32) DocumentExtensions.AddStoredField(Document, String, Single) DocumentExtensions.AddStoredField(Document, String, Int64) DocumentExtensions.AddStoredField(Document, String, Double) DocumentExtensions.AddStringField(Document, String, String, Field.Store) DocumentExtensions.AddTextField(Document, String, TextReader) DocumentExtensions.AddTextField(Document, String, String, Field.Store) DocumentExtensions.AddTextField(Document, String, TokenStream) EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int64Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int64Field.html",
    "title": "Class Int64Field | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64Field Field that indexes System.Int64 values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int64Field(name, 6L, Field.Store.NO)); For optimal performance, re-use the Int64Field and Document instance for more than one document: Int64Field field = new Int64Field(name, 0L, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt64Value(value) writer.AddDocument(document); ... } See also Int32Field , SingleField , DoubleField . Any type that can be converted to long can also be indexed. For example, date/time values represented by a System.DateTime can be translated into a long value using the System.DateTime.Ticks property. If you don't need millisecond precision, you can quantize the value, either by dividing the result of System.DateTime.Ticks or using the separate getters (for year, month, etc.) to construct an System.Int32 or System.Int64 value. To perform range querying or filtering against a Int64Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int64Field , use the normal numeric sort types, eg INT64 . Int64Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int64Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int64Field . An Int64Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was LongField in Lucene @since 2.9 Inheritance System.Object Field Int64Field Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class Int64Field : Field, IIndexableField Constructors | Improve this Doc View Source Int64Field(String, Int64, Field.Store) Creates a stored or un-stored Int64Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public Int64Field(string name, long value, Field.Store stored) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source Int64Field(String, Int64, FieldType) Expert: allows you to customize the FieldType . Declaration public Int64Field(string name, long value, FieldType type) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value FieldType type customized field type: must have NumericType of INT64 . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a NumericType of INT64 Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a Int64Field that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored Int64Field : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.LazyDocument.LazyField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.LazyDocument.LazyField.html",
    "title": "Class LazyDocument.LazyField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LazyDocument.LazyField @lucene.internal Inheritance System.Object LazyDocument.LazyField Implements IIndexableField Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.Misc.dll Syntax public class LazyField : IIndexableField Properties | Improve this Doc View Source Boost Gets the boost factor on this field. Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source FieldType Returns the FieldType for this field as type FieldType . Declaration public virtual FieldType FieldType { get; } Property Value Type Description FieldType | Improve this Doc View Source HasBeenLoaded non-private for test only access @lucene.internal Declaration public virtual bool HasBeenLoaded { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IndexableFieldType Returns the FieldType for this field as type IIndexableFieldType . Declaration public virtual IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name The field's name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration public virtual NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration public virtual BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as System.Byte or null if the type is non-numeric. Declaration public virtual byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as System.Double or null if the type is non-numeric. Declaration public virtual double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as System.Int16 or null if the type is non-numeric. Declaration public virtual short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as System.Int32 or null if the type is non-numeric. Declaration public virtual int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as System.Int64 or null if the type is non-numeric. Declaration public virtual long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Declaration [Obsolete(\"In .NET, use of this method will cause boxing/unboxing. Instead, use the NumericType property to check the underlying type and call the appropriate GetXXXValue() method to retrieve the value.\")] public virtual object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() The value of the field as a System.IO.TextReader , or null . If null , the System.String value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual TextReader GetReaderValue() Returns Type Description System.IO.TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as System.Single or null if the type is non-numeric. Declaration public virtual float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration public virtual string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Declaration public virtual TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description TokenStream Implements IIndexableField Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericDocValuesField.html",
    "title": "Class NumericDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericDocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new NumericDocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field NumericDocValuesField ByteDocValuesField DoubleDocValuesField Int16DocValuesField Int32DocValuesField Int64DocValuesField PackedInt64DocValuesField SingleDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class NumericDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source NumericDocValuesField(String, Int64) Creates a new DocValues field with the specified 64-bit System.Int64 value Declaration public NumericDocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE Type for numeric DocValues . Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInfos.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInfos.html",
    "title": "Class FieldInfos | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfos Collection of FieldInfo s (accessible by number or by name). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfos Implements System.Collections.Generic.IEnumerable < FieldInfo > System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FieldInfos : IEnumerable<FieldInfo>, IEnumerable Constructors | Improve this Doc View Source FieldInfos(FieldInfo[]) Constructs a new FieldInfos from an array of FieldInfo objects Declaration public FieldInfos(FieldInfo[] infos) Parameters Type Name Description FieldInfo [] infos Properties | Improve this Doc View Source Count Returns the number of fields. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasDocValues Returns true if any fields have DocValues Declaration public virtual bool HasDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasFreq Returns true if any fields have freqs Declaration public virtual bool HasFreq { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasNorms Returns true if any fields have norms Declaration public virtual bool HasNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasOffsets Returns true if any fields have offsets Declaration public virtual bool HasOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if any fields have payloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasProx Returns true if any fields have positions Declaration public virtual bool HasProx { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasVectors Returns true if any fields have vectors Declaration public virtual bool HasVectors { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source FieldInfo(Int32) Return the FieldInfo object referenced by the fieldNumber . Declaration public virtual FieldInfo FieldInfo(int fieldNumber) Parameters Type Name Description System.Int32 fieldNumber field's number. Returns Type Description FieldInfo the FieldInfo object or null when the given fieldNumber doesn't exist. Exceptions Type Condition System.ArgumentException if fieldNumber is negative | Improve this Doc View Source FieldInfo(String) Return the FieldInfo object referenced by the fieldName Declaration public virtual FieldInfo FieldInfo(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description FieldInfo the FieldInfo object or null when the given fieldName doesn't exist. | Improve this Doc View Source GetEnumerator() Returns an iterator over all the fieldinfo objects present, ordered by ascending field number Declaration public virtual IEnumerator<FieldInfo> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < FieldInfo > Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSetExceptions.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSetExceptions.html",
    "title": "Class RSLPStemmerBase.RuleWithSetExceptions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RSLPStemmerBase.RuleWithSetExceptions A rule with a set of whole-word exceptions. Inheritance System.Object RSLPStemmerBase.Rule RSLPStemmerBase.RuleWithSetExceptions Inherited Members RSLPStemmerBase.Rule.m_suffix RSLPStemmerBase.Rule.m_replacement RSLPStemmerBase.Rule.m_min RSLPStemmerBase.Rule.Replace(Char[], Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class RuleWithSetExceptions : RSLPStemmerBase.Rule Constructors | Improve this Doc View Source RuleWithSetExceptions(String, Int32, String, String[]) Declaration public RuleWithSetExceptions(string suffix, int min, string replacement, string[] exceptions) Parameters Type Name Description System.String suffix System.Int32 min System.String replacement System.String [] exceptions Fields | Improve this Doc View Source m_exceptions Declaration protected readonly CharArraySet m_exceptions Field Value Type Description CharArraySet Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public override bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean Overrides RSLPStemmerBase.Rule.Matches(Char[], Int32)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSuffixExceptions.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSuffixExceptions.html",
    "title": "Class RSLPStemmerBase.RuleWithSuffixExceptions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RSLPStemmerBase.RuleWithSuffixExceptions A rule with a set of exceptional suffixes. Inheritance System.Object RSLPStemmerBase.Rule RSLPStemmerBase.RuleWithSuffixExceptions Inherited Members RSLPStemmerBase.Rule.m_suffix RSLPStemmerBase.Rule.m_replacement RSLPStemmerBase.Rule.m_min RSLPStemmerBase.Rule.Replace(Char[], Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class RuleWithSuffixExceptions : RSLPStemmerBase.Rule Constructors | Improve this Doc View Source RuleWithSuffixExceptions(String, Int32, String, String[]) Declaration public RuleWithSuffixExceptions(string suffix, int min, string replacement, string[] exceptions) Parameters Type Name Description System.String suffix System.Int32 min System.String replacement System.String [] exceptions Fields | Improve this Doc View Source m_exceptions Declaration protected readonly char[][] m_exceptions Field Value Type Description System.Char [][] Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public override bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean Overrides RSLPStemmerBase.Rule.Matches(Char[], Int32)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.SwedishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.SwedishAnalyzer.html",
    "title": "Class SwedishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SwedishAnalyzer Analyzer for Swedish. Inheritance System.Object Analyzer StopwordAnalyzerBase SwedishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SwedishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source SwedishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SwedishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source SwedishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SwedishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SwedishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SwedishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Swedish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"swedish_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.SwedishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.SwedishLightStemFilter.html",
    "title": "Class SwedishLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SwedishLightStemFilter A TokenFilter that applies SwedishLightStemmer to stem Swedish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SwedishLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SwedishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SwedishLightStemFilter(TokenStream) Declaration public SwedishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.SwedishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.SwedishLightStemFilterFactory.html",
    "title": "Class SwedishLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SwedishLightStemFilterFactory Factory for SwedishLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SwedishLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SwedishLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SwedishLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SwedishLightStemFilterFactory(IDictionary<String, String>) Creates a new SwedishLightStemFilterFactory Declaration public SwedishLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SolrSynonymParser.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SolrSynonymParser.html",
    "title": "Class SolrSynonymParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SolrSynonymParser Parser for the Solr synonyms format. Blank lines and lines starting with '#' are comments. Explicit mappings match any token sequence on the LHS of \"=>\" and replace with all alternatives on the RHS. These types of mappings ignore the expand parameter in the constructor. Example: i-pod, i pod => ipod Equivalent synonyms may be separated with commas and give no explicit mapping. In this case the mapping behavior will be taken from the expand parameter in the constructor. This allows the same synonym file to be used in different synonym handling strategies. Example: ipod, i-pod, i pod Multiple synonym mapping entries are merged. Example: foo => foo bar foo => baz is equivalent to foo => foo bar, baz This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SynonymMap.Builder SynonymMap.Parser SolrSynonymParser Inherited Members SynonymMap.Parser.Analyze(String, CharsRef) SynonymMap.Builder.Join(String[], CharsRef) SynonymMap.Builder.Add(CharsRef, CharsRef, Boolean) SynonymMap.Builder.Build() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SolrSynonymParser : SynonymMap.Parser Constructors | Improve this Doc View Source SolrSynonymParser(Boolean, Boolean, Analyzer) Declaration public SolrSynonymParser(bool dedup, bool expand, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup System.Boolean expand Analyzer analyzer Methods | Improve this Doc View Source Parse(TextReader) Declaration public override void Parse(TextReader in) Parameters Type Name Description System.IO.TextReader in Overrides SynonymMap.Parser.Parse(TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymFilter.html",
    "title": "Class SynonymFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SynonymFilter Matches single or multi word synonyms in a token stream. This token stream cannot properly handle position increments != 1, ie, you should place this filter before filtering out stop words. Note that with the current implementation, parsing is greedy, so whenever multiple parses would apply, the rule starting the earliest and parsing the most tokens wins. For example if you have these rules: a -> x a b -> y b c d -> z Then input a b c d e parses to y b c d , ie the 2nd rule \"wins\" because it started earliest and matched the most input tokens of other rules starting at that point. A future improvement to this filter could allow non-greedy parsing, such that the 3rd rule would win, and also separately allow multiple parses, such that all 3 rules would match, perhaps even on a rule by rule basis. NOTE : when a match occurs, the output tokens associated with the matching rule are \"stacked\" on top of the input stream (if the rule had keepOrig=true ) and also on top of another matched rule's output tokens. This is not a correct solution, as really the output should be an arbitrary graph/lattice. For example, with the above match, you would expect an exact PhraseQuery \"y b c\" to match the parsed tokens, but it will fail to do so. This limitation is necessary because Lucene's TokenStream (and index) cannot yet represent an arbitrary graph. NOTE : If multiple incoming tokens arrive on the same position, only the first token at that position is used for parsing. Subsequent tokens simply pass through and are not parsed. A future improvement would be to allow these tokens to also be matched. Inheritance System.Object AttributeSource TokenStream TokenFilter SynonymFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SynonymFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SynonymFilter(TokenStream, SynonymMap, Boolean) Declaration public SynonymFilter(TokenStream input, SynonymMap synonyms, bool ignoreCase) Parameters Type Name Description TokenStream input input tokenstream SynonymMap synonyms synonym map System.Boolean ignoreCase case-folds input for matching with ToLower(Int32) . Note, if you set this to true, its your responsibility to lowercase the input entries when you create the SynonymMap Fields | Improve this Doc View Source TYPE_SYNONYM Declaration public const string TYPE_SYNONYM = \"SYNONYM\" Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymFilterFactory.html",
    "title": "Class SynonymFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SynonymFilterFactory Factory for SynonymFilter . <fieldType name=\"text_synonym\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" format=\"solr\" ignoreCase=\"false\" expand=\"true\" tokenizerFactory=\"solr.WhitespaceTokenizerFactory\" [optional tokenizer factory parameters]/> </analyzer> </fieldType> An optional param name prefix of \"tokenizerFactory.\" may be used for any init params that the SynonymFilterFactory needs to pass to the specified TokenizerFactory . If the TokenizerFactory expects an init parameters with the same name as an init param used by the SynonymFilterFactory , the prefix is mandatory. The optional format parameter controls how the synonyms will be parsed: It supports the short names of solr for SolrSynonymParser and wordnet for and WordnetSynonymParser , or your own SynonymMap.Parser class name. The default is solr . A custom SynonymMap.Parser is expected to have a constructor taking: System.Boolean dedup - true if duplicates should be ignored, false otherwise System.Boolean expand - true if conflation groups should be expanded, false if they are one-directional Analyzer analyzer - an analyzer used for each raw synonym Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SynonymFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SynonymFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source SynonymFilterFactory(IDictionary<String, String>) Declaration public SynonymFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymMap.Parser.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymMap.Parser.html",
    "title": "Class SynonymMap.Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SynonymMap.Parser Abstraction for parsing synonym files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SynonymMap.Builder SynonymMap.Parser SolrSynonymParser WordnetSynonymParser Inherited Members SynonymMap.Builder.Join(String[], CharsRef) SynonymMap.Builder.Add(CharsRef, CharsRef, Boolean) SynonymMap.Builder.Build() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class Parser : SynonymMap.Builder Constructors | Improve this Doc View Source Parser(Boolean, Analyzer) Declaration public Parser(bool dedup, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup Analyzer analyzer Methods | Improve this Doc View Source Analyze(String, CharsRef) Sugar: analyzes the text with the analyzer and separates by WORD_SEPARATOR . reuse and its chars must not be null. Declaration public virtual CharsRef Analyze(string text, CharsRef reuse) Parameters Type Name Description System.String text CharsRef reuse Returns Type Description CharsRef | Improve this Doc View Source Parse(TextReader) Parse the given input, adding synonyms to the inherited SynonymMap.Builder . Declaration public abstract void Parse(TextReader in) Parameters Type Name Description System.IO.TextReader in The input to parse"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.WordnetSynonymParser.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.WordnetSynonymParser.html",
    "title": "Class WordnetSynonymParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordnetSynonymParser Parser for wordnet prolog format See http://wordnet.princeton.edu/man/prologdb.5WN.html for a description of the format. @lucene.experimental Inheritance System.Object SynonymMap.Builder SynonymMap.Parser WordnetSynonymParser Inherited Members SynonymMap.Parser.Analyze(String, CharsRef) SynonymMap.Builder.Join(String[], CharsRef) SynonymMap.Builder.Add(CharsRef, CharsRef, Boolean) SynonymMap.Builder.Build() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WordnetSynonymParser : SynonymMap.Parser Constructors | Improve this Doc View Source WordnetSynonymParser(Boolean, Boolean, Analyzer) Declaration public WordnetSynonymParser(bool dedup, bool expand, Analyzer analyzer) Parameters Type Name Description System.Boolean dedup System.Boolean expand Analyzer analyzer Methods | Improve this Doc View Source Parse(TextReader) Declaration public override void Parse(TextReader in) Parameters Type Name Description System.IO.TextReader in Overrides SynonymMap.Parser.Parse(TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.ApostropheFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.ApostropheFilter.html",
    "title": "Class ApostropheFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ApostropheFilter Strips all characters after an apostrophe (including the apostrophe itself). In Turkish, apostrophe is used to separate suffixes from proper names (continent, sea, river, lake, mountain, upland, proper names related to religion and mythology). This filter intended to be used before stem filters. For more information, see Role of Apostrophes in Turkish Information Retrieval Inheritance System.Object AttributeSource TokenStream TokenFilter ApostropheFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ApostropheFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ApostropheFilter(TokenStream) Declaration public ApostropheFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.ApostropheFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.ApostropheFilterFactory.html",
    "title": "Class ApostropheFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ApostropheFilterFactory Factory for ApostropheFilter . <fieldType name=\"text_tr_lower_apostrophes\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ApostropheFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ApostropheFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ApostropheFilterFactory(IDictionary<String, String>) Creates a new ApostropheFilterFactory Declaration public ApostropheFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.html",
    "title": "Class PulsingPostingsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PulsingPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase PulsingPostingsReader Implements System.IDisposable Inherited Members PostingsReaderBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public class PulsingPostingsReader : PostingsReaderBase, IDisposable Constructors | Improve this Doc View Source PulsingPostingsReader(SegmentReadState, PostingsReaderBase) Declaration public PulsingPostingsReader(SegmentReadState state, PostingsReaderBase wrappedPostingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase wrappedPostingsReader Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] empty, DataInput input, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] empty DataInput input FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo field, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo field BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo field, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo field BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsWriter.html",
    "title": "Class PulsingPostingsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PulsingPostingsWriter Writer for the pulsing format. Wraps another postings implementation and decides (based on total number of occurrences), whether a terms postings should be inlined into the term dictionary, or passed through to the wrapped writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase PulsingPostingsWriter Implements System.IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public sealed class PulsingPostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source PulsingPostingsWriter(SegmentWriteState, Int32, PostingsWriterBase) If the total number of positions (summed across all docs for this term) is less than or equal maxPositions , then the postings are inlined into terms dict. Declaration public PulsingPostingsWriter(SegmentWriteState state, int maxPositions, PostingsWriterBase wrappedPostingsWriter) Parameters Type Name Description SegmentWriteState state System.Int32 maxPositions PostingsWriterBase wrappedPostingsWriter Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset Overrides PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsWriterBase.Dispose(Boolean) | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] empty, DataOutput output, FieldInfo fieldInfo, BlockTermState state, bool abs) Parameters Type Name Description System.Int64 [] empty DataOutput output FieldInfo fieldInfo BlockTermState state System.Boolean abs Overrides PostingsWriterBase.EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source FinishDoc() Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Currently, this instance is re-used across fields, so our parent calls setField whenever the field changes. Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Declaration public override void StartDoc(int docId, int termDocFreq) Parameters Type Name Description System.Int32 docId System.Int32 termDocFreq Overrides PostingsConsumer.StartDoc(Int32, Int32) | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.html",
    "title": "Class Int32IndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexInput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: This was IntIndexInput in Lucene @lucene.experimental Inheritance System.Object Int32IndexInput FixedInt32BlockIndexInput VariableInt32BlockIndexInput Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32IndexInput : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndex() Declaration public abstract Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index | Improve this Doc View Source GetReader() Declaration public abstract Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.html",
    "title": "Class Int32IndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexOutput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: block sizes could be variable NOTE: This was IntIndexOutput in Lucene @lucene.experimental Inheritance System.Object Int32IndexOutput FixedInt32BlockIndexOutput VariableInt32BlockIndexOutput Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32IndexOutput : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetIndex() If you are indexing the primary output file, call this and interact with the returned IndexWriter. Declaration public abstract Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index | Improve this Doc View Source Write(Int32) Write an System.Int32 to the primary file. The value must be = 0. Declaration public abstract void Write(int v) Parameters Type Name Description System.Int32 v Implements System.IDisposable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.html",
    "title": "Class ScoreOrderFragmentsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoreOrderFragmentsBuilder An implementation of FragmentsBuilder that outputs score-order fragments. Inheritance System.Object BaseFragmentsBuilder ScoreOrderFragmentsBuilder Implements IFragmentsBuilder Inherited Members BaseFragmentsBuilder.m_preTags BaseFragmentsBuilder.m_postTags BaseFragmentsBuilder.COLORED_PRE_TAGS BaseFragmentsBuilder.COLORED_POST_TAGS BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) BaseFragmentsBuilder.GetFields(IndexReader, Int32, String) BaseFragmentsBuilder.MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) BaseFragmentsBuilder.GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) BaseFragmentsBuilder.GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) BaseFragmentsBuilder.DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) BaseFragmentsBuilder.MultiValuedSeparator BaseFragmentsBuilder.IsDiscreteMultiValueHighlighting BaseFragmentsBuilder.GetPreTag(Int32) BaseFragmentsBuilder.GetPostTag(Int32) BaseFragmentsBuilder.GetPreTag(String[], Int32) BaseFragmentsBuilder.GetPostTag(String[], Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class ScoreOrderFragmentsBuilder : BaseFragmentsBuilder, IFragmentsBuilder Constructors | Improve this Doc View Source ScoreOrderFragmentsBuilder() a constructor. Declaration public ScoreOrderFragmentsBuilder() | Improve this Doc View Source ScoreOrderFragmentsBuilder(IBoundaryScanner) Declaration public ScoreOrderFragmentsBuilder(IBoundaryScanner bs) Parameters Type Name Description IBoundaryScanner bs | Improve this Doc View Source ScoreOrderFragmentsBuilder(String[], String[]) a constructor. Declaration public ScoreOrderFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags array of pre-tags for markup terms. System.String [] postTags array of post-tags for markup terms. | Improve this Doc View Source ScoreOrderFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration public ScoreOrderFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner bs) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner bs Methods | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Sort by score the list of FieldFragList.WeightedFragInfo Declaration public override IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > src Returns Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > Overrides BaseFragmentsBuilder.GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleBoundaryScanner.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleBoundaryScanner.html",
    "title": "Class SimpleBoundaryScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleBoundaryScanner Simple boundary scanner implementation that divides fragments based on a set of separator characters. Inheritance System.Object SimpleBoundaryScanner Implements IBoundaryScanner Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleBoundaryScanner : IBoundaryScanner Constructors | Improve this Doc View Source SimpleBoundaryScanner() Declaration public SimpleBoundaryScanner() | Improve this Doc View Source SimpleBoundaryScanner(Char[]) Declaration public SimpleBoundaryScanner(char[] boundaryChars) Parameters Type Name Description System.Char [] boundaryChars | Improve this Doc View Source SimpleBoundaryScanner(Int32) Declaration public SimpleBoundaryScanner(int maxScan) Parameters Type Name Description System.Int32 maxScan | Improve this Doc View Source SimpleBoundaryScanner(Int32, Char[]) Declaration public SimpleBoundaryScanner(int maxScan, char[] boundaryChars) Parameters Type Name Description System.Int32 maxScan System.Char [] boundaryChars | Improve this Doc View Source SimpleBoundaryScanner(Int32, ISet<Char>) Declaration public SimpleBoundaryScanner(int maxScan, ISet<char> boundaryChars) Parameters Type Name Description System.Int32 maxScan System.Collections.Generic.ISet < System.Char > boundaryChars Fields | Improve this Doc View Source DEFAULT_BOUNDARY_CHARS Declaration public static readonly char[] DEFAULT_BOUNDARY_CHARS Field Value Type Description System.Char [] | Improve this Doc View Source DEFAULT_MAX_SCAN Declaration public static readonly int DEFAULT_MAX_SCAN Field Value Type Description System.Int32 | Improve this Doc View Source m_boundaryChars Declaration protected ISet<char> m_boundaryChars Field Value Type Description System.Collections.Generic.ISet < System.Char > | Improve this Doc View Source m_maxScan Declaration protected int m_maxScan Field Value Type Description System.Int32 Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Declaration public virtual int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Declaration public virtual int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 start Returns Type Description System.Int32 Implements IBoundaryScanner"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFieldFragList.html",
    "title": "Class SimpleFieldFragList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFieldFragList A simple implementation of FieldFragList . Inheritance System.Object FieldFragList SimpleFieldFragList Inherited Members FieldFragList.FragInfos System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFieldFragList : FieldFragList Constructors | Improve this Doc View Source SimpleFieldFragList(Int32) a constructor. Declaration public SimpleFieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Declaration public override void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList Overrides FieldFragList.Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesReader.html",
    "title": "Class SimpleTextDocValuesReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextDocValuesReader Inheritance System.Object DocValuesProducer SimpleTextDocValuesReader SimpleTextNormsFormat.SimpleTextNormsProducer Implements System.IDisposable Inherited Members DocValuesProducer.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextDocValuesReader : DocValuesProducer, IDisposable Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides DocValuesProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesProducer.Dispose(Boolean) | Improve this Doc View Source GetBinary(FieldInfo) Declaration public override BinaryDocValues GetBinary(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description BinaryDocValues Overrides DocValuesProducer.GetBinary(FieldInfo) | Improve this Doc View Source GetDocsWithField(FieldInfo) Declaration public override IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits Overrides DocValuesProducer.GetDocsWithField(FieldInfo) | Improve this Doc View Source GetNumeric(FieldInfo) Declaration public override NumericDocValues GetNumeric(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description NumericDocValues Overrides DocValuesProducer.GetNumeric(FieldInfo) | Improve this Doc View Source GetSorted(FieldInfo) Declaration public override SortedDocValues GetSorted(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description SortedDocValues Overrides DocValuesProducer.GetSorted(FieldInfo) | Improve this Doc View Source GetSortedSet(FieldInfo) Declaration public override SortedSetDocValues GetSortedSet(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description SortedSetDocValues Overrides DocValuesProducer.GetSortedSet(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides DocValuesProducer.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesWriter.html",
    "title": "Class SimpleTextDocValuesWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextDocValuesWriter Inheritance System.Object DocValuesConsumer SimpleTextDocValuesWriter SimpleTextNormsFormat.SimpleTextNormsConsumer Implements System.IDisposable Inherited Members DocValuesConsumer.MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) DocValuesConsumer.MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) DocValuesConsumer.MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) DocValuesConsumer.MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) DocValuesConsumer.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextDocValuesWriter : DocValuesConsumer, IDisposable Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Declaration public override void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values Overrides DocValuesConsumer.AddBinaryField(FieldInfo, IEnumerable<BytesRef>) | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Declaration public override void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> values Overrides DocValuesConsumer.AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrd Overrides DocValuesConsumer.AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Declaration public override void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrdCount System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> ords Overrides DocValuesConsumer.AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.html",
    "title": "Class TopOrdAndInt32Queue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopOrdAndInt32Queue Keeps highest results, first by largest System.Int32 value, then tie break by smallest ord. NOTE: This was TopOrdAndIntQueue in Lucene Inheritance System.Object PriorityQueue < TopOrdAndInt32Queue.OrdAndValue > TopOrdAndInt32Queue Inherited Members PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.GetSentinelObject() PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Add(TopOrdAndInt32Queue.OrdAndValue) PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.InsertWithOverflow(TopOrdAndInt32Queue.OrdAndValue) PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Top PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Pop() PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.UpdateTop() PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Count PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.Clear() PriorityQueue<TopOrdAndInt32Queue.OrdAndValue>.HeapArray System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class TopOrdAndInt32Queue : PriorityQueue<TopOrdAndInt32Queue.OrdAndValue> Constructors | Improve this Doc View Source TopOrdAndInt32Queue(Int32) Sole constructor. Declaration public TopOrdAndInt32Queue(int topN) Parameters Type Name Description System.Int32 topN Methods | Improve this Doc View Source LessThan(TopOrdAndInt32Queue.OrdAndValue, TopOrdAndInt32Queue.OrdAndValue) Declaration protected override bool LessThan(TopOrdAndInt32Queue.OrdAndValue a, TopOrdAndInt32Queue.OrdAndValue b) Parameters Type Name Description TopOrdAndInt32Queue.OrdAndValue a TopOrdAndInt32Queue.OrdAndValue b Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue>.LessThan(Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue, Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.html",
    "title": "Class TopOrdAndSingleQueue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopOrdAndSingleQueue Keeps highest results, first by largest System.Single value, then tie break by smallest ord. NOTE: This was TopOrdAndFloatQueue in Lucene Inheritance System.Object PriorityQueue < TopOrdAndSingleQueue.OrdAndValue > TopOrdAndSingleQueue Inherited Members PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.GetSentinelObject() PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Add(TopOrdAndSingleQueue.OrdAndValue) PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.InsertWithOverflow(TopOrdAndSingleQueue.OrdAndValue) PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Top PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Pop() PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.UpdateTop() PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Count PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.Clear() PriorityQueue<TopOrdAndSingleQueue.OrdAndValue>.HeapArray System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class TopOrdAndSingleQueue : PriorityQueue<TopOrdAndSingleQueue.OrdAndValue> Constructors | Improve this Doc View Source TopOrdAndSingleQueue(Int32) Sole constructor. Declaration public TopOrdAndSingleQueue(int topN) Parameters Type Name Description System.Int32 topN Methods | Improve this Doc View Source LessThan(TopOrdAndSingleQueue.OrdAndValue, TopOrdAndSingleQueue.OrdAndValue) Declaration protected override bool LessThan(TopOrdAndSingleQueue.OrdAndValue a, TopOrdAndSingleQueue.OrdAndValue b) Parameters Type Name Description TopOrdAndSingleQueue.OrdAndValue a TopOrdAndSingleQueue.OrdAndValue b Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue>.LessThan(Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue, Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.CachingTokenFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.CachingTokenFilter.html",
    "title": "Class CachingTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachingTokenFilter This class can be used if the token attributes of a TokenStream are intended to be consumed more than once. It caches all token attribute states locally in a List. CachingTokenFilter implements the optional method Reset() , which repositions the stream to the first Token . Inheritance System.Object AttributeSource TokenStream TokenFilter CachingTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class CachingTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CachingTokenFilter(TokenStream) Create a new CachingTokenFilter around input , caching its token attributes, which can be replayed again after a call to Reset() . Declaration public CachingTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Rewinds the iterator to the beginning of the cached list. Note that this does not call Reset() on the wrapped tokenstream ever, even the first time. You should Reset() the inner tokenstream before wrapping it with CachingTokenFilter . Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.html",
    "title": "Class NumericTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericTokenStream Expert: this class provides a TokenStream for indexing numeric values that can be used by NumericRangeQuery or NumericRangeFilter . Note that for simple usage, Int32Field , Int64Field , SingleField or DoubleField is recommended. These fields disable norms and term freqs, as they are not usually needed during searching. If you need to change these settings, you should use this class. Here's an example usage, for an System.Int32 field: IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value), fieldType); document.Add(field); For optimal performance, re-use the TokenStream and Field instance for more than one document: NumericTokenStream stream = new NumericTokenStream(precisionStep); IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, stream, fieldType); Document document = new Document(); document.Add(field); for(all documents) { stream.SetInt32Value(value) writer.AddDocument(document); } this stream is not intended to be used in analyzers; it's more for iterating the different precisions during indexing a specific numeric value. NOTE : as token streams are only consumed once the document is added to the index, if you index more than one numeric field, use a separate NumericTokenStream instance for each. See NumericRangeQuery for more details on the precisionStep parameter as well as how numeric fields work under the hood. @since 2.9 Inheritance System.Object AttributeSource TokenStream NumericTokenStream Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class NumericTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source NumericTokenStream() Creates a token stream for numeric values using the default Lucene.Net.Analysis.NumericTokenStream.precisionStep PRECISION_STEP_DEFAULT (4). The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream() | Improve this Doc View Source NumericTokenStream(AttributeSource.AttributeFactory, Int32) Expert: Creates a token stream for numeric values with the specified precisionStep using the given AttributeSource.AttributeFactory . The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream(AttributeSource.AttributeFactory factory, int precisionStep) Parameters Type Name Description AttributeSource.AttributeFactory factory System.Int32 precisionStep | Improve this Doc View Source NumericTokenStream(Int32) Creates a token stream for numeric values with the specified precisionStep . The stream is not yet initialized, before using set a value using the various Set ??? Value() methods. Declaration public NumericTokenStream(int precisionStep) Parameters Type Name Description System.Int32 precisionStep Fields | Improve this Doc View Source TOKEN_TYPE_FULL_PREC The full precision token gets this token type assigned. Declaration public const string TOKEN_TYPE_FULL_PREC = \"fullPrecNumeric\" Field Value Type Description System.String | Improve this Doc View Source TOKEN_TYPE_LOWER_PREC The lower precision tokens gets this token type assigned. Declaration public const string TOKEN_TYPE_LOWER_PREC = \"lowerPrecNumeric\" Field Value Type Description System.String Properties | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetDoubleValue(Double) Initializes the token stream with the supplied System.Double value. Declaration public NumericTokenStream SetDoubleValue(double value) Parameters Type Name Description System.Double value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetDoubleValue(value)) | Improve this Doc View Source SetInt32Value(Int32) Initializes the token stream with the supplied System.Int32 value. NOTE: This was setIntValue() in Lucene Declaration public NumericTokenStream SetInt32Value(int value) Parameters Type Name Description System.Int32 value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value)) | Improve this Doc View Source SetInt64Value(Int64) Initializes the token stream with the supplied System.Int64 value. NOTE: This was setLongValue() in Lucene Declaration public NumericTokenStream SetInt64Value(long value) Parameters Type Name Description System.Int64 value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetInt64Value(value)) | Improve this Doc View Source SetSingleValue(Single) Initializes the token stream with the supplied System.Single value. NOTE: This was setFloatValue() in Lucene Declaration public NumericTokenStream SetSingleValue(float value) Parameters Type Name Description System.Single value the value, for which this TokenStream should enumerate tokens. Returns Type Description NumericTokenStream this instance, because of this you can use it the following way: new Field(name, new NumericTokenStream(precisionStep).SetSingleValue(value)) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IFlagsAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IFlagsAttribute.html",
    "title": "Interface IFlagsAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFlagsAttribute This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter to another one. This is completely distinct from TypeAttribute , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. @lucene.experimental While we think this is here to stay, we may want to change it to be a long. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IFlagsAttribute : IAttribute Properties | Improve this Doc View Source Flags Get the bitset for any bits that have been set. This is completely distinct from Type , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. Declaration int Flags { get; set; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionIncrementAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionIncrementAttribute.html",
    "title": "Interface IPositionIncrementAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPositionIncrementAttribute Determines the position of this token relative to the previous Token in a TokenStream , used in phrase searching. The default value is one. Some common uses for this are: Set it to zero to put multiple terms in the same position. this is useful if, e.g., a word has multiple stems. Searches for phrases including either stem will match. In this case, all but the first stem's increment should be set to zero: the increment of the first instance should be one. Repeating a token with an increment of zero can also be used to boost the scores of matches on that token. Set it to values greater than one to inhibit exact phrase matches. If, for example, one does not want phrases to match across removed stop words, then one could build a stop word filter that removes stop words and also sets the increment to the number of stop words removed before each non-stop word. Then exact phrase queries will only match when the terms occur with no intervening stop words. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPositionIncrementAttribute : IAttribute Properties | Improve this Doc View Source PositionIncrement Gets or Sets the position increment (the distance from the prior term). The default value is one. Declaration int PositionIncrement { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if value is set to a negative value. Extension Methods Number.IsNumber(Object) See Also DocsAndPositionsEnum"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.OffsetAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.OffsetAttribute.html",
    "title": "Class OffsetAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OffsetAttribute Default implementation of IOffsetAttribute . Inheritance System.Object Attribute OffsetAttribute Implements IOffsetAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class OffsetAttribute : Attribute, IOffsetAttribute, IAttribute Constructors | Improve this Doc View Source OffsetAttribute() Initialize this attribute with startOffset and endOffset of 0. Declaration public OffsetAttribute() Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source SetOffset(Int32, Int32) Declaration public virtual void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Implements IOffsetAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.TypeAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.TypeAttribute.html",
    "title": "Class TypeAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TypeAttribute Default implementation of ITypeAttribute . Inheritance System.Object Attribute TypeAttribute Implements ITypeAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class TypeAttribute : Attribute, ITypeAttribute, IAttribute Constructors | Improve this Doc View Source TypeAttribute() Initialize this attribute with DEFAULT_TYPE Declaration public TypeAttribute() | Improve this Doc View Source TypeAttribute(String) Initialize this attribute with type Declaration public TypeAttribute(string type) Parameters Type Name Description System.String type Fields | Improve this Doc View Source DEFAULT_TYPE the default type Declaration public const string DEFAULT_TYPE = \"word\" Field Value Type Description System.String Properties | Improve this Doc View Source Type Declaration public virtual string Type { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements ITypeAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooNewException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooNewException.html",
    "title": "Class IndexFormatTooNewException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexFormatTooNewException This exception is thrown when Lucene detects an index that is newer than this Lucene version. Inheritance System.Object System.Exception System.IO.IOException CorruptIndexException IndexFormatTooNewException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class IndexFormatTooNewException : CorruptIndexException Constructors | Improve this Doc View Source IndexFormatTooNewException(DataInput, Int32, Int32, Int32) Creates an IndexFormatTooNewException This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooNewException(DataInput input, int version, int minVersion, int maxVersion) Parameters Type Name Description DataInput input the open file that's too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooNewException(String, Int32, Int32, Int32) Creates an IndexFormatTooNewException This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooNewException(string resourceDesc, int version, int minVersion, int maxVersion) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter-1.html",
    "title": "Class FieldCacheRangeFilter<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheRangeFilter<T> Inheritance System.Object Filter FieldCacheRangeFilter<T> Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldCacheRangeFilter<T> : Filter Type Parameters Name Description T Constructors | Improve this Doc View Source FieldCacheRangeFilter(String, FieldCache.IParser, T, T, Boolean, Boolean) Declaration protected FieldCacheRangeFilter(string field, FieldCache.IParser parser, T lowerVal, T upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IParser parser T lowerVal T upperVal System.Boolean includeLower System.Boolean includeUpper Properties | Improve this Doc View Source Field Returns the field name for this filter Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerVal Returns the lower value of this range filter Declaration public virtual T LowerVal { get; } Property Value Type Description T | Improve this Doc View Source Parser Returns the current numeric parser ( null for T is System.String ) Declaration public virtual FieldCache.IParser Parser { get; } Property Value Type Description FieldCache.IParser | Improve this Doc View Source UpperVal Returns the upper value of this range filter Declaration public virtual T UpperVal { get; } Property Value Type Description T Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) This method is implemented for each data type Declaration public abstract override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsFormat.html",
    "title": "Class SimpleTextTermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextTermVectorsFormat Plain text term vectors format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat SimpleTextTermVectorsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsFormat : TermVectorsFormat Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextTermVectorsReader.html",
    "title": "Class SimpleTextTermVectorsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextTermVectorsReader Reads plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader SimpleTextTermVectorsReader Implements System.IDisposable Inherited Members TermVectorsReader.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextTermVectorsReader : TermVectorsReader, IDisposable Constructors | Improve this Doc View Source SimpleTextTermVectorsReader(Directory, SegmentInfo, IOContext) Declaration public SimpleTextTermVectorsReader(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsReader.Dispose(Boolean) | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.html",
    "title": "Class AbstractGroupFacetCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractGroupFacetCollector Base class for computing grouped facets. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractGroupFacetCollector TermGroupFacetCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractGroupFacetCollector : ICollector Constructors | Improve this Doc View Source AbstractGroupFacetCollector(String, String, BytesRef) Declaration protected AbstractGroupFacetCollector(string groupField, string facetField, BytesRef facetPrefix) Parameters Type Name Description System.String groupField System.String facetField BytesRef facetPrefix Fields | Improve this Doc View Source m_endFacetOrd Declaration protected int m_endFacetOrd Field Value Type Description System.Int32 | Improve this Doc View Source m_facetField Declaration protected readonly string m_facetField Field Value Type Description System.String | Improve this Doc View Source m_facetPrefix Declaration protected readonly BytesRef m_facetPrefix Field Value Type Description BytesRef | Improve this Doc View Source m_groupField Declaration protected readonly string m_groupField Field Value Type Description System.String | Improve this Doc View Source m_segmentFacetCounts Declaration protected int[] m_segmentFacetCounts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_segmentResults Declaration protected readonly IList<AbstractGroupFacetCollector.AbstractSegmentResult> m_segmentResults Field Value Type Description System.Collections.Generic.IList < AbstractGroupFacetCollector.AbstractSegmentResult > | Improve this Doc View Source m_segmentTotalCount Declaration protected int m_segmentTotalCount Field Value Type Description System.Int32 | Improve this Doc View Source m_startFacetOrd Declaration protected int m_startFacetOrd Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CreateSegmentResult() Declaration protected abstract AbstractGroupFacetCollector.AbstractSegmentResult CreateSegmentResult() Returns Type Description AbstractGroupFacetCollector.AbstractSegmentResult | Improve this Doc View Source MergeSegmentResults(Int32, Int32, Boolean) Returns grouped facet results that were computed over zero or more segments. Grouped facet counts are merged from zero or more segment results. Declaration public virtual AbstractGroupFacetCollector.GroupedFacetResult MergeSegmentResults(int size, int minCount, bool orderByCount) Parameters Type Name Description System.Int32 size The total number of facets to include. This is typically offset + limit System.Int32 minCount The minimum count a facet entry should have to be included in the grouped facet result System.Boolean orderByCount Whether to sort the facet entries by facet entry count. If false then the facets are sorted lexicographically in ascending order. Returns Type Description AbstractGroupFacetCollector.GroupedFacetResult grouped facet results Exceptions Type Condition System.IO.IOException If I/O related errors occur during merging segment grouped facet counts. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector-1.html",
    "title": "Class AbstractSecondPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector<TGroupValue> SecondPassGroupingCollector is the second of two passes necessary to collect grouped docs. This pass gathers the top N documents per top group computed from the first pass. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector<TGroupValue> FunctionSecondPassGroupingCollector TermSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector <TGroupValue> ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractSecondPassGroupingCollector<TGroupValue> : IAbstractSecondPassGroupingCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source AbstractSecondPassGroupingCollector(IEnumerable<ISearchGroup<TGroupValue>>, Sort, Sort, Int32, Boolean, Boolean, Boolean) Declaration public AbstractSecondPassGroupingCollector(IEnumerable<ISearchGroup<TGroupValue>> groups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields) Parameters Type Name Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> groups Sort groupSort Sort withinGroupSort System.Int32 maxDocsPerGroup System.Boolean getScores System.Boolean getMaxScores System.Boolean fillSortFields Fields | Improve this Doc View Source m_groupDocs Declaration protected AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue>[] m_groupDocs Field Value Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue>[] | Improve this Doc View Source m_groupMap Declaration protected readonly IDictionary<TGroupValue, AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue>> m_groupMap Field Value Type Description System.Collections.Generic.IDictionary <TGroupValue, AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue>> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopGroups(Int32) Declaration public virtual ITopGroups<TGroupValue> GetTopGroups(int withinGroupOffset) Parameters Type Name Description System.Int32 withinGroupOffset Returns Type Description ITopGroups <TGroupValue> | Improve this Doc View Source RetrieveGroup(Int32) Returns the group the specified doc belongs to or null if no group could be retrieved. Declaration protected abstract AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc The specified doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue> the group the specified doc belongs to or null if no group could be retrieved Exceptions Type Condition System.IO.IOException If an I/O related error occurred | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.StopwordAnalyzerBase.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.StopwordAnalyzerBase.html",
    "title": "Class StopwordAnalyzerBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StopwordAnalyzerBase Base class for Analyzer s that need to make use of stopword sets. Inheritance System.Object Analyzer StopwordAnalyzerBase ArabicAnalyzer BulgarianAnalyzer BrazilianAnalyzer CatalanAnalyzer CJKAnalyzer SoraniAnalyzer StopAnalyzer CzechAnalyzer DanishAnalyzer GermanAnalyzer GreekAnalyzer EnglishAnalyzer SpanishAnalyzer BasqueAnalyzer PersianAnalyzer FinnishAnalyzer FrenchAnalyzer IrishAnalyzer GalicianAnalyzer HindiAnalyzer HungarianAnalyzer ArmenianAnalyzer IndonesianAnalyzer ItalianAnalyzer JapaneseAnalyzer LatvianAnalyzer NorwegianAnalyzer PolishAnalyzer PortugueseAnalyzer RomanianAnalyzer RussianAnalyzer ClassicAnalyzer StandardAnalyzer UAX29URLEmailAnalyzer SwedishAnalyzer TurkishAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.CreateComponents(String, TextReader) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class StopwordAnalyzerBase : Analyzer, IDisposable Constructors | Improve this Doc View Source StopwordAnalyzerBase(LuceneVersion) Creates a new Analyzer with an empty stopword set Declaration protected StopwordAnalyzerBase(LuceneVersion version) Parameters Type Name Description LuceneVersion version the Lucene version for cross version compatibility | Improve this Doc View Source StopwordAnalyzerBase(LuceneVersion, CharArraySet) Creates a new instance initialized with the given stopword set Declaration protected StopwordAnalyzerBase(LuceneVersion version, CharArraySet stopwords) Parameters Type Name Description LuceneVersion version the Lucene version for cross version compatibility CharArraySet stopwords the analyzer's stopword set Fields | Improve this Doc View Source m_matchVersion Declaration protected readonly LuceneVersion m_matchVersion Field Value Type Description LuceneVersion | Improve this Doc View Source m_stopwords An immutable stopword set Declaration protected readonly CharArraySet m_stopwords Field Value Type Description CharArraySet Properties | Improve this Doc View Source StopwordSet Returns the analyzer's stopword set or an empty set if the analyzer has no stopwords Declaration public virtual CharArraySet StopwordSet { get; } Property Value Type Description CharArraySet the analyzer's stopword set or an empty set if the analyzer has no stopwords Methods | Improve this Doc View Source LoadStopwordSet(Boolean, Type, String, String) Creates a CharArraySet from an embedded resource associated with a class. (See System.Reflection.Assembly.GetManifestResourceStream(System.String) ). Declaration protected static CharArraySet LoadStopwordSet(bool ignoreCase, Type aClass, string resource, string comment) Parameters Type Name Description System.Boolean ignoreCase true if the set should ignore the case of the stopwords, otherwise false System.Type aClass a class that is associated with the given stopwordResource System.String resource name of the resource file associated with the given class System.String comment comment string to ignore in the stopword file Returns Type Description CharArraySet a CharArraySet containing the distinct stopwords from the given file Exceptions Type Condition System.IO.IOException if loading the stopwords throws an System.IO.IOException | Improve this Doc View Source LoadStopwordSet(FileInfo, LuceneVersion) Creates a CharArraySet from a file. Declaration protected static CharArraySet LoadStopwordSet(FileInfo stopwords, LuceneVersion matchVersion) Parameters Type Name Description System.IO.FileInfo stopwords the stopwords file to load LuceneVersion matchVersion the Lucene version for cross version compatibility Returns Type Description CharArraySet a CharArraySet containing the distinct stopwords from the given file Exceptions Type Condition System.IO.IOException if loading the stopwords throws an System.IO.IOException | Improve this Doc View Source LoadStopwordSet(TextReader, LuceneVersion) Creates a CharArraySet from a file. Declaration protected static CharArraySet LoadStopwordSet(TextReader stopwords, LuceneVersion matchVersion) Parameters Type Name Description System.IO.TextReader stopwords the stopwords reader to load LuceneVersion matchVersion the Lucene version for cross version compatibility Returns Type Description CharArraySet a CharArraySet containing the distinct stopwords from the given reader Exceptions Type Condition System.IO.IOException if loading the stopwords throws an System.IO.IOException Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.TokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.TokenFilterFactory.html",
    "title": "Class TokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenFilterFactory Abstract parent class for analysis factories that create TokenFilter instances. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ArabicNormalizationFilterFactory ArabicStemFilterFactory BulgarianStemFilterFactory BrazilianStemFilterFactory CJKBigramFilterFactory CJKWidthFilterFactory SoraniNormalizationFilterFactory SoraniStemFilterFactory ChineseFilterFactory CommonGramsFilterFactory DictionaryCompoundWordTokenFilterFactory HyphenationCompoundWordTokenFilterFactory LowerCaseFilterFactory StopFilterFactory TypeTokenFilterFactory UpperCaseFilterFactory CzechStemFilterFactory GermanLightStemFilterFactory GermanMinimalStemFilterFactory GermanNormalizationFilterFactory GermanStemFilterFactory GreekLowerCaseFilterFactory GreekStemFilterFactory EnglishMinimalStemFilterFactory EnglishPossessiveFilterFactory KStemFilterFactory PorterStemFilterFactory SpanishLightStemFilterFactory PersianNormalizationFilterFactory FinnishLightStemFilterFactory FrenchLightStemFilterFactory FrenchMinimalStemFilterFactory IrishLowerCaseFilterFactory GalicianMinimalStemFilterFactory GalicianStemFilterFactory HindiNormalizationFilterFactory HindiStemFilterFactory HungarianLightStemFilterFactory HunspellStemFilterFactory IndonesianStemFilterFactory IndicNormalizationFilterFactory ItalianLightStemFilterFactory JapaneseBaseFormFilterFactory JapaneseKatakanaStemFilterFactory JapanesePartOfSpeechStopFilterFactory JapaneseReadingFormFilterFactory LatvianStemFilterFactory ASCIIFoldingFilterFactory CapitalizationFilterFactory CodepointCountFilterFactory HyphenatedWordsFilterFactory KeepWordFilterFactory KeywordMarkerFilterFactory KeywordRepeatFilterFactory LengthFilterFactory LimitTokenCountFilterFactory LimitTokenPositionFilterFactory RemoveDuplicatesTokenFilterFactory ScandinavianFoldingFilterFactory ScandinavianNormalizationFilterFactory StemmerOverrideFilterFactory TrimFilterFactory TruncateTokenFilterFactory WordDelimiterFilterFactory EdgeNGramFilterFactory NGramFilterFactory NorwegianLightStemFilterFactory NorwegianMinimalStemFilterFactory PatternCaptureGroupFilterFactory PatternReplaceFilterFactory DelimitedPayloadTokenFilterFactory NumericPayloadTokenFilterFactory TokenOffsetPayloadTokenFilterFactory TypeAsPayloadTokenFilterFactory BeiderMorseFilterFactory DoubleMetaphoneFilterFactory PhoneticFilterFactory PositionFilterFactory PortugueseLightStemFilterFactory PortugueseMinimalStemFilterFactory PortugueseStemFilterFactory ReverseStringFilterFactory RussianLightStemFilterFactory ShingleFilterFactory SnowballPorterFilterFactory ClassicFilterFactory StandardFilterFactory StempelPolishStemFilterFactory SwedishLightStemFilterFactory SynonymFilterFactory ApostropheFilterFactory TurkishLowerCaseFilterFactory ElisionFilterFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class TokenFilterFactory : AbstractAnalysisFactory Constructors | Improve this Doc View Source TokenFilterFactory(IDictionary<String, String>) Initialize this factory via a set of key-value pairs. Declaration protected TokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source AvailableTokenFilters returns a list of all available tokenfilter names from the host project's referenced assemblies Declaration public static ICollection<string> AvailableTokenFilters { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source Create(TokenStream) Transform the specified input TokenStream Declaration public abstract TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream | Improve this Doc View Source ForName(String, IDictionary<String, String>) looks up a tokenfilter by name from the host project's referenced assemblies Declaration public static TokenFilterFactory ForName(string name, IDictionary<string, string> args) Parameters Type Name Description System.String name System.Collections.Generic.IDictionary < System.String , System.String > args Returns Type Description TokenFilterFactory | Improve this Doc View Source LookupClass(String) looks up a tokenfilter class by name from the host project's referenced assemblies Declaration public static Type LookupClass(string name) Parameters Type Name Description System.String name Returns Type Description System.Type | Improve this Doc View Source ReloadTokenFilters() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableTokenFilters ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadTokenFilters()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.TokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.TokenizerFactory.html",
    "title": "Class TokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenizerFactory Abstract parent class for analysis factories that create Tokenizer instances. Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ArabicLetterTokenizerFactory CJKTokenizerFactory ChineseTokenizerFactory KeywordTokenizerFactory LetterTokenizerFactory LowerCaseTokenizerFactory WhitespaceTokenizerFactory JapaneseTokenizerFactory EdgeNGramTokenizerFactory NGramTokenizerFactory PathHierarchyTokenizerFactory PatternTokenizerFactory RussianLetterTokenizerFactory ClassicTokenizerFactory StandardTokenizerFactory UAX29URLEmailTokenizerFactory WikipediaTokenizerFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class TokenizerFactory : AbstractAnalysisFactory Constructors | Improve this Doc View Source TokenizerFactory(IDictionary<String, String>) Initialize this factory via a set of key-value pairs. Declaration protected TokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source AvailableTokenizers returns a list of all available tokenizer names from the host project's referenced assemblies Declaration public static ICollection<string> AvailableTokenizers { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Creates a TokenStream of the specified input using the given AttributeSource.AttributeFactory Declaration public abstract Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer | Improve this Doc View Source Create(TextReader) Creates a TokenStream of the specified input using the default attribute factory. Declaration public Tokenizer Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description Tokenizer | Improve this Doc View Source ForName(String, IDictionary<String, String>) looks up a tokenizer by name from the host project's referenced assemblies Declaration public static TokenizerFactory ForName(string name, IDictionary<string, string> args) Parameters Type Name Description System.String name System.Collections.Generic.IDictionary < System.String , System.String > args Returns Type Description TokenizerFactory | Improve this Doc View Source LookupClass(String) looks up a tokenizer class by name from the host project's referenced assemblies Declaration public static Type LookupClass(string name) Parameters Type Name Description System.String name Returns Type Description System.Type | Improve this Doc View Source ReloadTokenizers() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableTokenizers ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadTokenizers()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.FilterBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.FilterBuilderFactory.html",
    "title": "Class FilterBuilderFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterBuilderFactory Factory for IFilterBuilder Inheritance System.Object FilterBuilderFactory Implements IFilterBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class FilterBuilderFactory : IFilterBuilder Methods | Improve this Doc View Source AddBuilder(String, IFilterBuilder) Declaration public virtual void AddBuilder(string nodeName, IFilterBuilder builder) Parameters Type Name Description System.String nodeName IFilterBuilder builder | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement n) Parameters Type Name Description System.Xml.XmlElement n Returns Type Description Filter | Improve this Doc View Source GetFilterBuilder(String) Declaration public virtual IFilterBuilder GetFilterBuilder(string nodeName) Parameters Type Name Description System.String nodeName Returns Type Description IFilterBuilder Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.ParserException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.ParserException.html",
    "title": "Class ParserException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParserException Thrown when the xml queryparser encounters invalid syntax/configuration. Inheritance System.Object System.Exception ParserException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class ParserException : Exception Constructors | Improve this Doc View Source ParserException() Declaration public ParserException() | Improve this Doc View Source ParserException(Exception) Declaration public ParserException(Exception cause) Parameters Type Name Description System.Exception cause | Improve this Doc View Source ParserException(String) Declaration public ParserException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source ParserException(String, Exception) Declaration public ParserException(string message, Exception cause) Parameters Type Name Description System.String message System.Exception cause"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.QueryBuilderFactory.html",
    "title": "Class QueryBuilderFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryBuilderFactory Factory for IQueryBuilder Inheritance System.Object QueryBuilderFactory Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryBuilderFactory : IQueryBuilder Methods | Improve this Doc View Source AddBuilder(String, IQueryBuilder) Declaration public virtual void AddBuilder(string nodeName, IQueryBuilder builder) Parameters Type Name Description System.String nodeName IQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement n) Parameters Type Name Description System.Xml.XmlElement n Returns Type Description Query | Improve this Doc View Source GetQueryBuilder(String) Declaration public virtual IQueryBuilder GetQueryBuilder(string nodeName) Parameters Type Name Description System.String nodeName Returns Type Description IQueryBuilder Implements IQueryBuilder"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.FieldReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.FieldReader.html",
    "title": "Class BlockTreeTermsReader.FieldReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTreeTermsReader.FieldReader BlockTree's implementation of GetTerms(String) . Inheritance System.Object Terms BlockTreeTermsReader.FieldReader Inherited Members Terms.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class FieldReader : Terms Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source ComputeStats() For debugging -- used by CheckIndex too Declaration public BlockTreeTermsReader.Stats ComputeStats() Returns Type Description BlockTreeTermsReader.Stats | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum) | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Declaration public override TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum Overrides Terms.Intersect(CompiledAutomaton, BytesRef) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used Declaration public long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormatNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormatNameAttribute.html",
    "title": "Class PostingsFormatNameAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsFormatNameAttribute Represents an attribute that is used to name a PostingsFormat , if a name other than the default PostingsFormat naming convention is desired. Inheritance System.Object System.Attribute ServiceNameAttribute PostingsFormatNameAttribute Inherited Members ServiceNameAttribute.Name System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public sealed class PostingsFormatNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source PostingsFormatNameAttribute(String) Declaration public PostingsFormatNameAttribute(string name) Parameters Type Name Description System.String name Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsReader.html",
    "title": "Class StoredFieldsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredFieldsReader Codec API for reading stored fields. You need to implement VisitDocument(Int32, StoredFieldVisitor) to read the stored fields for a document, implement Clone() (creating clones of any IndexInput s used, etc), and Dispose(Boolean) to cleanup any allocated resources. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader CompressingStoredFieldsReader Lucene40StoredFieldsReader Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsReader : IDisposable Constructors | Improve this Doc View Source StoredFieldsReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsReader() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Visit the stored fields for document n . Declaration public abstract void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DoubleDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DoubleDocValuesField.html",
    "title": "Class DoubleDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleDocValuesField Syntactic sugar for encoding doubles as NumericDocValues via DoubleToRawInt64Bits(Double) . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. Inheritance System.Object Field NumericDocValuesField DoubleDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetSingleValue(Single) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class DoubleDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source DoubleDocValuesField(String, Double) Creates a new DocValues field with the specified 64-bit double value Declaration public DoubleDocValuesField(string name, double value) Parameters Type Name Description System.String name field name System.Double value 64-bit double value Exceptions Type Condition System.ArgumentNullException if the field name is null Methods | Improve this Doc View Source SetDoubleValue(Double) Declaration public override void SetDoubleValue(double value) Parameters Type Name Description System.Double value Overrides Field.SetDoubleValue(Double) | Improve this Doc View Source SetInt64Value(Int64) Declaration public override void SetInt64Value(long value) Parameters Type Name Description System.Int64 value Overrides Field.SetInt64Value(Int64) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DoubleField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DoubleField.html",
    "title": "Class DoubleField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleField Field that indexes System.Double values for efficient range filtering and sorting. Here's an example usage: document.Add(new DoubleField(name, 6.0, Field.Store.NO)); For optimal performance, re-use the DoubleField and Document instance for more than one document: DoubleField field = new DoubleField(name, 0.0, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetDoubleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , SingleField . To perform range querying or filtering against a DoubleField , use NumericRangeQuery or NumericRangeFilter<T> . To sort according to a DoubleField , use the normal numeric sort types, eg DOUBLE . DoubleField values can also be loaded directly from IFieldCache . You may add the same field name as an DoubleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued DoubleField . A DoubleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep ( precisionStep ) configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. @since 2.9 Inheritance System.Object Field DoubleField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class DoubleField : Field, IIndexableField Constructors | Improve this Doc View Source DoubleField(String, Double, Field.Store) Creates a stored or un-stored DoubleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public DoubleField(string name, double value, Field.Store stored) Parameters Type Name Description System.String name field name System.Double value 64-bit System.Double value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source DoubleField(String, Double, FieldType) Expert: allows you to customize the FieldType . Declaration public DoubleField(string name, double value, FieldType type) Parameters Type Name Description System.String name field name System.Double value 64-bit double value FieldType type customized field type: must have NumericType of DOUBLE . Exceptions Type Condition System.ArgumentNullException if the field name or type is null , or if the field type does not have a DOUBLE NumericType Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a DoubleField that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored DoubleField : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoFormat.html",
    "title": "Class Lucene40SegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SegmentInfoFormat Lucene 4.0 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Attributes, Files Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( WriteStringSet(ISet<String>) ) Diagnostics, Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. Checksum contains the CRC32 checksum of all bytes in the segments_N file up until the checksum. This is used to verify integrity of the file on opening the index. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Attributes: a key-value map of codec-private attributes. Files is a list of files referred to by this segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene40SegmentInfoFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0-4.5 segments, and supporting IndexWriter.AddIndexes()\")] public class Lucene40SegmentInfoFormat : SegmentInfoFormat Constructors | Improve this Doc View Source Lucene40SegmentInfoFormat() Sole constructor. Declaration public Lucene40SegmentInfoFormat() Fields | Improve this Doc View Source SI_EXTENSION File extension used to store SegmentInfo . Declaration public static readonly string SI_EXTENSION Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter Extension Methods Number.IsNumber(Object) See Also SegmentInfos"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoReader.html",
    "title": "Class Lucene40SegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SegmentInfoReader Lucene 4.0 implementation of SegmentInfoReader . @lucene.experimental Inheritance System.Object SegmentInfoReader Lucene40SegmentInfoReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0-4.5 segments\")] public class Lucene40SegmentInfoReader : SegmentInfoReader Constructors | Improve this Doc View Source Lucene40SegmentInfoReader() Sole constructor. Declaration public Lucene40SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory dir, string segment, IOContext context) Parameters Type Name Description Directory dir System.String segment IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) Extension Methods Number.IsNumber(Object) See Also Lucene40SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsBaseFormat.html",
    "title": "Class Lucene41PostingsBaseFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsBaseFormat Lucene41PostingsBaseFormat Inherited Members PostingsBaseFormat.Name System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsBaseFormat : PostingsBaseFormat Constructors | Improve this Doc View Source Lucene41PostingsBaseFormat() Sole constructor. Declaration public Lucene41PostingsBaseFormat() Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Declaration public override PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase Overrides PostingsBaseFormat.PostingsReaderBase(SegmentReadState) | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Declaration public override PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase Overrides PostingsBaseFormat.PostingsWriterBase(SegmentWriteState) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsFormat.html",
    "title": "Class Lucene41PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsFormat Lucene 4.1 postings format, which encodes postings in packed integer blocks for fast decode. NOTE : this format is still experimental and subject to change without backwards compatibility. Basic idea: Packed Blocks and VInt Blocks : In packed blocks, integers are encoded with the same bit width packed format ( PackedInt32s ): the block size (i.e. number of integers inside block) is fixed (currently 128). Additionally blocks that are all the same value are encoded in an optimized way. In VInt blocks, integers are encoded as VInt ( WriteVInt32(Int32) ): the block size is variable. Block structure : When the postings are long enough, Lucene41PostingsFormat will try to encode most integer data as a packed block. Take a term with 259 documents as an example, the first 256 document ids are encoded as two packed blocks, while the remaining 3 are encoded as one VInt block. Different kinds of data are always encoded separately into different packed blocks, but may possibly be interleaved into the same VInt block. This strategy is applied to pairs: <document number, frequency>, <position, payload length>, <position, offset start, offset length>, and <position, payload length, offsetstart, offset length>. Skipdata settings : The structure of skip table is quite similar to previous version of Lucene. Skip interval is the same as block size, and each skip entry points to the beginning of each block. However, for the first block, skip data is omitted. Positions, Payloads, and Offsets : A position is an integer indicating where the term occurs within one document. A payload is a blob of metadata associated with current position. An offset is a pair of integers indicating the tokenized start/end offsets for given term in current position: it is essentially a specialized payload. When payloads and offsets are not omitted, numPositions==numPayloads==numOffsets (assuming a null payload contributes one count). As mentioned in block structure, it is possible to encode these three either combined or separately. In all cases, payloads and offsets are stored together. When encoded as a packed block, position data is separated out as .pos, while payloads and offsets are encoded in .pay (payload metadata will also be stored directly in .pay). When encoded as VInt blocks, all these three are stored interleaved into the .pos (so is payload metadata). With this strategy, the majority of payload and offset data will be outside .pos file. So for queries that require only position data, running on a full index with payloads and offsets, this reduces disk pre-fetches. Files and detailed format: .tim : Term Dictionary .tip : Term Index .doc : Frequencies and Skip Data .pos : Positions .pay : Payloads and Offsets Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions, payload and skip data in the .doc, .pos, and .pay files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the PostingsHeader and TermMetadata sections described here: PostingsHeader --> Header, PackedBlockSize TermMetadata --> (DocFPDelta|SingletonDocID), PosFPDelta?, PosVIntBlockFPDelta?, PayFPDelta?, SkipFPDelta? Header, --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedBlockSize, SingletonDocID --> VInt ( WriteVInt32(Int32) ) DocFPDelta, PosFPDelta, PayFPDelta, PosVIntBlockFPDelta, SkipFPDelta --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. PackedBlockSize is the fixed block size for packed blocks. In packed block, bit width is determined by the largest integer. Smaller block size result in smaller variance among width of integers hence smaller indexes. Larger block size result in more efficient bulk i/o hence better acceleration. This value should always be a multiple of 64, currently fixed as 128 as a tradeoff. It is also the skip interval used to accelerate Advance(Int32) . DocFPDelta determines the position of this term's TermFreqs within the .doc file. In particular, it is the difference of file offset between this term's data and previous term's data (or zero, for the first term in the block).On disk it is stored as the difference from previous value in sequence. PosFPDelta determines the position of this term's TermPositions within the .pos file. While PayFPDelta determines the position of this term's <TermPayloads, TermOffsets?> within the .pay file. Similar to DocFPDelta, it is the difference between two file positions (or neglected, for fields that omit payloads and offsets). PosVIntBlockFPDelta determines the position of this term's last TermPosition in last pos packed block within the .pos file. It is synonym for PayVIntBlockFPDelta or OffsetVIntBlockFPDelta. This is actually used to indicate whether it is necessary to load following payloads and offsets from .pos instead of .pay. Every time a new block of positions are to be loaded, the PostingsReader will use this value to check whether current block is packed format or VInt. When packed format, payloads and offsets are fetched from .pay, otherwise from .pos. (this value is neglected when total number of positions i.e. totalTermFreq is less or equal to PackedBlockSize). SkipFPDelta determines the position of this term's SkipData within the .doc file. In particular, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum (i.e. 128 in Lucene41PostingsFormat). SingletonDocID is an optimization when a term only appears in one document. In this case, instead of writing a file pointer to the .doc file (DocFPDelta), and then a VIntBlock at that location, the single document ID is written to the term dictionary. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies and Skip Data The .doc file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). It also saves skip data to the beginning of each packed or VInt block, when the length of document list is larger than packed block size. docFile(.doc) --> Header, <TermFreqs, SkipData?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <PackedBlock> PackedDocBlockNum , VIntBlock? PackedBlock --> PackedDocDeltaBlock, PackedFreqBlock? VIntBlock --> <DocDelta[, Freq?]> DocFreq-PackedBlockSize PackedDocBlockNum SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel>, SkipDatum? SkipLevel --> <SkipDatum> TrimmedDocFreq/(PackedBlockSize^(Level + 1)) SkipDatum --> DocSkip, DocFPSkip, <PosFPSkip, PosBlockOffset, PayLength?, PayFPSkip?>?, SkipChildLevelPointer? PackedDocDeltaBlock, PackedFreqBlock --> PackedInts ( PackedInt32s ) DocDelta, Freq, DocSkip, DocFPSkip, PosFPSkip, PosBlockOffset, PayByteUpto, PayFPSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: PackedDocDeltaBlock is theoretically generated from two steps: Calculate the difference between each document number and previous one, and get a d-gaps list (for the first document, use absolute value); For those d-gaps from first one to PackedDocBlockNumPackedBlockSize th , separately encode as packed blocks. If frequencies are not omitted, PackedFreqBlock will be generated without d-gap step. VIntBlock stores remaining d-gaps (along with frequencies when possible) with a format that encodes DocDelta and Freq: DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 PackedDocBlockNum is the number of packed blocks for current term's docids or frequencies. In particular, PackedDocBlockNum = floor(DocFreq/PackedBlockSize) TrimmedDocFreq = DocFreq % PackedBlockSize == 0 ? DocFreq - 1 : DocFreq. We use this trick since the definition of skip entry is a little different from base interface. In MultiLevelSkipListWriter , skip data is assumed to be saved for skipInterval th , 2 skipInterval th ... posting in the list. However, in Lucene41PostingsFormat, the skip data is saved for skipInterval+1 th , 2 skipInterval+1 th ... posting (skipInterval==PackedBlockSize in this case). When DocFreq is multiple of PackedBlockSize, MultiLevelSkipListWriter will expect one more skip data than Lucene41SkipWriter. SkipDatum is the metadata of one skip entry. For the first block (no matter packed or VInt), it is omitted. DocSkip records the document number of every PackedBlockSize th document number in the postings (i.e. last document number in each packed block). On disk it is stored as the difference from previous value in the sequence. DocFPSkip records the file offsets of each block (excluding )posting at PackedBlockSize+1 th , 2*PackedBlockSize+1 th ... , in DocFile. The file offsets are relative to the start of current term's TermFreqs. On disk it is also stored as the difference from previous SkipDatum in the sequence. Since positions and payloads are also block encoded, the skip should skip to related block first, then fetch the values according to in-block offset. PosFPSkip and PayFPSkip record the file offsets of related block in .pos and .pay, respectively. While PosBlockOffset indicates which value to fetch inside the related block (PayBlockOffset is unnecessary since it is always equal to PosBlockOffset). Same as DocFPSkip, the file offsets are relative to the start of current term's TermFreqs, and stored as a difference sequence. PayByteUpto indicates the start offset of the current payload. It is equivalent to the sum of the payload lengths in the current block up to PosBlockOffset Positions The .pos file contains the lists of positions that each term occurs at within documents. It also sometimes stores part of payloads and offsets for speedup. PosFile(.pos) --> Header, <TermPositions> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <PackedPosDeltaBlock> PackedPosBlockNum , VIntBlock? VIntBlock --> <PositionDelta[, PayloadLength?], PayloadData?, OffsetDelta?, OffsetLength?> PosVIntCount PackedPosDeltaBlock --> PackedInts ( PackedInt32s ) PositionDelta, OffsetDelta, OffsetLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: TermPositions are order by term (terms are implicit, from the term dictionary), and position values for each term document pair are incremental, and ordered by document number. PackedPosBlockNum is the number of packed blocks for current term's positions, payloads or offsets. In particular, PackedPosBlockNum = floor(totalTermFreq/PackedBlockSize) PosVIntCount is the number of positions encoded as VInt format. In particular, PosVIntCount = totalTermFreq - PackedPosBlockNum*PackedBlockSize The procedure how PackedPosDeltaBlock is generated is the same as PackedDocDeltaBlock in chapter Frequencies and Skip Data . PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Payloads and Offsets The .pay file will store payloads and offsets associated with certain term-document positions. Some payloads and offsets will be separated out into .pos file, for performance reasons. PayFile(.pay): --> Header, <TermPayloads, TermOffsets?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPayloads --> <PackedPayLengthBlock, SumPayLength, PayData> PackedPayBlockNum TermOffsets --> <PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock> PackedPayBlockNum PackedPayLengthBlock, PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock --> PackedInts ( PackedInt32s ) SumPayLength --> VInt ( WriteVInt32(Int32) ) PayData --> byte ( WriteByte(Byte) ) SumPayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The order of TermPayloads/TermOffsets will be the same as TermPositions, note that part of payload/offsets are stored in .pos. The procedure how PackedPayLengthBlock and PackedOffsetLengthBlock are generated is the same as PackedFreqBlock in chapter Frequencies and Skip Data . While PackedStartDeltaBlock follows a same procedure as PackedDocDeltaBlock. PackedPayBlockNum is always equal to PackedPosBlockNum, for the same term. It is also synonym for PackedOffsetBlockNum. SumPayLength is the total length of payloads written within one block, should be the sum of PayLengths in one packed block. PayLength in PackedPayLengthBlock is the length of each payload associated with the current position. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat Lucene41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax [PostingsFormatName(\"Lucene41\")] public sealed class Lucene41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source Lucene41PostingsFormat() Creates Lucene41PostingsFormat with default settings. Declaration public Lucene41PostingsFormat() | Improve this Doc View Source Lucene41PostingsFormat(Int32, Int32) Creates Lucene41PostingsFormat with custom values for minTermBlockSize and maxTermBlockSize passed to block terms dictionary. Declaration public Lucene41PostingsFormat(int minTermBlockSize, int maxTermBlockSize) Parameters Type Name Description System.Int32 minTermBlockSize System.Int32 maxTermBlockSize See Also BlockTreeTermsWriter(SegmentWriteState, PostingsWriterBase, Int32, Int32) Fields | Improve this Doc View Source BLOCK_SIZE Fixed packed block size, number of integers encoded in a single packed block. Declaration public static int BLOCK_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source DOC_EXTENSION Filename extension for document number, frequencies, and skip data. See chapter: Frequencies and Skip Data Declaration public const string DOC_EXTENSION = \"doc\" Field Value Type Description System.String | Improve this Doc View Source PAY_EXTENSION Filename extension for payloads and offsets. See chapter: Payloads and Offsets Declaration public const string PAY_EXTENSION = \"pay\" Field Value Type Description System.String | Improve this Doc View Source POS_EXTENSION Filename extension for positions. See chapter: Positions Declaration public const string POS_EXTENSION = \"pos\" Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePair-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePair-2.html",
    "title": "Struct KeyValuePair<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Struct KeyValuePair<K, V> An entry in a dictionary from K to V. Implements System.IEquatable < KeyValuePair <K, V>> IShowable System.IFormattable Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public struct KeyValuePair<K, V> : IEquatable<KeyValuePair<K, V>>, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source KeyValuePair(K) Create an entry with a specified key. The value will be the default value of type V . Declaration public KeyValuePair(K key) Parameters Type Name Description K key The key | Improve this Doc View Source KeyValuePair(K, V) Create an entry with specified key and value Declaration public KeyValuePair(K key, V value) Parameters Type Name Description K key The key V value The value Fields | Improve this Doc View Source Key The key field of the entry Declaration public K Key Field Value Type Description K | Improve this Doc View Source Value The value field of the entry Declaration public V Value Field Value Type Description V Methods | Improve this Doc View Source Equals(KeyValuePair<K, V>) Declaration public bool Equals(KeyValuePair<K, V> other) Parameters Type Name Description KeyValuePair <K, V> other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Check equality of entries. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj The other object Returns Type Description System.Boolean True if obj is an entry of the same type and has the same key and value Overrides System.ValueType.Equals(System.Object) | Improve this Doc View Source GetHashCode() Get the hash code of the pair. Declaration public override int GetHashCode() Returns Type Description System.Int32 The hash code Overrides System.ValueType.GetHashCode() | Improve this Doc View Source Show(StringBuilder, ref Int32, IFormatProvider) Declaration public bool Show(StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest System.IFormatProvider formatProvider Returns Type Description System.Boolean | Improve this Doc View Source ToString() Pretty print an entry Declaration public override string ToString() Returns Type Description System.String (key, value) Overrides System.ValueType.ToString() | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public string ToString(string format, IFormatProvider formatProvider) Parameters Type Name Description System.String format System.IFormatProvider formatProvider Returns Type Description System.String Operators | Improve this Doc View Source Equality(KeyValuePair<K, V>, KeyValuePair<K, V>) Declaration public static bool operator ==(KeyValuePair<K, V> pair1, KeyValuePair<K, V> pair2) Parameters Type Name Description KeyValuePair <K, V> pair1 KeyValuePair <K, V> pair2 Returns Type Description System.Boolean | Improve this Doc View Source Inequality(KeyValuePair<K, V>, KeyValuePair<K, V>) Declaration public static bool operator !=(KeyValuePair<K, V> pair1, KeyValuePair<K, V> pair2) Parameters Type Name Description KeyValuePair <K, V> pair1 KeyValuePair <K, V> pair2 Returns Type Description System.Boolean Implements System.IEquatable<T> IShowable System.IFormattable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.WeakDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.WeakDictionary-2.html",
    "title": "Class WeakDictionary<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeakDictionary<TKey, TValue> Inheritance System.Object WeakDictionary<TKey, TValue> Implements System.Collections.Generic.IDictionary <TKey, TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public sealed class WeakDictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable where TKey : class Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source WeakDictionary() Declaration public WeakDictionary() | Improve this Doc View Source WeakDictionary(IEnumerable<KeyValuePair<TKey, TValue>>) Declaration public WeakDictionary(IEnumerable<KeyValuePair<TKey, TValue>> otherDictionary) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> otherDictionary | Improve this Doc View Source WeakDictionary(Int32) Declaration public WeakDictionary(int initialCapacity) Parameters Type Name Description System.Int32 initialCapacity Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public ICollection<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <TKey> | Improve this Doc View Source Values Declaration public ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source ContainsKey(TKey) Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> | Improve this Doc View Source Remove(TKey) Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Explicit Interface Implementations | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue>) Declaration void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue>) Declaration bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration void ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue>) Declaration bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods DictionaryExtensions.PutAll<TKey, TValue>(IDictionary<TKey, TValue>, IEnumerable<KeyValuePair<TKey, TValue>>) DictionaryExtensions.EntrySet<TKey, TValue>(IDictionary<TKey, TValue>) DictionaryExtensions.Put<TKey, TValue>(IDictionary<TKey, TValue>, TKey, TValue) EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.WritableArrayAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.WritableArrayAttribute.html",
    "title": "Class WritableArrayAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WritableArrayAttribute Attribute to define a property or method as a writable array. Per MSDN, members should never return arrays because the array contents can be updated, which makes the behavior confusing. However, Lucene's design sometimes relies on other classes to update arrays - both as array fields and as methods that return arrays. So, in these cases we are making an exception to this rule and marking them with WritableArrayAttribute to signify that this is intentional. For properties that violate this rule, you should also use the System.Diagnostics.CodeAnalysis.SuppressMessageAttribute : [WritableArray, SuppressMessage(\"Microsoft.Performance\", \"CA1819\", Justification = \"Lucene's design requires some writable array properties\")] Inheritance System.Object System.Attribute WritableArrayAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)] public class WritableArrayAttribute : Attribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache-2.html",
    "title": "Class DoubleBarrelLRUCache<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleBarrelLRUCache<TKey, TValue> Simple concurrent LRU cache, using a \"double barrel\" approach where two ConcurrentHashMaps record entries. At any given time, one hash is primary and the other is secondary. Get(TKey) first checks primary, and if that's a miss, checks secondary. If secondary has the entry, it's promoted to primary ( NOTE : the key is cloned at this point). Once primary is full, the secondary is cleared and the two are swapped. This is not as space efficient as other possible concurrent approaches (see LUCENE-2075): to achieve perfect LRU(N) it requires 2*N storage. But, this approach is relatively simple and seems in practice to not grow unbounded in size when under hideously high load. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DoubleBarrelLRUCache DoubleBarrelLRUCache<TKey, TValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class DoubleBarrelLRUCache<TKey, TValue> : DoubleBarrelLRUCache where TKey : DoubleBarrelLRUCache.CloneableKey Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source DoubleBarrelLRUCache(Int32) Declaration public DoubleBarrelLRUCache(int maxCount) Parameters Type Name Description System.Int32 maxCount Methods | Improve this Doc View Source Get(TKey) Declaration public TValue Get(TKey key) Parameters Type Name Description TKey key Returns Type Description TValue | Improve this Doc View Source Put(TKey, TValue) Declaration public void Put(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilterFactory.html",
    "title": "Class JapaneseBaseFormFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseBaseFormFilterFactory Factory for JapaneseBaseFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseBaseFormFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseBaseFormFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseBaseFormFilterFactory(IDictionary<String, String>) Creates a new JapaneseBaseFormFilterFactory Declaration public JapaneseBaseFormFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilter.html",
    "title": "Class JapaneseIterationMarkCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseIterationMarkCharFilter Normalizes Japanese horizontal iteration marks (odoriji) to their expanded form. Inheritance System.Object System.IO.TextReader CharFilter JapaneseIterationMarkCharFilter Implements System.IDisposable Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseIterationMarkCharFilter : CharFilter, IDisposable Remarks Sequences of iteration marks are supported. In case an illegal sequence of iteration marks is encountered, the implementation emits the illegal source character as-is without considering its script. For example, with input \"?ゝ\", we get \"??\" even though \"?\" isn't hiragana. Note that a full stop punctuation character \"。\" (U+3002) can not be iterated (see below). Iteration marks themselves can be emitted in case they are illegal, i.e. if they go back past the beginning of the character stream. The implementation buffers input until a full stop punctuation character (U+3002) or EOF is reached in order to not keep a copy of the character stream in memory. Vertical iteration marks, which are even rarer than horizontal iteration marks in contemporary Japanese, are unsupported. Constructors | Improve this Doc View Source JapaneseIterationMarkCharFilter(TextReader) Constructor. Normalizes both kanji and kana iteration marks by default. Declaration public JapaneseIterationMarkCharFilter(TextReader input) Parameters Type Name Description System.IO.TextReader input Char stream. | Improve this Doc View Source JapaneseIterationMarkCharFilter(TextReader, Boolean, Boolean) Constructor Declaration public JapaneseIterationMarkCharFilter(TextReader input, bool normalizeKanji, bool normalizeKana) Parameters Type Name Description System.IO.TextReader input Char stream. System.Boolean normalizeKanji Indicates whether kanji iteration marks should be normalized. System.Boolean normalizeKana Indicates whether kana iteration marks should be normalized. Fields | Improve this Doc View Source NORMALIZE_KANA_DEFAULT Normalize kana iteration marks by default Declaration public static readonly bool NORMALIZE_KANA_DEFAULT Field Value Type Description System.Boolean | Improve this Doc View Source NORMALIZE_KANJI_DEFAULT Normalize kanji iteration marks by default Declaration public static readonly bool NORMALIZE_KANJI_DEFAULT Field Value Type Description System.Boolean Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides CharFilter.Correct(Int32) | Improve this Doc View Source Read() Reads the next character from the text reader and advances the character position by one character. Declaration public override int Read() Returns Type Description System.Int32 The next character from the text reader, or -1 if no more characters are available. Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Reads a specified maximum number of characters from the current reader and writes the data to a buffer, beginning at the specified index. Declaration public override int Read(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer When this method returns, contains the specified character array with the values between index and (index + count - 1) replaced by the characters read from the current source. System.Int32 offset The position in buffer at which to begin writing. System.Int32 length The maximum number of characters to read. If the end of the reader is reached before the specified number of characters is read into the buffer, the method returns. Returns Type Description System.Int32 The number of characters that have been read. The number will be less than or equal to count, depending on whether the data is available within the reader. This method returns 0 (zero) if it is called when no more characters are left to read. Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilterFactory.html",
    "title": "Class JapaneseIterationMarkCharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseIterationMarkCharFilterFactory Factory for JapaneseIterationMarkCharFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"false\"> <analyzer> <charFilter class=\"solr.JapaneseIterationMarkCharFilterFactory normalizeKanji=\"true\" normalizeKana=\"true\"/> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory CharFilterFactory JapaneseIterationMarkCharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseIterationMarkCharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source JapaneseIterationMarkCharFilterFactory(IDictionary<String, String>) Creates a new JapaneseIterationMarkCharFilterFactory Declaration public JapaneseIterationMarkCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilter.html",
    "title": "Class JapaneseKatakanaStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseKatakanaStemFilter A TokenFilter that normalizes common katakana spelling variations ending in a long sound character by removing this character (U+30FC). Only katakana words longer than a minimum length are stemmed (default is four). Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseKatakanaStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseKatakanaStemFilter : TokenFilter, IDisposable Remarks Note that only full-width katakana characters are supported. Please use a CJKWidthFilter to convert half-width katakana to full-width before using this filter. In order to prevent terms from being stemmed, use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . Constructors | Improve this Doc View Source JapaneseKatakanaStemFilter(TokenStream) Declaration public JapaneseKatakanaStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source JapaneseKatakanaStemFilter(TokenStream, Int32) Declaration public JapaneseKatakanaStemFilter(TokenStream input, int minimumLength) Parameters Type Name Description TokenStream input System.Int32 minimumLength Fields | Improve this Doc View Source DEFAULT_MINIMUM_LENGTH Declaration public static readonly int DEFAULT_MINIMUM_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.FilesystemResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.FilesystemResourceLoader.html",
    "title": "Class FilesystemResourceLoader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilesystemResourceLoader Simple IResourceLoader that opens resource files from the local file system, optionally resolving against a base directory. This loader wraps a delegate IResourceLoader that is used to resolve all files, the current base directory does not contain. NewInstance<T>(String) is always resolved against the delegate, as an System.Assembly is needed. You can chain several FilesystemResourceLoader s to allow lookup of files in more than one base directory. Inheritance System.Object FilesystemResourceLoader Implements IResourceLoader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FilesystemResourceLoader : IResourceLoader Constructors | Improve this Doc View Source FilesystemResourceLoader() Creates a resource loader that requires absolute filenames or relative to CWD to resolve resources. Files not found in file system and class lookups are delegated to context classloader. Declaration public FilesystemResourceLoader() | Improve this Doc View Source FilesystemResourceLoader(DirectoryInfo) Creates a resource loader that resolves resources against the given base directory (may be null to refer to CWD). Files not found in file system and class lookups are delegated to context classloader. Declaration public FilesystemResourceLoader(DirectoryInfo baseDirectory) Parameters Type Name Description System.IO.DirectoryInfo baseDirectory | Improve this Doc View Source FilesystemResourceLoader(DirectoryInfo, IResourceLoader) Creates a resource loader that resolves resources against the given base directory (may be null to refer to CWD). Files not found in file system and class lookups are delegated to the given delegate IResourceLoader . Declaration public FilesystemResourceLoader(DirectoryInfo baseDirectory, IResourceLoader delegate) Parameters Type Name Description System.IO.DirectoryInfo baseDirectory IResourceLoader delegate Methods | Improve this Doc View Source FindType(String) Declaration public Type FindType(string cname) Parameters Type Name Description System.String cname Returns Type Description System.Type | Improve this Doc View Source NewInstance<T>(String) Declaration public T NewInstance<T>(string cname) Parameters Type Name Description System.String cname Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source OpenResource(String) Declaration public Stream OpenResource(string resource) Parameters Type Name Description System.String resource Returns Type Description System.IO.Stream Implements IResourceLoader"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.FilteringTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.FilteringTokenFilter.html",
    "title": "Class FilteringTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteringTokenFilter Abstract base class for TokenFilters that may remove tokens. You have to implement Accept() and return a boolean if the current token should be preserved. IncrementToken() uses this method to decide if a token should be passed to the caller. As of Lucene 4.4, an System.ArgumentException is thrown when trying to disable position increments when filtering terms. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter StopFilter TypeTokenFilter JapanesePartOfSpeechStopFilter CodepointCountFilter KeepWordFilter LengthFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class FilteringTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FilteringTokenFilter(LuceneVersion, TokenStream) Create a new FilteringTokenFilter . Declaration public FilteringTokenFilter(LuceneVersion version, TokenStream in) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume | Improve this Doc View Source FilteringTokenFilter(LuceneVersion, Boolean, TokenStream) Create a new FilteringTokenFilter . Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4\")] public FilteringTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input) Parameters Type Name Description LuceneVersion version the Lucene match version System.Boolean enablePositionIncrements whether to increment position increments when filtering out terms TokenStream input the input to consume Fields | Improve this Doc View Source m_version Declaration protected readonly LuceneVersion m_version Field Value Type Description LuceneVersion Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept() Override this method and return if the current input token should be returned by IncrementToken() . Declaration protected abstract bool Accept() Returns Type Description System.Boolean | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() | Improve this Doc View Source SetEnablePositionIncrements(Boolean) If true , this TokenFilter will preserve positions of the incoming tokens (ie, accumulate and set position increments of the removed tokens). Generally, true is best as it does not lose information (positions of the original tokens) during indexing. When set, when a token is stopped (omitted), the position increment of the following token is incremented. Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4\")] public virtual void SetEnablePositionIncrements(bool enable) Parameters Type Name Description System.Boolean enable Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.OpenStringBuilder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.OpenStringBuilder.html",
    "title": "Class OpenStringBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenStringBuilder A StringBuilder that allows one to access the array. Inheritance System.Object OpenStringBuilder Implements ICharSequence Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class OpenStringBuilder : ICharSequence Constructors | Improve this Doc View Source OpenStringBuilder() Declaration public OpenStringBuilder() | Improve this Doc View Source OpenStringBuilder(Char[], Int32) Declaration public OpenStringBuilder(char[] arr, int len) Parameters Type Name Description System.Char [] arr System.Int32 len | Improve this Doc View Source OpenStringBuilder(Int32) Declaration public OpenStringBuilder(int size) Parameters Type Name Description System.Int32 size Fields | Improve this Doc View Source m_buf Declaration protected char[] m_buf Field Value Type Description System.Char [] | Improve this Doc View Source m_len Declaration protected int m_len Field Value Type Description System.Int32 Properties | Improve this Doc View Source Array Declaration public virtual char[] Array { get; } Property Value Type Description System.Char [] | Improve this Doc View Source Capacity Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[Int32] Declaration public virtual char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public virtual int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Append(ICharSequence) Declaration public virtual OpenStringBuilder Append(ICharSequence csq) Parameters Type Name Description ICharSequence csq Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Declaration public virtual OpenStringBuilder Append(ICharSequence csq, int start, int end) Parameters Type Name Description ICharSequence csq System.Int32 start System.Int32 end Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(Char) Declaration public virtual OpenStringBuilder Append(char c) Parameters Type Name Description System.Char c Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(String) Declaration public virtual OpenStringBuilder Append(string csq) Parameters Type Name Description System.String csq Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(String, Int32, Int32) Declaration public virtual OpenStringBuilder Append(string csq, int start, int end) Parameters Type Name Description System.String csq System.Int32 start System.Int32 end Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(StringBuilder) Declaration public virtual OpenStringBuilder Append(StringBuilder csq) Parameters Type Name Description System.Text.StringBuilder csq Returns Type Description OpenStringBuilder | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Declaration public virtual OpenStringBuilder Append(StringBuilder csq, int start, int end) Parameters Type Name Description System.Text.StringBuilder csq System.Int32 start System.Int32 end Returns Type Description OpenStringBuilder | Improve this Doc View Source EnsureCapacity(Int32) Declaration public virtual void EnsureCapacity(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source Reset() Declaration public void Reset() | Improve this Doc View Source Resize(Int32) Declaration protected virtual void Resize(int len) Parameters Type Name Description System.Int32 len | Improve this Doc View Source Set(Char[], Int32) Declaration public virtual void Set(char[] arr, int end) Parameters Type Name Description System.Char [] arr System.Int32 end | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public virtual ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToCharArray() Declaration public virtual char[] ToCharArray() Returns Type Description System.Char [] | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UnsafeWrite(Char) Declaration public virtual void UnsafeWrite(char b) Parameters Type Name Description System.Char b | Improve this Doc View Source UnsafeWrite(Char[], Int32, Int32) Declaration public virtual void UnsafeWrite(char[] b, int off, int len) Parameters Type Name Description System.Char [] b System.Int32 off System.Int32 len | Improve this Doc View Source UnsafeWrite(Int32) Declaration public virtual void UnsafeWrite(int b) Parameters Type Name Description System.Int32 b | Improve this Doc View Source UnsafeWrite(StringBuilder, Int32, Int32) Declaration public virtual void UnsafeWrite(StringBuilder b, int off, int len) Parameters Type Name Description System.Text.StringBuilder b System.Int32 off System.Int32 len | Improve this Doc View Source Write(OpenStringBuilder) Declaration public void Write(OpenStringBuilder arr) Parameters Type Name Description OpenStringBuilder arr | Improve this Doc View Source Write(Char) Declaration public virtual void Write(char b) Parameters Type Name Description System.Char b | Improve this Doc View Source Write(Char[]) Declaration public void Write(char[] b) Parameters Type Name Description System.Char [] b | Improve this Doc View Source Write(Char[], Int32, Int32) Declaration public virtual void Write(char[] b, int off, int len) Parameters Type Name Description System.Char [] b System.Int32 off System.Int32 len | Improve this Doc View Source Write(Int32) Declaration public virtual void Write(int b) Parameters Type Name Description System.Int32 b | Improve this Doc View Source Write(String) Declaration public virtual void Write(string s) Parameters Type Name Description System.String s | Improve this Doc View Source Write(StringBuilder) Declaration public void Write(StringBuilder arr) Parameters Type Name Description System.Text.StringBuilder arr Implements ICharSequence"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.html",
    "title": "Class SearcherTaxonomyManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherTaxonomyManager Manages near-real-time reopen of both an IndexSearcher and a TaxonomyReader . NOTE : If you call ReplaceTaxonomy(Directory) then you must open a new SearcherTaxonomyManager afterwards. Inheritance System.Object ReferenceManager < SearcherTaxonomyManager.SearcherAndTaxonomy > SearcherTaxonomyManager Implements System.IDisposable Inherited Members ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Current ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Acquire() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Dispose() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Dispose(Boolean) ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.MaybeRefresh() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.MaybeRefreshBlocking() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.AfterMaybeRefresh() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Release(SearcherTaxonomyManager.SearcherAndTaxonomy) ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.AddListener(ReferenceManager.IRefreshListener) ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.RemoveListener(ReferenceManager.IRefreshListener) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SearcherTaxonomyManager : ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>, IDisposable Constructors | Improve this Doc View Source SearcherTaxonomyManager(IndexWriter, Boolean, SearcherFactory, DirectoryTaxonomyWriter) Creates near-real-time searcher and taxonomy reader from the corresponding writers. Declaration public SearcherTaxonomyManager(IndexWriter writer, bool applyAllDeletes, SearcherFactory searcherFactory, DirectoryTaxonomyWriter taxoWriter) Parameters Type Name Description IndexWriter writer System.Boolean applyAllDeletes SearcherFactory searcherFactory DirectoryTaxonomyWriter taxoWriter | Improve this Doc View Source SearcherTaxonomyManager(Directory, Directory, SearcherFactory) Creates search and taxonomy readers over the corresponding directories. NOTE: you should only use this constructor if you commit and call MaybeRefresh() (on the ReaderManager ) in the same thread. Otherwise it could lead to an unsync'd IndexSearcher and TaxonomyReader pair. Declaration public SearcherTaxonomyManager(Directory indexDir, Directory taxoDir, SearcherFactory searcherFactory) Parameters Type Name Description Directory indexDir Directory taxoDir SearcherFactory searcherFactory Methods | Improve this Doc View Source DecRef(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override void DecRef(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.DecRef(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) | Improve this Doc View Source GetRefCount(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override int GetRefCount(SearcherTaxonomyManager.SearcherAndTaxonomy reference) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy reference Returns Type Description System.Int32 Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.GetRefCount(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) | Improve this Doc View Source RefreshIfNeeded(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override SearcherTaxonomyManager.SearcherAndTaxonomy RefreshIfNeeded(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref Returns Type Description SearcherTaxonomyManager.SearcherAndTaxonomy Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.RefreshIfNeeded(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) | Improve this Doc View Source TryIncRef(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override bool TryIncRef(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref Returns Type Description System.Boolean Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.TryIncRef(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) Implements System.IDisposable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField.html",
    "title": "Class SingleAssociationFacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleAssociationFacetField Add an instance of this to your Document to add a facet label associated with a System.Single . Use TaxonomyFacetSumSingleAssociations to aggregate System.Single values per facet label at search time. NOTE: This was FloatAssociationFacetField in Lucene @lucene.experimental Inheritance System.Object Field AssociationFacetField SingleAssociationFacetField Implements IIndexableField Inherited Members AssociationFacetField.TYPE AssociationFacetField.Dim AssociationFacetField.Path AssociationFacetField.Assoc Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SingleAssociationFacetField : AssociationFacetField, IIndexableField Constructors | Improve this Doc View Source SingleAssociationFacetField(Single, String, String[]) Creates this from dim and path and a System.Single association Declaration public SingleAssociationFacetField(float assoc, string dim, params string[] path) Parameters Type Name Description System.Single assoc System.String dim System.String [] path Methods | Improve this Doc View Source BytesRefToSingle(BytesRef) Decodes a previously encoded System.Single . NOTE: This was bytesRefToFloat() in Lucene Declaration public static float BytesRefToSingle(BytesRef b) Parameters Type Name Description BytesRef b Returns Type Description System.Single | Improve this Doc View Source SingleToBytesRef(Single) Encodes a System.Single as a 4-byte BytesRef . NOTE: This was floatToBytesRef() in Lucene Declaration public static BytesRef SingleToBytesRef(float v) Parameters Type Name Description System.Single v Returns Type Description BytesRef | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AssociationFacetField.ToString() Implements IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleTaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SingleTaxonomyFacets.html",
    "title": "Class SingleTaxonomyFacets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleTaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords float[] . NOTE: This was FloatTaxonomyFacets in Lucene Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumSingleAssociations TaxonomyFacetSumValueSource Inherited Members TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class SingleTaxonomyFacets : TaxonomyFacets Constructors | Improve this Doc View Source SingleTaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected SingleTaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_values Per-ordinal value. Declaration protected readonly float[] m_values Field Value Type Description System.Single [] Methods | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[]) | Improve this Doc View Source Rollup() Rolls up any single-valued hierarchical dimensions. Declaration protected virtual void Rollup()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts.html",
    "title": "Class TaxonomyFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetCounts Reads from any OrdinalsReader ; use FastTaxonomyFacetCounts if you are using the default encoding from BinaryDocValues . @lucene.experimental Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets TaxonomyFacetCounts Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetCounts : Int32TaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetCounts(OrdinalsReader, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetCounts , which also counts all facet labels. Use this for a non-default OrdinalsReader ; otherwise use FastTaxonomyFacetCounts . Declaration public TaxonomyFacetCounts(OrdinalsReader ordinalsReader, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description OrdinalsReader ordinalsReader TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacets.html",
    "title": "Class TaxonomyFacets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacets Base class for all taxonomy-based facets impls. Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets SingleTaxonomyFacets Inherited Members Facets.GetTopChildren(Int32, String, String[]) Facets.GetSpecificValue(String, String[]) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class TaxonomyFacets : Facets Constructors | Improve this Doc View Source TaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected TaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_children Maps parent ordinal to its child, or -1 if the parent is childless. Declaration protected readonly int[] m_children Field Value Type Description System.Int32 [] | Improve this Doc View Source m_config FacetsConfig provided to the constructor. Declaration protected readonly FacetsConfig m_config Field Value Type Description FacetsConfig | Improve this Doc View Source m_indexFieldName Index field name provided to the constructor. Declaration protected readonly string m_indexFieldName Field Value Type Description System.String | Improve this Doc View Source m_siblings Maps an ordinal to its sibling, or -1 if there is no sibling. Declaration protected readonly int[] m_siblings Field Value Type Description System.Int32 [] | Improve this Doc View Source m_taxoReader TaxonomyReader provided to the constructor. Declaration protected readonly TaxonomyReader m_taxoReader Field Value Type Description TaxonomyReader Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source VerifyDim(String) Throws System.ArgumentException if the dimension is not recognized. Otherwise, returns the FacetsConfig.DimConfig for this dimension. Declaration protected virtual FacetsConfig.DimConfig VerifyDim(string dim) Parameters Type Name Description System.String dim Returns Type Description FacetsConfig.DimConfig"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiFields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiFields.html",
    "title": "Class MultiFields | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFields Exposes flex API, merged from flex API of sub-segments. This is useful when you're interacting with an IndexReader implementation that consists of sequential sub-readers (eg DirectoryReader or MultiReader ). NOTE : for composite readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields MultiFields Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable Inherited Members Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiFields : Fields, IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source MultiFields(Fields[], ReaderSlice[]) Expert: construct a new MultiFields instance directly. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public MultiFields(Fields[] subs, ReaderSlice[] subSlices) Parameters Type Name Description Fields [] subs ReaderSlice [] subSlices Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetFields(IndexReader) Returns a single Fields instance for this reader, merging fields/terms/docs/positions on the fly. This method will return null if the reader has no postings. NOTE : this is a slow way to access postings. It's better to get the sub-readers and iterate through them yourself. Declaration public static Fields GetFields(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Fields | Improve this Doc View Source GetIndexedFields(IndexReader) Call this to get the (merged) FieldInfos representing the set of indexed fields only for a composite reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) ) will be unavailable. Declaration public static ICollection<string> GetIndexedFields(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source GetLiveDocs(IndexReader) Returns a single IBits instance for this reader, merging live Documents on the fly. This method will return null if the reader has no deletions. NOTE : this is a very slow way to access live docs. For example, each IBits access will require a binary search. It's better to get the sub-readers and iterate through them yourself. Declaration public static IBits GetLiveDocs(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description IBits | Improve this Doc View Source GetMergedFieldInfos(IndexReader) Call this to get the (merged) FieldInfos for a composite reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) ) will be unavailable. Declaration public static FieldInfos GetMergedFieldInfos(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description FieldInfos | Improve this Doc View Source GetTermDocsEnum(IndexReader, IBits, String, BytesRef) Returns DocsEnum for the specified field & term. This will return null if the field or term does not exist. Declaration public static DocsEnum GetTermDocsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term Returns Type Description DocsEnum | Improve this Doc View Source GetTermDocsEnum(IndexReader, IBits, String, BytesRef, DocsFlags) Returns DocsEnum for the specified field & term, with control over whether freqs are required. Some codecs may be able to optimize their implementation when freqs are not required. This will return null if the field or term does not exist. See Docs(IBits, DocsEnum, DocsFlags) . Declaration public static DocsEnum GetTermDocsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term, DocsFlags flags) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source GetTermPositionsEnum(IndexReader, IBits, String, BytesRef) Returns DocsAndPositionsEnum for the specified field & term. This will return null if the field or term does not exist or positions were not indexed. Declaration public static DocsAndPositionsEnum GetTermPositionsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term Returns Type Description DocsAndPositionsEnum See Also GetTermPositionsEnum(IndexReader, IBits, String, BytesRef, DocsAndPositionsFlags) | Improve this Doc View Source GetTermPositionsEnum(IndexReader, IBits, String, BytesRef, DocsAndPositionsFlags) Returns DocsAndPositionsEnum for the specified field & term, with control over whether offsets and payloads are required. Some codecs may be able to optimize their implementation when offsets and/or payloads are not required. This will return null if the field or term does not exist or positions were not indexed. See DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) . Declaration public static DocsAndPositionsEnum GetTermPositionsEnum(IndexReader r, IBits liveDocs, string field, BytesRef term, DocsAndPositionsFlags flags) Parameters Type Name Description IndexReader r IBits liveDocs System.String field BytesRef term DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source GetTerms(IndexReader, String) this method may return null if the field does not exist. Declaration public static Terms GetTerms(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description Terms | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.html",
    "title": "Class SegmentInfos | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfos A collection of segmentInfo objects with methods for operating on those segments in relation to the file system. The active segments in the index are stored in the segment info file, segments_N . There may be one or more segments_N files in the index; however, the one with the largest generation is the active one (when older segments_N files are present it's because they temporarily cannot be deleted, or, a writer is in the process of committing, or a custom IndexDeletionPolicy is in use). This file lists each segment by name and has details about the codec and generation of deletes. There is also a file segments.gen . this file contains the current generation (the _N in segments_N ) of the index. This is used only as a fallback in case the current generation cannot be accurately determined by directory listing alone (as is the case for some NFS clients with time-based directory cache expiration). This file simply contains an WriteInt32(Int32) version header ( FORMAT_SEGMENTS_GEN_CURRENT ), followed by the generation recorded as WriteInt64(Int64) , written twice. Files: segments.gen : GenHeader, Generation, Generation, Footer segments_N : Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, UpdatesFiles> SegCount , CommitUserData, Footer Data types: Header --> WriteHeader(DataOutput, String, Int32) GenHeader, NameCounter, SegCount, DeletionCount --> WriteInt32(Int32) Generation, Version, DelGen, Checksum, FieldInfosGen --> WriteInt64(Int64) SegName, SegCodec --> WriteString(String) CommitUserData --> WriteStringStringMap(IDictionary<String, String>) UpdatesFiles --> WriteStringSet(ISet<String>) Footer --> WriteFooter(IndexOutput) Field Descriptions: Version counts how often the index has been changed by adding or deleting documents. NameCounter is used to generate names for new segment files. SegName is the name of the segment, and is used as the file name prefix for all of the files that compose the segment's index. DelGen is the generation count of the deletes file. If this is -1, there are no deletes. Anything above zero means there are deletes stored by LiveDocsFormat . DeletionCount records the number of deleted documents in this segment. SegCodec is the Name of the Codec that encoded this segment. CommitUserData stores an optional user-supplied opaque that was passed to SetCommitData(IDictionary<String, String>) . FieldInfosGen is the generation count of the fieldInfos file. If this is -1, there are no updates to the fieldInfos in that segment. Anything above zero means there are updates to fieldInfos stored by FieldInfosFormat . UpdatesFiles stores the list of files that were updated in that segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfos Implements System.Collections.Generic.IEnumerable < SegmentCommitInfo > System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentInfos : IEnumerable<SegmentCommitInfo>, IEnumerable Constructors | Improve this Doc View Source SegmentInfos() Sole constructor. Typically you call this and then use Read(Directory) or Read(Directory, String) to populate each SegmentCommitInfo . Alternatively, you can add/remove your own SegmentCommitInfo s. Declaration public SegmentInfos() Fields | Improve this Doc View Source FORMAT_SEGMENTS_GEN_CURRENT Current format of segments.gen Declaration public static readonly int FORMAT_SEGMENTS_GEN_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_40 The file format version for the segments_N codec header, up to 4.5. Declaration public static readonly int VERSION_40 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_46 The file format version for the segments_N codec header, since 4.6+. Declaration public static readonly int VERSION_46 Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_48 The file format version for the segments_N codec header, since 4.8+ Declaration public static readonly int VERSION_48 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Returns number of SegmentCommitInfo s. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Counter Used to name new segments. Declaration public int Counter { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source DefaultGenLookaheadCount Gets or Sets the Lucene.Net.Index.SegmentInfos.defaultGenLookaheadCount . Advanced: set how many times to try incrementing the gen when loading the segments file. this only runs if the primary (listing directory) and secondary (opening segments.gen file) methods fail to find the segments file. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static int DefaultGenLookaheadCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Generation Returns current generation. Declaration public long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source InfoStream If non-null, information about retries when loading the segments file will be printed to this. Declaration public static TextWriter InfoStream { get; set; } Property Value Type Description System.IO.TextWriter | Improve this Doc View Source LastGeneration Returns last succesfully read or written generation. Declaration public long LastGeneration { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Segments Declaration public IList<SegmentCommitInfo> Segments { get; } Property Value Type Description System.Collections.Generic.IList < SegmentCommitInfo > | Improve this Doc View Source TotalDocCount Returns sum of all segment's docCounts. Note that this does not include deletions Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UserData Gets Lucene.Net.Index.SegmentInfos.userData saved with this commit. Declaration public IDictionary<string, string> UserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > See Also Commit() | Improve this Doc View Source Version Version number when this SegmentInfos was generated. Declaration public long Version { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(SegmentCommitInfo) Appends the provided SegmentCommitInfo . Declaration public void Add(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si | Improve this Doc View Source AddAll(IEnumerable<SegmentCommitInfo>) Appends the provided SegmentCommitInfo s. Declaration public void AddAll(IEnumerable<SegmentCommitInfo> sis) Parameters Type Name Description System.Collections.Generic.IEnumerable < SegmentCommitInfo > sis | Improve this Doc View Source AsList() Returns all contained segments as an unmodifiable IList{SegmentCommitInfo} view. Declaration public IList<SegmentCommitInfo> AsList() Returns Type Description System.Collections.Generic.IList < SegmentCommitInfo > | Improve this Doc View Source Changed() Call this before committing if changes have been made to the segments. Declaration public void Changed() | Improve this Doc View Source Clear() Clear all SegmentCommitInfo s. Declaration public void Clear() | Improve this Doc View Source Clone() Returns a copy of this instance, also copying each SegmentInfo . Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source GenerationFromSegmentsFileName(String) Parse the generation off the segments file name and return it. Declaration public static long GenerationFromSegmentsFileName(string fileName) Parameters Type Name Description System.String fileName Returns Type Description System.Int64 | Improve this Doc View Source GetEnumerator() Returns an unmodifiable IEnumerator{SegmentCommitInfo} of contained segments in order. Declaration public IEnumerator<SegmentCommitInfo> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < SegmentCommitInfo > | Improve this Doc View Source GetFiles(Directory, Boolean) Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files associated with any \"external\" segments are skipped). The returned collection is recomputed on each invocation. Declaration public ICollection<string> GetFiles(Directory dir, bool includeSegmentsFile) Parameters Type Name Description Directory dir System.Boolean includeSegmentsFile Returns Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source GetLastCommitGeneration(Directory) Get the generation of the most recent commit to the index in this directory (N in the segments_N file). Declaration public static long GetLastCommitGeneration(Directory directory) Parameters Type Name Description Directory directory directory to search for the latest segments_N file Returns Type Description System.Int64 | Improve this Doc View Source GetLastCommitGeneration(String[]) Get the generation of the most recent commit to the list of index files (N in the segments_N file). Declaration public static long GetLastCommitGeneration(string[] files) Parameters Type Name Description System.String [] files array of file names to check Returns Type Description System.Int64 | Improve this Doc View Source GetLastCommitSegmentsFileName(Directory) Get the filename of the segments_N file for the most recent commit to the index in this Directory. Declaration public static string GetLastCommitSegmentsFileName(Directory directory) Parameters Type Name Description Directory directory directory to search for the latest segments_N file Returns Type Description System.String | Improve this Doc View Source GetLastCommitSegmentsFileName(String[]) Get the filename of the segments_N file for the most recent commit in the list of index files. Declaration public static string GetLastCommitSegmentsFileName(string[] files) Parameters Type Name Description System.String [] files array of file names to check Returns Type Description System.String | Improve this Doc View Source GetNextSegmentFileName() Get the next segments_N filename that will be written. Declaration public string GetNextSegmentFileName() Returns Type Description System.String | Improve this Doc View Source GetSegmentsFileName() Get the segments_N filename in use by this segment infos. Declaration public string GetSegmentsFileName() Returns Type Description System.String | Improve this Doc View Source Info(Int32) Returns SegmentCommitInfo at the provided index. Declaration public SegmentCommitInfo Info(int i) Parameters Type Name Description System.Int32 i Returns Type Description SegmentCommitInfo | Improve this Doc View Source Read(Directory) Find the latest commit ( segments_N file ) and load all SegmentCommitInfo s. Declaration public void Read(Directory directory) Parameters Type Name Description Directory directory | Improve this Doc View Source Read(Directory, String) Read a particular segmentFileName . Note that this may throw an System.IO.IOException if a commit is in process. Declaration public void Read(Directory directory, string segmentFileName) Parameters Type Name Description Directory directory directory containing the segments file System.String segmentFileName segment file to load Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Remove(SegmentCommitInfo) Remove the provided SegmentCommitInfo . WARNING : O(N) cost Declaration public void Remove(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si | Improve this Doc View Source ToString(Directory) Returns readable description of this segment. Declaration public string ToString(Directory directory) Parameters Type Name Description Directory directory Returns Type Description System.String | Improve this Doc View Source Write3xInfo(Directory, SegmentInfo, IOContext) Declaration [Obsolete] public static string Write3xInfo(Directory dir, SegmentInfo si, IOContext context) Parameters Type Name Description Directory dir SegmentInfo si IOContext context Returns Type Description System.String | Improve this Doc View Source WriteSegmentsGen(Directory, Int64) A utility for writing the SEGMENTS_GEN file to a Directory . NOTE: this is an internal utility which is kept public so that it's accessible by code from other packages. You should avoid calling this method unless you're absolutely sure what you're doing! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static void WriteSegmentsGen(Directory dir, long generation) Parameters Type Name Description Directory dir System.Int64 generation Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Misc.HighFreqTerms.DocFreqComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Misc.HighFreqTerms.DocFreqComparer.html",
    "title": "Class HighFreqTerms.DocFreqComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighFreqTerms.DocFreqComparer Compares terms by DocFreq Inheritance System.Object HighFreqTerms.DocFreqComparer Implements System.Collections.Generic.IComparer < TermStats > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class DocFreqComparer : IComparer<TermStats> Methods | Improve this Doc View Source Compare(TermStats, TermStats) Declaration public int Compare(TermStats a, TermStats b) Parameters Type Name Description TermStats a TermStats b Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Misc.HighFreqTerms.TotalTermFreqComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Misc.HighFreqTerms.TotalTermFreqComparer.html",
    "title": "Class HighFreqTerms.TotalTermFreqComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighFreqTerms.TotalTermFreqComparer Compares terms by TotalTermFreq Inheritance System.Object HighFreqTerms.TotalTermFreqComparer Implements System.Collections.Generic.IComparer < TermStats > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class TotalTermFreqComparer : IComparer<TermStats> Methods | Improve this Doc View Source Compare(TermStats, TermStats) Declaration public int Compare(TermStats a, TermStats b) Parameters Type Name Description TermStats a TermStats b Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.CachingCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CachingCollector.html",
    "title": "Class CachingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachingCollector Caches all docs, and optionally also scores, coming from a search, and is then able to replay them to another collector. You specify the max RAM this class may use. Once the collection is done, call IsCached . If this returns true , you can use Replay(ICollector) against a new collector. If it returns false , this means too much RAM was required and you must instead re-run the original search. NOTE : this class consumes 4 (or 8 bytes, if scoring is cached) per collected document. If the result set is large this can easily be a very substantial amount of RAM! NOTE : this class caches at least 128 documents before checking RAM limits. See the Lucene modules/grouping module for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CachingCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class CachingCollector : ICollector Fields | Improve this Doc View Source m_base Declaration protected int m_base Field Value Type Description System.Int32 | Improve this Doc View Source m_cachedDocs Declaration protected readonly IList<int[]> m_cachedDocs Field Value Type Description System.Collections.Generic.IList < System.Int32 []> | Improve this Doc View Source m_curDocs Declaration protected int[] m_curDocs Field Value Type Description System.Int32 [] | Improve this Doc View Source m_lastDocBase Declaration protected int m_lastDocBase Field Value Type Description System.Int32 | Improve this Doc View Source m_maxDocsToCache Declaration protected readonly int m_maxDocsToCache Field Value Type Description System.Int32 | Improve this Doc View Source m_other Declaration protected readonly ICollector m_other Field Value Type Description ICollector | Improve this Doc View Source m_upto Declaration protected int m_upto Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsCached Declaration public virtual bool IsCached { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source Create(ICollector, Boolean, Double) Create a new CachingCollector that wraps the given collector and caches documents and scores up to the specified RAM threshold. Declaration public static CachingCollector Create(ICollector other, bool cacheScores, double maxRAMMB) Parameters Type Name Description ICollector other The ICollector to wrap and delegate calls to. System.Boolean cacheScores Whether to cache scores in addition to document IDs. Note that this increases the RAM consumed per doc. System.Double maxRAMMB The maximum RAM in MB to consume for caching the documents and scores. If the collector exceeds the threshold, no documents and scores are cached. Returns Type Description CachingCollector | Improve this Doc View Source Create(ICollector, Boolean, Int32) Create a new CachingCollector that wraps the given collector and caches documents and scores up to the specified max docs threshold. Declaration public static CachingCollector Create(ICollector other, bool cacheScores, int maxDocsToCache) Parameters Type Name Description ICollector other The ICollector to wrap and delegate calls to. System.Boolean cacheScores Whether to cache scores in addition to document IDs. Note that this increases the RAM consumed per doc. System.Int32 maxDocsToCache The maximum number of documents for caching the documents and possible the scores. If the collector exceeds the threshold, no documents and scores are cached. Returns Type Description CachingCollector | Improve this Doc View Source Create(Boolean, Boolean, Double) Creates a CachingCollector which does not wrap another collector. The cached documents and scores can later be replayed ( Replay(ICollector) ). Declaration public static CachingCollector Create(bool acceptDocsOutOfOrder, bool cacheScores, double maxRAMMB) Parameters Type Name Description System.Boolean acceptDocsOutOfOrder whether documents are allowed to be collected out-of-order System.Boolean cacheScores System.Double maxRAMMB Returns Type Description CachingCollector | Improve this Doc View Source Replay(ICollector) Replays the cached doc IDs (and scores) to the given ICollector . If this instance does not cache scores, then Scorer is not set on other.SetScorer(Scorer) as well as scores are not replayed. Declaration public abstract void Replay(ICollector other) Parameters Type Name Description ICollector other Exceptions Type Condition System.InvalidOperationException If this collector is not cached (i.e., if the RAM limits were too low for the number of documents + scores to cache). System.ArgumentException If the given Collect's does not support out-of-order collection, while the collector passed to the ctor does. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to ), should save the passed-in Scorer and call GetScore() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.CachingWrapperFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CachingWrapperFilter.html",
    "title": "Class CachingWrapperFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachingWrapperFilter Wraps another Filter 's result and caches it. The purpose is to allow filters to simply filter, and then wrap with this class to add caching. Inheritance System.Object Filter CachingWrapperFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class CachingWrapperFilter : Filter Constructors | Improve this Doc View Source CachingWrapperFilter(Filter) Wraps another filter's result and caches it. Declaration public CachingWrapperFilter(Filter filter) Parameters Type Name Description Filter filter Filter to cache results of Fields | Improve this Doc View Source EMPTY_DOCIDSET An empty DocIdSet instance Declaration protected static readonly DocIdSet EMPTY_DOCIDSET Field Value Type Description DocIdSet Properties | Improve this Doc View Source Filter Gets the contained filter. Declaration public virtual Filter Filter { get; } Property Value Type Description Filter the contained filter. Methods | Improve this Doc View Source CacheImpl(DocIdSetIterator, AtomicReader) Default cache implementation: uses WAH8DocIdSet . Declaration protected virtual DocIdSet CacheImpl(DocIdSetIterator iterator, AtomicReader reader) Parameters Type Name Description DocIdSetIterator iterator AtomicReader reader Returns Type Description DocIdSet | Improve this Doc View Source DocIdSetToCache(DocIdSet, AtomicReader) Provide the DocIdSet to be cached, using the DocIdSet provided by the wrapped Filter. This implementation returns the given DocIdSet , if IsCacheable returns true , else it calls CacheImpl(DocIdSetIterator, AtomicReader) Note: this method returns EMPTY_DOCIDSET if the given docIdSet is null or if GetIterator() return null . The empty instance is use as a placeholder in the cache instead of the null value. Declaration protected virtual DocIdSet DocIdSetToCache(DocIdSet docIdSet, AtomicReader reader) Parameters Type Name Description DocIdSet docIdSet AtomicReader reader Returns Type Description DocIdSet | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetSizeInBytes() Returns total byte size used by cached filters. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.CollectionTerminatedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CollectionTerminatedException.html",
    "title": "Class CollectionTerminatedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionTerminatedException Throw this exception in Collect(Int32) to prematurely terminate collection of the current leaf. Note: IndexSearcher swallows this exception and never re-throws it. As a consequence, you should not catch it when calling any overload of Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) as it is unnecessary and might hide misuse of this exception. Inheritance System.Object System.Exception CollectionTerminatedException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CollectionTerminatedException : Exception Constructors | Improve this Doc View Source CollectionTerminatedException() Sole constructor. Declaration public CollectionTerminatedException() Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.ISingleParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.ISingleParser.html",
    "title": "Interface FieldCache.ISingleParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.ISingleParser Interface to parse System.Single s from document fields. NOTE: This was FloatParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ISingleParser : FieldCache.IParser Methods | Improve this Doc View Source ParseSingle(BytesRef) Return an System.Single representation of this field's value. NOTE: This was parseFloat() in Lucene Declaration float ParseSingle(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Single Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheDocIdSet.html",
    "title": "Class FieldCacheDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheDocIdSet Base class for DocIdSet to be used with IFieldCache . The implementation of its iterator is very stupid and slow if the implementation of the MatchDoc(Int32) method is not optimized, as iterators simply increment the document id until MatchDoc(Int32) returns true . Because of this MatchDoc(Int32) must be as fast as possible and in no case do any I/O. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DocIdSet FieldCacheDocIdSet Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldCacheDocIdSet : DocIdSet Constructors | Improve this Doc View Source FieldCacheDocIdSet(Int32, IBits) Declaration public FieldCacheDocIdSet(int maxDoc, IBits acceptDocs) Parameters Type Name Description System.Int32 maxDoc IBits acceptDocs Fields | Improve this Doc View Source m_acceptDocs Declaration protected readonly IBits m_acceptDocs Field Value Type Description IBits | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 Properties | Improve this Doc View Source Bits Declaration public override sealed IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source IsCacheable This DocIdSet is always cacheable (does not go back to the reader for iteration) Declaration public override sealed bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source GetIterator() Declaration public override sealed DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source MatchDoc(Int32) This method checks, if a doc is a hit Declaration protected abstract bool MatchDoc(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.DisjointSpatialFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.DisjointSpatialFilter.html",
    "title": "Class DisjointSpatialFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisjointSpatialFilter A Spatial Filter implementing IsDisjointTo in terms of a SpatialStrategy 's support for Intersects . A document is considered disjoint if it has spatial data that does not intersect with the query shape. Another way of looking at this is that it's a way to invert a query shape. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter DisjointSpatialFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial Assembly : Lucene.Net.Spatial.dll Syntax public class DisjointSpatialFilter : Filter Constructors | Improve this Doc View Source DisjointSpatialFilter(SpatialStrategy, SpatialArgs, String) Declaration public DisjointSpatialFilter(SpatialStrategy strategy, SpatialArgs args, string field) Parameters Type Name Description SpatialStrategy strategy Needed to compute intersects SpatialArgs args Used in spatial intersection System.String field This field is used to determine which docs have spatial data via GetDocsWithField(AtomicReader, String) . Passing null will assume all docs have spatial data. Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.html",
    "title": "Class AbstractPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractPrefixTreeFilter Base class for Lucene Filters on SpatialPrefixTree fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter ContainsPrefixTreeFilter Inherited Members Filter.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class AbstractPrefixTreeFilter : Filter Constructors | Improve this Doc View Source AbstractPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32) Declaration public AbstractPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel Fields | Improve this Doc View Source m_detailLevel Declaration protected readonly int m_detailLevel Field Value Type Description System.Int32 | Improve this Doc View Source m_fieldName Declaration protected readonly string m_fieldName Field Value Type Description System.String | Improve this Doc View Source m_grid Declaration protected readonly SpatialPrefixTree m_grid Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_queryShape Declaration protected readonly IShape m_queryShape Field Value Type Description Spatial4n.Core.Shapes.IShape Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VisitorTemplate.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VisitorTemplate.html",
    "title": "Class AbstractVisitingPrefixTreeFilter.VisitorTemplate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter.VisitorTemplate An abstract class designed to make it easy to implement predicates or other operations on a SpatialPrefixTree indexed field. An instance of this class is not designed to be re-used across AtomicReaderContext instances so simply create a new one for each call to, say a GetDocIdSet(AtomicReaderContext, IBits) . The GetDocIdSet() method here starts the work. It first checks that there are indexed terms; if not it quickly returns null. Then it calls Start() so a subclass can set up a return value, like an FixedBitSet . Then it starts the traversal process, calling FindSubCellsToVisit(Cell) which by default finds the top cells that intersect queryShape . If there isn't an indexed cell for a corresponding cell returned for this method then it's short-circuited until it finds one, at which point Visit(Cell) is called. At some depths, of the tree, the algorithm switches to a scanning mode that calls VisitScanned(Cell) for each leaf cell found. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractPrefixTreeFilter.BaseTermsEnumTraverser AbstractVisitingPrefixTreeFilter.VisitorTemplate Inherited Members AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_outerInstance AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_context AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_acceptDocs AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_maxDoc AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_termsEnum AbstractPrefixTreeFilter.BaseTermsEnumTraverser.m_docsEnum AbstractPrefixTreeFilter.BaseTermsEnumTraverser.CollectDocs(FixedBitSet) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class VisitorTemplate : AbstractPrefixTreeFilter.BaseTermsEnumTraverser Constructors | Improve this Doc View Source VisitorTemplate(AbstractVisitingPrefixTreeFilter, AtomicReaderContext, IBits, Boolean) Declaration public VisitorTemplate(AbstractVisitingPrefixTreeFilter outerInstance, AtomicReaderContext context, IBits acceptDocs, bool hasIndexedLeaves) Parameters Type Name Description AbstractVisitingPrefixTreeFilter outerInstance AtomicReaderContext context IBits acceptDocs System.Boolean hasIndexedLeaves Fields | Improve this Doc View Source m_hasIndexedLeaves Declaration protected readonly bool m_hasIndexedLeaves Field Value Type Description System.Boolean Methods | Improve this Doc View Source FindSubCellsToVisit(Cell) Called when doing a divide & conquer to find the next intersecting cells of the query shape that are beneath cell . cell is guaranteed to have an intersection and thus this must return some number of nodes. Declaration protected virtual IEnumerator<Cell> FindSubCellsToVisit(Cell cell) Parameters Type Name Description Cell cell Returns Type Description System.Collections.Generic.IEnumerator < Cell > | Improve this Doc View Source Finish() Called last to return the result. Declaration protected abstract DocIdSet Finish() Returns Type Description DocIdSet Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetDocIdSet() Declaration public virtual DocIdSet GetDocIdSet() Returns Type Description DocIdSet | Improve this Doc View Source PostSiblings(AbstractVisitingPrefixTreeFilter.VNode) Declaration protected virtual void PostSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode) Parameters Type Name Description AbstractVisitingPrefixTreeFilter.VNode vNode | Improve this Doc View Source PreSiblings(AbstractVisitingPrefixTreeFilter.VNode) Declaration protected virtual void PreSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode) Parameters Type Name Description AbstractVisitingPrefixTreeFilter.VNode vNode | Improve this Doc View Source Scan(Int32) Scans ( termsEnum.Next() ) terms until a term is found that does not start with curVNode's cell. If it finds a leaf cell or a cell at level scanDetailLevel then it calls VisitScanned(Cell) . Declaration protected virtual void Scan(int scanDetailLevel) Parameters Type Name Description System.Int32 scanDetailLevel Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Start() Called first to setup things. Declaration protected abstract void Start() Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Visit(Cell) Visit an indexed cell returned from FindSubCellsToVisit(Cell) . Declaration protected abstract bool Visit(Cell cell) Parameters Type Name Description Cell cell An intersecting cell. Returns Type Description System.Boolean true to descend to more levels. It is an error to return true if cell.Level == detailLevel Exceptions Type Condition System.IO.IOException | Improve this Doc View Source VisitLeaf(Cell) Called after visit() returns true and an indexed leaf cell is found. Declaration protected abstract void VisitLeaf(Cell cell) Parameters Type Name Description Cell cell Remarks Called after Visit() returns true and an indexed leaf cell is found. An indexed leaf cell means associated documents generally won't be found at further detail levels. Exceptions Type Condition System.IO.IOException | Improve this Doc View Source VisitScanned(Cell) The cell is either indexed as a leaf or is the last level of detail. It might not even intersect the query shape, so be sure to check for that. Declaration protected abstract void VisitScanned(Cell cell) Parameters Type Name Description Cell cell Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.html",
    "title": "Class AbstractVisitingPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter Traverses a SpatialPrefixTree indexed field, using the template & visitor design patterns for subclasses to guide the traversal and collect matching documents. Subclasses implement GetDocIdSet(AtomicReaderContext, IBits) by instantiating a custom AbstractVisitingPrefixTreeFilter.VisitorTemplate subclass (i.e. an anonymous inner class) and implement the required methods. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter IntersectsPrefixTreeFilter WithinPrefixTreeFilter Inherited Members AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class AbstractVisitingPrefixTreeFilter : AbstractPrefixTreeFilter Constructors | Improve this Doc View Source AbstractVisitingPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32) Declaration public AbstractVisitingPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel Fields | Improve this Doc View Source m_prefixGridScanLevel Declaration protected readonly int m_prefixGridScanLevel Field Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.ContainsPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.ContainsPrefixTreeFilter.html",
    "title": "Class ContainsPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ContainsPrefixTreeFilter Finds docs where its indexed shape Contains the query shape. For use on RecursivePrefixTreeStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter ContainsPrefixTreeFilter Inherited Members AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class ContainsPrefixTreeFilter : AbstractPrefixTreeFilter Constructors | Improve this Doc View Source ContainsPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Boolean) Declaration public ContainsPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, bool multiOverlappingIndexedShapes) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Boolean multiOverlappingIndexedShapes Fields | Improve this Doc View Source m_multiOverlappingIndexedShapes If the spatial data for a document is comprised of multiple overlapping or adjacent parts, it might fail to match a query shape when doing the CONTAINS predicate when the sum of those shapes contain the query shape but none do individually. Set this to false to increase performance if you don't care about that circumstance (such as if your indexed data doesn't even have such conditions). See LUCENE-5062. Declaration protected readonly bool m_multiOverlappingIndexedShapes Field Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.html",
    "title": "Class IntersectsPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IntersectsPrefixTreeFilter A Filter matching documents that have an Spatial4n.Core.Shapes.SpatialRelation.INTERSECTS (i.e. not DISTINCT) relationship with a provided query shape. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter IntersectsPrefixTreeFilter Inherited Members AbstractVisitingPrefixTreeFilter.m_prefixGridScanLevel AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class IntersectsPrefixTreeFilter : AbstractVisitingPrefixTreeFilter Constructors | Improve this Doc View Source IntersectsPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32, Boolean) Declaration public IntersectsPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel, bool hasIndexedLeaves) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel System.Boolean hasIndexedLeaves Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides AbstractVisitingPrefixTreeFilter.Equals(Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetHashCode() LUCENENET specific: need to override GetHashCode to prevent a compiler warning and realistically, the hash code should work similarly to Equals. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides AbstractVisitingPrefixTreeFilter.GetHashCode()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PointPrefixTreeFieldCacheProvider.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PointPrefixTreeFieldCacheProvider.html",
    "title": "Class PointPrefixTreeFieldCacheProvider | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PointPrefixTreeFieldCacheProvider Implementation of ShapeFieldCacheProvider<T> designed for PrefixTreeStrategy s. Note, due to the fragmented representation of Shapes in these Strategies, this implementation can only retrieve the central Spatial4n.Core.Shapes.IPoint of the original Shapes. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ShapeFieldCacheProvider < Spatial4n.Core.Shapes.IPoint > PointPrefixTreeFieldCacheProvider Inherited Members ShapeFieldCacheProvider<IPoint>.m_defaultSize ShapeFieldCacheProvider<IPoint>.m_shapeField ShapeFieldCacheProvider<IPoint>.GetCache(AtomicReader) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class PointPrefixTreeFieldCacheProvider : ShapeFieldCacheProvider<IPoint> Constructors | Improve this Doc View Source PointPrefixTreeFieldCacheProvider(SpatialPrefixTree, String, Int32) Declaration public PointPrefixTreeFieldCacheProvider(SpatialPrefixTree grid, string shapeField, int defaultSize) Parameters Type Name Description SpatialPrefixTree grid System.String shapeField System.Int32 defaultSize Methods | Improve this Doc View Source ReadShape(BytesRef) Declaration protected override IPoint ReadShape(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description Spatial4n.Core.Shapes.IPoint Overrides Lucene.Net.Spatial.Util.ShapeFieldCacheProvider<Spatial4n.Core.Shapes.IPoint>.ReadShape(Lucene.Net.Util.BytesRef)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.html",
    "title": "Namespace Lucene.Net.Spatial.Prefix.Tree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Prefix.Tree Classes Cell Represents a grid cell. These are not necessarily thread-safe, although new Cell(\"\") (world cell) must be. This is a Lucene.NET EXPERIMENTAL API, use at your own risk GeohashPrefixTree A SpatialPrefixTree based on Geohashes . Uses Spatial4n.Core.Util.GeohashUtils to do all the geohash work. This is a Lucene.NET EXPERIMENTAL API, use at your own risk GeohashPrefixTree.Factory Factory for creating GeohashPrefixTree instances with useful defaults QuadPrefixTree A SpatialPrefixTree which uses a quad tree in which an indexed term will be generated for each cell, 'A', 'B', 'C', 'D'. This is a Lucene.NET EXPERIMENTAL API, use at your own risk QuadPrefixTree.Factory Factory for creating QuadPrefixTree instances with useful defaults SpatialPrefixTree A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. SpatialPrefixTreeFactory Abstract Factory for creating SpatialPrefixTree instances with useful defaults and passed on configurations defined in a System.Collections.Generic.IDictionary<TKey, TValue> . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTreeFactory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTreeFactory.html",
    "title": "Class SpatialPrefixTreeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialPrefixTreeFactory Abstract Factory for creating SpatialPrefixTree instances with useful defaults and passed on configurations defined in a System.Collections.Generic.IDictionary<TKey, TValue> . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTreeFactory GeohashPrefixTree.Factory QuadPrefixTree.Factory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialPrefixTreeFactory Fields | Improve this Doc View Source m_args Declaration protected IDictionary<string, string> m_args Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source m_ctx Declaration protected SpatialContext m_ctx Field Value Type Description Spatial4n.Core.Context.SpatialContext | Improve this Doc View Source m_maxLevels Declaration protected int? m_maxLevels Field Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source MAX_DIST_ERR Declaration public const string MAX_DIST_ERR = \"maxDistErr\" Field Value Type Description System.String | Improve this Doc View Source MAX_LEVELS Declaration public const string MAX_LEVELS = \"maxLevels\" Field Value Type Description System.String | Improve this Doc View Source PREFIX_TREE Declaration public const string PREFIX_TREE = \"prefixTree\" Field Value Type Description System.String Methods | Improve this Doc View Source GetLevelForDistance(Double) Calls GetLevelForDistance(Double) . Declaration protected abstract int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 | Improve this Doc View Source Init(IDictionary<String, String>, SpatialContext) Declaration protected virtual void Init(IDictionary<string, string> args, SpatialContext ctx) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Spatial4n.Core.Context.SpatialContext ctx | Improve this Doc View Source InitMaxLevels() Declaration protected virtual void InitMaxLevels() | Improve this Doc View Source MakeSPT(IDictionary<String, String>, SpatialContext) The factory is looked up via \"prefixTree\" in args , expecting \"geohash\" or \"quad\". Declaration public static SpatialPrefixTree MakeSPT(IDictionary<string, string> args, SpatialContext ctx) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Spatial4n.Core.Context.SpatialContext ctx Returns Type Description SpatialPrefixTree Remarks The factory is looked up via \"prefixTree\" in args , expecting \"geohash\" or \"quad\". If its neither of these, then \"geohash\" is chosen for a geo context, otherwise \"quad\" is chosen. | Improve this Doc View Source NewSPT() Declaration protected abstract SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.SpatialPrefixTree.html",
    "title": "Class SpatialPrefixTree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialPrefixTree A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. Inheritance System.Object SpatialPrefixTree GeohashPrefixTree QuadPrefixTree Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialPrefixTree Remarks A spatial Prefix Tree, or Trie, which decomposes shapes into prefixed strings at variable lengths corresponding to variable precision. Each string corresponds to a rectangular spatial region. This approach is also referred to \"Grids\", \"Tiles\", and \"Spatial Tiers\". Implementations of this class should be thread-safe and immutable once initialized. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SpatialPrefixTree(SpatialContext, Int32) Declaration public SpatialPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.Int32 maxLevels Fields | Improve this Doc View Source m_ctx Declaration protected readonly SpatialContext m_ctx Field Value Type Description Spatial4n.Core.Context.SpatialContext | Improve this Doc View Source m_maxLevels Declaration protected readonly int m_maxLevels Field Value Type Description System.Int32 Properties | Improve this Doc View Source MaxLevels Declaration public virtual int MaxLevels { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SpatialContext Declaration public virtual SpatialContext SpatialContext { get; } Property Value Type Description Spatial4n.Core.Context.SpatialContext | Improve this Doc View Source WorldCell Returns the level 0 cell which encompasses all spatial data. Declaration public virtual Cell WorldCell { get; } Property Value Type Description Cell Remarks Returns the level 0 cell which encompasses all spatial data. Equivalent to GetCell(String) with System.String.Empty . This cell is threadsafe, just like a spatial prefix grid is, although cells aren't generally threadsafe. Methods | Improve this Doc View Source CellsToTokenStrings(ICollection<Cell>) Will add the trailing leaf byte for leaves. This isn't particularly efficient. Declaration [Obsolete(\"TODO remove; not used and not interesting, don't need collection in & out\")] public static IList<string> CellsToTokenStrings(ICollection<Cell> cells) Parameters Type Name Description System.Collections.Generic.ICollection < Cell > cells Returns Type Description System.Collections.Generic.IList < System.String > | Improve this Doc View Source GetCell(IPoint, Int32) Returns the cell containing point p at the specified level . Declaration protected virtual Cell GetCell(IPoint p, int level) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p System.Int32 level Returns Type Description Cell | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public abstract Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell | Improve this Doc View Source GetCell(Byte[], Int32, Int32, Cell) Declaration public Cell GetCell(byte[] bytes, int offset, int len, Cell target) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Cell target Returns Type Description Cell | Improve this Doc View Source GetCell(String) The cell for the specified token. Declaration public abstract Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Remarks The cell for the specified token. The empty string should be equal to WorldCell . Precondition: Never called when token length > maxLevel. | Improve this Doc View Source GetCells(IPoint, Int32, Boolean) A Point-optimized implementation of GetCells(IShape, Int32, Boolean, Boolean) . That method in facts calls this for points. This implementation depends on GetCell(String) being fast, as its called repeatedly when incPlarents is true. Declaration public virtual IList<Cell> GetCells(IPoint p, int detailLevel, bool inclParents) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p System.Int32 detailLevel System.Boolean inclParents Returns Type Description System.Collections.Generic.IList < Cell > | Improve this Doc View Source GetCells(IShape, Int32, Boolean, Boolean) Gets the intersecting cells for the specified shape, without exceeding detail level. Declaration public virtual IList<Cell> GetCells(IShape shape, int detailLevel, bool inclParents, bool simplify) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape the shape; non-null System.Int32 detailLevel the maximum detail level to get cells for System.Boolean inclParents if true then all parent cells of leaves are returned too. The top world cell is never returned. System.Boolean simplify for non-point shapes, this will simply/aggregate sets of complete leaves in a cell to its parent, resulting in ~20-25% fewer cells. Returns Type Description System.Collections.Generic.IList < Cell > a set of cells (no dups), sorted, immutable, non-null Remarks Gets the intersecting cells for the specified shape, without exceeding detail level. If a cell is within the query shape then it's marked as a leaf and none of its children are added. This implementation checks if shape is a Spatial4n.Core.Shapes.IPoint and if so returns GetCells(IPoint, Int32, Boolean) . | Improve this Doc View Source GetDistanceForLevel(Int32) Given a cell having the specified level, returns the distance from opposite corners. Declaration public virtual double GetDistanceForLevel(int level) Parameters Type Name Description System.Int32 level [1 to maxLevels] Returns Type Description System.Double 0 Remarks Given a cell having the specified level, returns the distance from opposite corners. Since this might very depending on where the cell is, this method may over-estimate. | Improve this Doc View Source GetLevelForDistance(Double) Returns the level of the largest grid in which its longest side is less than or equal to the provided distance (in degrees). Declaration public abstract int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist = 0 Returns Type Description System.Int32 level [1 to maxLevels] Remarks Returns the level of the largest grid in which its longest side is less than or equal to the provided distance (in degrees). Consequently dist acts as an error epsilon declaring the amount of detail needed in the grid, such that you can get a grid with just the right amount of precision. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VNode.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractVisitingPrefixTreeFilter.VNode.html",
    "title": "Class AbstractVisitingPrefixTreeFilter.VNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractVisitingPrefixTreeFilter.VNode A Visitor node/cell found via the query shape for AbstractVisitingPrefixTreeFilter.VisitorTemplate . Sometimes these are reset(cell). It's like a LinkedList node but forms a tree. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractVisitingPrefixTreeFilter.VNode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class VNode"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser.html",
    "title": "Class AbstractPrefixTreeFilter.BaseTermsEnumTraverser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractPrefixTreeFilter.BaseTermsEnumTraverser Holds transient state and docid collecting utility methods as part of traversing a TermsEnum . Inheritance System.Object AbstractPrefixTreeFilter.BaseTermsEnumTraverser AbstractVisitingPrefixTreeFilter.VisitorTemplate Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class BaseTermsEnumTraverser Constructors | Improve this Doc View Source BaseTermsEnumTraverser(AbstractPrefixTreeFilter, AtomicReaderContext, IBits) Declaration public BaseTermsEnumTraverser(AbstractPrefixTreeFilter outerInstance, AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AbstractPrefixTreeFilter outerInstance AtomicReaderContext context IBits acceptDocs Fields | Improve this Doc View Source m_acceptDocs Declaration protected IBits m_acceptDocs Field Value Type Description IBits | Improve this Doc View Source m_context Declaration protected readonly AtomicReaderContext m_context Field Value Type Description AtomicReaderContext | Improve this Doc View Source m_docsEnum Declaration protected DocsEnum m_docsEnum Field Value Type Description DocsEnum | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 | Improve this Doc View Source m_outerInstance Declaration protected readonly AbstractPrefixTreeFilter m_outerInstance Field Value Type Description AbstractPrefixTreeFilter | Improve this Doc View Source m_termsEnum Declaration protected TermsEnum m_termsEnum Field Value Type Description TermsEnum Methods | Improve this Doc View Source CollectDocs(FixedBitSet) Declaration protected virtual void CollectDocs(FixedBitSet bitSet) Parameters Type Name Description FixedBitSet bitSet"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.html",
    "title": "Namespace Lucene.Net.Replicator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Files replication framework The [Replicator](Replicator.html) allows replicating files between a server and client(s). Producers publish [revisions](Revision.html) and consumers update to the latest revision available. [ReplicationClient](ReplicationClient.html) is a helper utility for performing the update operation. It can be invoked either [manually](ReplicationClient.html#updateNow()) or periodically by [starting an update thread](ReplicationClient.html#startUpdateThread(long, java.lang.String)). [HttpReplicator](http/HttpReplicator.html) can be used to replicate revisions by consumers that reside on a different node than the producer. The replication framework supports replicating any type of files, with built-in support for a single search index as well as an index and taxonomy pair. For a single index, the application should publish an [IndexRevision](IndexRevision.html) and set [IndexReplicationHandler](IndexReplicationHandler.html) on the client. For an index and taxonomy pair, the application should publish an [IndexAndTaxonomyRevision](IndexAndTaxonomyRevision.html) and set [IndexAndTaxonomyReplicationHandler](IndexAndTaxonomyReplicationHandler.html) on the client. When the replication client detects that there is a newer revision available, it copies the files of the revision and then invokes the handler to complete the operation (e.g. copy the files to the index directory, fsync them, reopen an index reader etc.). By default, only files that do not exist in the handler's [current revision files](ReplicationClient.ReplicationHandler.html#currentRevisionFiles()) are copied, however this can be overridden by extending the client. An example usage of the Replicator: // ++++++++++++++ SERVER SIDE ++++++++++++++ // IndexWriter publishWriter; // the writer used for indexing Replicator replicator = new LocalReplicator(); replicator.publish(new IndexRevision(publishWriter)); // ++++++++++++++ CLIENT SIDE ++++++++++++++ // // either LocalReplictor, or HttpReplicator if client and server are on different nodes Replicator replicator; // callback invoked after handler finished handling the revision and e.g. can reopen the reader. Callable callback = null; // can also be null if no callback is needed ReplicationHandler handler = new IndexReplicationHandler(indexDir, callback); SourceDirectoryFactory factory = new PerSessionDirectoryFactory(workDir); ReplicationClient client = new ReplicationClient(replicator, handler, factory); // invoke client manually client.updateNow(); // or, periodically client.startUpdateThread(100); // check for update every 100 milliseconds Classes IndexAndTaxonomyReplicationHandler A IReplicationHandler for replication of an index and taxonomy pair. See IReplicationHandler for more detail. This handler ensures that the search and taxonomy indexes are replicated in a consistent way. IndexAndTaxonomyRevision A IRevision of a single index and taxonomy index files which comprises the list of files from both indexes. This revision should be used whenever a pair of search and taxonomy indexes need to be replicated together to guarantee consistency of both on the replicating (client) side. IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter A DirectoryTaxonomyWriter which sets the underlying IndexWriter 's IndexDeletionPolicy to SnapshotDeletionPolicy . IndexInputStream A System.IO.Stream which wraps an IndexInput . IndexReplicationHandler A IReplicationHandler for replication of an index. Implements RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) by copying the files pointed by the client resolver to the index Directory and then touches the index with IndexWriter to make sure any unused files are deleted. IndexRevision A IRevision of a single index files which comprises the list of files that are part of the current IndexCommit . To ensure the files are not deleted by IndexWriter for as long as this revision stays alive (i.e. until Release() , the current commit point is snapshotted, using SnapshotDeletionPolicy (this means that the given writer's IndexDeletionPolicy should return SnapshotDeletionPolicy ). When this revision is Release() d, it releases the obtained snapshot as well as calls DeleteUnusedFiles() so that the snapshotted files are deleted (if they are no longer needed). LocalReplicator A IReplicator implementation for use by the side that publishes IRevision s, as well for clients to CheckForUpdate(String) check for updates}. When a client needs to be updated, it is returned a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. As long as a revision is being replicated, this replicator guarantees that it will not be Release() . Replication sessions expire by default after , and the threshold can be configured through ExpirationThreshold . PerSessionDirectoryFactory A ISourceDirectoryFactory which returns FSDirectory under a dedicated session directory. When a session is over, the entire directory is deleted. ReplicationClient A client which monitors and obtains new revisions from a IReplicator . It can be used to either periodically check for updates by invoking StartUpdateThread(Int64, String) , or manually by calling UpdateNow() . Whenever a new revision is available, the RequiredFiles(IDictionary<String, IList<RevisionFile>>) are copied to the Directory specified by PerSessionDirectoryFactory and a handler is notified. RevisionFile Describes a file in a IRevision . A file has a source, which allows a single revision to contain files from multiple sources (e.g. multiple indexes). SessionExpiredException Exception indicating that a revision update session was expired due to lack of activity. SessionToken Token for a replication session, for guaranteeing that source replicated files will be kept safe until the replication completes. Interfaces IReplicationHandler Handler for revisions obtained by the client. IReplicator An interface for replicating files. Allows a producer to Publish(IRevision) IRevision s and consumers to CheckForUpdate(String) . When a client needs to be updated, it is given a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. After the client has finished obtaining all the files, it should Release(String) the given session, so that the files can be reclaimed if they are not needed anymore. A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the client will next check for update, it will receive r3 . IRevision A revision comprises lists of files that come from different sources and need to be replicated together to e.g. guarantee that all resources are in sync. In most cases an application will replicate a single index, and so the revision will contain files from a single source. However, some applications may require to treat a collection of indexes as a single entity so that the files from all sources are replicated together, to guarantee consistency beween them. For example, an application which indexes facets will need to replicate both the search and taxonomy indexes together, to guarantee that they match at the client side. ISourceDirectoryFactory Resolves a session and source into a Directory to use for copying the session files to."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionToken.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionToken.html",
    "title": "Class SessionToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SessionToken Token for a replication session, for guaranteeing that source replicated files will be kept safe until the replication completes. Inheritance System.Object SessionToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public sealed class SessionToken Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SessionToken(IDataInput) Constructor which deserializes from the given IDataInput . Declaration public SessionToken(IDataInput reader) Parameters Type Name Description IDataInput reader Exceptions Type Condition System.IO.IOException | Improve this Doc View Source SessionToken(String, IRevision) Constructor with the given id and revision . Declaration public SessionToken(string id, IRevision revision) Parameters Type Name Description System.String id IRevision revision Exceptions Type Condition System.IO.IOException Properties | Improve this Doc View Source Id Id of this session. Should be passed when releasing the session, thereby acknowledging the IReplicator that this session is no longer in use. Declaration public string Id { get; } Property Value Type Description System.String See Also Release ( System.String ) | Improve this Doc View Source SourceFiles SourceFiles Declaration public IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Version Declaration public string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Serialize(DataOutputStream) Serialize the token data for communication between server and client. Declaration public void Serialize(DataOutputStream writer) Parameters Type Name Description DataOutputStream writer Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also CheckForUpdate ( System.String ) Release ( System.String ) DEFAULT_SESSION_EXPIRATION_THRESHOLD"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ISourceDirectoryFactory.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ISourceDirectoryFactory.html",
    "title": "Interface ISourceDirectoryFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISourceDirectoryFactory Resolves a session and source into a Directory to use for copying the session files to. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface ISourceDirectoryFactory Methods | Improve this Doc View Source CleanupSession(String) Called to denote that the replication actions for this session were finished and the directory is no longer needed. Declaration void CleanupSession(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetDirectory(String, String) Returns the Directory to use for the given session and source. Implementations may e.g. return different directories for different sessions, or the same directory for all sessions. In that case, it is advised to clean the directory before it is used for a new session. Declaration Directory GetDirectory(string sessionId, string source) Parameters Type Name Description System.String sessionId System.String source Returns Type Description Directory Exceptions Type Condition System.IO.IOException See Also CleanupSession(String)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.INLSException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.INLSException.html",
    "title": "Interface INLSException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface INLSException Interface that exceptions should implement to support lazy loading of messages. For Native Language Support (NLS), system of software internationalization. This Interface should be implemented by all exceptions that require translation Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public interface INLSException Properties | Improve this Doc View Source MessageObject an instance of a class that implements the Message interface Declaration IMessage MessageObject { get; } Property Value Type Description IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.IMessage.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.IMessage.html",
    "title": "Interface IMessage | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMessage Message Interface for a lazy loading. For Native Language Support (NLS), system of software internationalization. Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public interface IMessage Properties | Improve this Doc View Source Key Declaration string Key { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetArguments() Declaration object[] GetArguments() Returns Type Description System.Object [] | Improve this Doc View Source GetLocalizedMessage() Declaration string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description System.Globalization.CultureInfo locale Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core Classes QueryNodeError Error class with NLS support QueryNodeException This exception should be thrown if something wrong happens when dealing with IQueryNode s. It also supports NLS messages. QueryNodeParseException This should be thrown when an exception happens during the query parsing from string to the query node tree. QueryParserHelper<TQuery> This class is a helper for the query parser framework, it does all the three query parser phrases at once: text parsing, query processing and query building. It contains methods that allows the user to change the implementation used on the three phases."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Util Classes QueryNodeOperation Allow joining 2 QueryNode Trees, into one. StringUtils String manipulation routines UnescapedCharSequence ICharSequence with escaped chars information."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.StringUtils.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.StringUtils.html",
    "title": "Class StringUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringUtils String manipulation routines Inheritance System.Object StringUtils Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class StringUtils Methods | Improve this Doc View Source ToString(Object) Declaration public static string ToString(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.QueryNodeOperation.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.QueryNodeOperation.html",
    "title": "Class QueryNodeOperation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeOperation Allow joining 2 QueryNode Trees, into one. Inheritance System.Object QueryNodeOperation Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class QueryNodeOperation Methods | Improve this Doc View Source LogicalAnd(IQueryNode, IQueryNode) perform a logical and of 2 QueryNode trees. if q1 and q2 are ANDQueryNode nodes it uses head Node from q1 and adds the children of q2 to q1 if q1 is a AND node and q2 is not, add q2 as a child of the head node of q1 if q2 is a AND node and q1 is not, add q1 as a child of the head node of q2 if q1 and q2 are not ANDQueryNode nodes, create a AND node and make q1 and q2 children of that node if q1 or q2 is null it returns the not null node if q1 = q2 = null it returns null Declaration public static IQueryNode LogicalAnd(IQueryNode q1, IQueryNode q2) Parameters Type Name Description IQueryNode q1 IQueryNode q2 Returns Type Description IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper-1.html",
    "title": "Class QueryParserHelper<TQuery> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserHelper<TQuery> This class is a helper for the query parser framework, it does all the three query parser phrases at once: text parsing, query processing and query building. It contains methods that allows the user to change the implementation used on the three phases. Inheritance System.Object QueryParserHelper<TQuery> StandardQueryParser Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserHelper<TQuery> Type Parameters Name Description TQuery Constructors | Improve this Doc View Source QueryParserHelper(QueryConfigHandler, ISyntaxParser, IQueryNodeProcessor, IQueryBuilder<TQuery>) Creates a query parser helper object using the specified configuration, text parser, processor and builder. Declaration public QueryParserHelper(QueryConfigHandler queryConfigHandler, ISyntaxParser syntaxParser, IQueryNodeProcessor processor, IQueryBuilder<TQuery> builder) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler that will be initially set to this helper ISyntaxParser syntaxParser the text parser that will be initially set to this helper IQueryNodeProcessor processor the query processor that will be initially set to this helper IQueryBuilder <TQuery> builder the query builder that will be initially set to this helper See Also IQueryNodeProcessor ISyntaxParser IQueryBuilder <TQuery> QueryConfigHandler Properties | Improve this Doc View Source QueryBuilder Returns the query builder used to build a object from the query node tree. The object produced by this builder is returned by Parse(String, String) . Declaration public virtual IQueryBuilder<TQuery> QueryBuilder { get; } Property Value Type Description IQueryBuilder <TQuery> See Also SetQueryBuilder(IQueryBuilder<TQuery>) IQueryBuilder <TQuery> | Improve this Doc View Source QueryConfigHandler Returns the query configuration handler, which is used during the query node tree processing. It can be null . Declaration public virtual QueryConfigHandler QueryConfigHandler { get; } Property Value Type Description QueryConfigHandler See Also QueryConfigHandler SetQueryConfigHandler(QueryConfigHandler) | Improve this Doc View Source QueryNodeProcessor Gets the processor object used to process the query node tree, it returns null if no processor is used. Declaration public virtual IQueryNodeProcessor QueryNodeProcessor { get; } Property Value Type Description IQueryNodeProcessor See Also IQueryNodeProcessor SetQueryNodeProcessor(IQueryNodeProcessor) | Improve this Doc View Source SyntaxParser Returns the text parser used to build a query node tree from a query string. The default text parser instance returned by this method is a ISyntaxParser . Declaration public virtual ISyntaxParser SyntaxParser { get; } Property Value Type Description ISyntaxParser See Also ISyntaxParser SetSyntaxParser(ISyntaxParser) Methods | Improve this Doc View Source Parse(String, String) Parses a query string to an object, usually some query object. In this method the three phases are executed: the query string is parsed using the text parser returned by SyntaxParser , the result is a query node tree. the query node tree is processed by the processor returned by QueryNodeProcessor . a object is built from the query node tree using the builder returned by QueryBuilder . Declaration public virtual TQuery Parse(string query, string defaultField) Parameters Type Name Description System.String query the query string System.String defaultField the default field used by the text parser Returns Type Description TQuery the object built from the query Exceptions Type Condition QueryNodeException if something wrong happens along the three phases | Improve this Doc View Source SetQueryBuilder(IQueryBuilder<TQuery>) The query builder that will be used to build an object from the query node tree. It cannot be null . Declaration public virtual void SetQueryBuilder(IQueryBuilder<TQuery> queryBuilder) Parameters Type Name Description IQueryBuilder <TQuery> queryBuilder the query builder used to build something from the query node tree See Also QueryBuilder IQueryBuilder <TQuery> | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Sets the query configuration handler that will be used during query processing. It can be null . It's also set to the processor returned by QueryNodeProcessor . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config the query configuration handler used during query processing, it can be null See Also QueryConfigHandler QueryConfigHandler | Improve this Doc View Source SetQueryNodeProcessor(IQueryNodeProcessor) Sets the processor that will be used to process the query node tree. If there is any QueryConfigHandler returned by QueryConfigHandler , it will be set on the processor. The argument can be null , which means that no processor will be used to process the query node tree. Declaration public virtual void SetQueryNodeProcessor(IQueryNodeProcessor processor) Parameters Type Name Description IQueryNodeProcessor processor the processor that will be used to process the query node tree, this argument can be null See Also QueryNodeProcessor IQueryNodeProcessor | Improve this Doc View Source SetSyntaxParser(ISyntaxParser) Sets the text parser that will be used to parse the query string, it cannot be null . Declaration public virtual void SetSyntaxParser(ISyntaxParser syntaxParser) Parameters Type Name Description ISyntaxParser syntaxParser the text parser that will be used to parse the query string See Also SyntaxParser ISyntaxParser See Also IQueryNodeProcessor ISyntaxParser IQueryBuilder <TQuery> QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Processors | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Processors Classes NoChildOptimizationQueryNodeProcessor A NoChildOptimizationQueryNodeProcessor removes every BooleanQueryNode, BoostQueryNode, TokenizedPhraseQueryNode or ModifierQueryNode that do not have a valid children. Example: When the children of these nodes are removed for any reason then the nodes may become invalid. QueryNodeProcessor This is a default implementation for the IQueryNodeProcessor interface, it's an abstract class, so it should be extended by classes that want to process a IQueryNode tree. This class process IQueryNode s from left to right in the tree. While it's walking down the tree, for every node, PreProcessNode(IQueryNode) is invoked. After a node's children are processed, PostProcessNode(IQueryNode) is invoked for that node. SetChildrenOrder(IList<IQueryNode>) is invoked before PostProcessNode(IQueryNode) only if the node has at least one child, in SetChildrenOrder(IList<IQueryNode>) the implementor might redefine the children order or remove any children from the children list. Here is an example about how it process the nodes: a / \\ b e / \\ c d Here is the order the methods would be invoked for the tree described above: PreProcessNode( a ); PreProcessNode( b ); PreProcessNode( c ); PostProcessNode( c ); PreProcessNode( d ); PostProcessNode( d ); SetChildrenOrder( bChildrenList ); PostProcessNode( b ); PreProcessNode( e ); PostProcessNode( e ); SetChildrenOrder( aChildrenList ); PostProcessNode( a ) QueryNodeProcessorPipeline A QueryNodeProcessorPipeline class should be used to build a query node processor pipeline. When a query node tree is processed using this class, it passes the query node tree to each processor on the pipeline and the result from each processor is passed to the next one, always following the order the processors were on the pipeline. When a QueryConfigHandler object is set on a QueryNodeProcessorPipeline , it also takes care of setting this QueryConfigHandler on all processor on pipeline. RemoveDeletedQueryNodesProcessor A QueryNodeProcessorPipeline class removes every instance of DeletedQueryNode from a query node tree. If the resulting root node is a DeletedQueryNode , MatchNoDocsQueryNode is returned. Interfaces IQueryNodeProcessor An IQueryNodeProcessor is an interface for classes that process a IQueryNode tree. The implementor of this class should perform some operation on a query node tree and return the same or another query node tree. It also may carry a QueryConfigHandler object that contains configuration about the query represented by the query tree or the collection/index where it's intended to be executed. In case there is any QueryConfigHandler associated to the query tree to be processed, it should be set using SetQueryConfigHandler(QueryConfigHandler) before Process(IQueryNode) is invoked."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class Token Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = 8 Field Value Type Description System.Int32 | Improve this Doc View Source BAREOPER RegularExpression Id. Declaration public const int BAREOPER = 13 Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = 18 Field Value Type Description System.Int32 | Improve this Doc View Source COLON RegularExpression Id. Declaration public const int COLON = 16 Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = 0 Field Value Type Description System.Int32 | Improve this Doc View Source ESCAPED_CHAR RegularExpression Id. Declaration public const int ESCAPED_CHAR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source FUZZY_SLOP RegularExpression Id. Declaration public const int FUZZY_SLOP = 21 Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = 14 Field Value Type Description System.Int32 | Improve this Doc View Source MINUS RegularExpression Id. Declaration public const int MINUS = 12 Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = 10 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = 27 Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = 9 Field Value Type Description System.Int32 | Improve this Doc View Source PLUS RegularExpression Id. Declaration public const int PLUS = 11 Field Value Type Description System.Int32 | Improve this Doc View Source PREFIXTERM RegularExpression Id. Declaration public const int PREFIXTERM = 22 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = 19 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED_CHAR RegularExpression Id. Declaration public const int QUOTED_CHAR = 6 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_GOOP RegularExpression Id. Declaration public const int RANGE_GOOP = 32 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_QUOTED RegularExpression Id. Declaration public const int RANGE_QUOTED = 31 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_TO RegularExpression Id. Declaration public const int RANGE_TO = 28 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_END RegularExpression Id. Declaration public const int RANGEEX_END = 30 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_START RegularExpression Id. Declaration public const int RANGEEX_START = 26 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_END RegularExpression Id. Declaration public const int RANGEIN_END = 29 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_START RegularExpression Id. Declaration public const int RANGEIN_START = 25 Field Value Type Description System.Int32 | Improve this Doc View Source REGEXPTERM RegularExpression Id. Declaration public const int REGEXPTERM = 24 Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = 15 Field Value Type Description System.Int32 | Improve this Doc View Source STAR RegularExpression Id. Declaration public const int STAR = 17 Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = 20 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = 4 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_START_CHAR RegularExpression Id. Declaration public const int TERM_START_CHAR = 3 Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = 5 Field Value Type Description System.Int32 | Improve this Doc View Source WILDTERM RegularExpression Id. Declaration public const int WILDTERM = 23 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserTokenManager.html",
    "title": "Class QueryParserTokenManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserTokenManager Token Manager. Inheritance System.Object QueryParserTokenManager Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserTokenManager Constructors | Improve this Doc View Source QueryParserTokenManager(ICharStream) Constructor. Declaration public QueryParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParserTokenManager(ICharStream, Int32) Constructor. Declaration public QueryParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected virtual Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialise parser. Declaration public virtual void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialise parser. Declaration public virtual void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public virtual void SetDebugStream(TextWriter ds) Parameters Type Name Description System.IO.TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public virtual void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserConstants.html",
    "title": "Class QueryParserConstants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() Inheritance System.Object QueryParserConstants Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class QueryParserConstants Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.Operator.html",
    "title": "Enum Operator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Operator The default operator for parsing queries. Use DefaultOperator to change it. Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public enum Operator Fields Name Description AND OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = 0 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = 2 Field Value Type Description System.Int32 | Improve this Doc View Source Range Lexical state. Declaration public const int Range = 1 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Returns the column position of the character last read. Declaration [Obsolete] int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Returns the line number of the character last read. Declaration [Obsolete] int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = Image; return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any System.IO.IOException . Declaration char ReadChar() Returns Type Description System.Char"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.html",
    "title": "Namespace Lucene.Net.QueryParsers.Analyzing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Analyzing Classes AnalyzingQueryParser Overrides Lucene's default QueryParser so that Fuzzy-, Prefix-, Range-, and WildcardQuerys are also passed through the given analyzer, but wildcard characters * and ? don't get removed from the search terms. Warning: This class should only be used with analyzers that do not use stopwords or that add tokens. Also, several stemming analyzers are inappropriate: for example, GermanAnalyzer will turn Häuser into hau , but H?user will become h?user when using this parser and thus no match would be found (i.e. using this parser will be no improvement over QueryParser in such cases)."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.html",
    "title": "Class AbstractSecondPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector LUCENENET specific class used to simulate the syntax used to access nested classes of AbstractAllGroupHeadsCollector<GH> without referencing the generic closing type. Inheritance System.Object AbstractSecondPassGroupingCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class AbstractSecondPassGroupingCollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.SearchGroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.SearchGroupDocs-1.html",
    "title": "Class AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> Inheritance System.Object AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroupDocs<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source SearchGroupDocs(TGroupValue, ITopDocsCollector) Declaration public SearchGroupDocs(TGroupValue groupValue, ITopDocsCollector collector) Parameters Type Name Description TGroupValue groupValue ITopDocsCollector collector Properties | Improve this Doc View Source Collector Declaration public ITopDocsCollector Collector { get; } Property Value Type Description ITopDocsCollector | Improve this Doc View Source GroupValue Declaration public TGroupValue GroupValue { get; } Property Value Type Description TGroupValue"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.GroupedFacetResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.GroupedFacetResult.html",
    "title": "Class AbstractGroupFacetCollector.GroupedFacetResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.GroupedFacetResult The grouped facet result. Containing grouped facet entries, total count and total missing count. Inheritance System.Object AbstractGroupFacetCollector.GroupedFacetResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupedFacetResult Constructors | Improve this Doc View Source GroupedFacetResult(Int32, Int32, Boolean, Int32, Int32) Declaration public GroupedFacetResult(int size, int minCount, bool orderByCount, int totalCount, int totalMissingCount) Parameters Type Name Description System.Int32 size System.Int32 minCount System.Boolean orderByCount System.Int32 totalCount System.Int32 totalMissingCount Properties | Improve this Doc View Source TotalCount Gets the sum of all facet entries counts. Declaration public virtual int TotalCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalMissingCount Gets the number of groups that didn't have a facet value. Declaration public virtual int TotalMissingCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddFacetCount(BytesRef, Int32) Declaration public virtual void AddFacetCount(BytesRef facetValue, int count) Parameters Type Name Description BytesRef facetValue System.Int32 count | Improve this Doc View Source GetFacetEntries(Int32, Int32) Returns a list of facet entries to be rendered based on the specified offset and limit. The facet entries are retrieved from the facet entries collected during merging. Declaration public virtual IList<AbstractGroupFacetCollector.FacetEntry> GetFacetEntries(int offset, int limit) Parameters Type Name Description System.Int32 offset The offset in the collected facet entries during merging System.Int32 limit The number of facets to return starting from the offset. Returns Type Description System.Collections.Generic.IList < AbstractGroupFacetCollector.FacetEntry > a list of facet entries to be rendered based on the specified offset and limit"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.FacetEntry.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.FacetEntry.html",
    "title": "Class AbstractGroupFacetCollector.FacetEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.FacetEntry Represents a facet entry with a value and a count. Inheritance System.Object AbstractGroupFacetCollector.FacetEntry Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class FacetEntry Constructors | Improve this Doc View Source FacetEntry(BytesRef, Int32) Declaration public FacetEntry(BytesRef value, int count) Parameters Type Name Description BytesRef value System.Int32 count Properties | Improve this Doc View Source Count Gets the count (number of groups) of this facet entry. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Gets the value of this facet entry Declaration public virtual BytesRef Value { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.AbstractSegmentResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.AbstractSegmentResult.html",
    "title": "Class AbstractGroupFacetCollector.AbstractSegmentResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.AbstractSegmentResult Contains the local grouped segment counts for a particular segment. Each AbstractGroupFacetCollector.AbstractSegmentResult must be added together. Inheritance System.Object AbstractGroupFacetCollector.AbstractSegmentResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax protected abstract class AbstractSegmentResult Remarks LUCENENET NOTE: Renamed from SegmentResult to AbstractSegmentResult to avoid naming conflicts with subclasses. Constructors | Improve this Doc View Source AbstractSegmentResult(Int32[], Int32, Int32, Int32) Declaration protected AbstractSegmentResult(int[] counts, int total, int missing, int maxTermPos) Parameters Type Name Description System.Int32 [] counts System.Int32 total System.Int32 missing System.Int32 maxTermPos Fields | Improve this Doc View Source m_counts Declaration protected readonly int[] m_counts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_maxTermPos Declaration protected readonly int m_maxTermPos Field Value Type Description System.Int32 | Improve this Doc View Source m_mergePos Declaration protected int m_mergePos Field Value Type Description System.Int32 | Improve this Doc View Source m_mergeTerm Declaration protected BytesRef m_mergeTerm Field Value Type Description BytesRef | Improve this Doc View Source m_missing Declaration protected readonly int m_missing Field Value Type Description System.Int32 | Improve this Doc View Source m_total Declaration protected readonly int m_total Field Value Type Description System.Int32 Methods | Improve this Doc View Source NextTerm() Go to next term in this AbstractGroupFacetCollector.AbstractSegmentResult in order to retrieve the grouped facet counts. Declaration protected abstract void NextTerm() Exceptions Type Condition System.IO.IOException If I/O related errors occur"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.html",
    "title": "Namespace Lucene.Net.Tartarus.Snowball | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Tartarus.Snowball Classes Among This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS SnowballProgram This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.SnowballProgram.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.SnowballProgram.html",
    "title": "Class SnowballProgram | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SnowballProgram This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS Inheritance System.Object SnowballProgram ArmenianStemmer BasqueStemmer CatalanStemmer DanishStemmer DutchStemmer EnglishStemmer FinnishStemmer FrenchStemmer German2Stemmer GermanStemmer HungarianStemmer IrishStemmer ItalianStemmer KpStemmer LovinsStemmer NorwegianStemmer PorterStemmer PortugueseStemmer RomanianStemmer RussianStemmer SpanishStemmer SwedishStemmer TurkishStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class SnowballProgram Constructors | Improve this Doc View Source SnowballProgram() Declaration protected SnowballProgram() Fields | Improve this Doc View Source m_bra Declaration protected int m_bra Field Value Type Description System.Int32 | Improve this Doc View Source m_current Declaration protected char[] m_current Field Value Type Description System.Char [] | Improve this Doc View Source m_cursor Declaration protected int m_cursor Field Value Type Description System.Int32 | Improve this Doc View Source m_ket Declaration protected int m_ket Field Value Type Description System.Int32 | Improve this Doc View Source m_limit Declaration protected int m_limit Field Value Type Description System.Int32 | Improve this Doc View Source m_limit_backward Declaration protected int m_limit_backward Field Value Type Description System.Int32 Properties | Improve this Doc View Source Current Get the current string. Declaration public virtual string Current { get; } Property Value Type Description System.String | Improve this Doc View Source CurrentBuffer Get the current buffer containing the stem. NOTE: this may be a reference to a different character array than the one originally provided with setCurrent, in the exceptional case that stemming produced a longer intermediate or result string. It is necessary to use CurrentBufferLength to determine the valid length of the returned buffer. For example, many words are stemmed simply by subtracting from the length to remove suffixes. Declaration public virtual char[] CurrentBuffer { get; } Property Value Type Description System.Char [] See Also CurrentBufferLength | Improve this Doc View Source CurrentBufferLength Get the valid length of the character array in CurrentBuffer Declaration public virtual int CurrentBufferLength { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AssignTo(StringBuilder) Declaration protected virtual StringBuilder AssignTo(StringBuilder s) Parameters Type Name Description System.Text.StringBuilder s Returns Type Description System.Text.StringBuilder | Improve this Doc View Source CopyFrom(SnowballProgram) Declaration protected virtual void CopyFrom(SnowballProgram other) Parameters Type Name Description SnowballProgram other | Improve this Doc View Source Eq_S(Int32, String) Declaration protected virtual bool Eq_S(int s_size, string s) Parameters Type Name Description System.Int32 s_size System.String s Returns Type Description System.Boolean | Improve this Doc View Source Eq_S_B(Int32, String) Declaration protected virtual bool Eq_S_B(int s_size, string s) Parameters Type Name Description System.Int32 s_size System.String s Returns Type Description System.Boolean | Improve this Doc View Source Eq_V(String) Declaration protected virtual bool Eq_V(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean | Improve this Doc View Source Eq_V_B(String) Declaration protected virtual bool Eq_V_B(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean | Improve this Doc View Source FindAmong(Among[], Int32) Declaration protected virtual int FindAmong(Among[] v, int v_size) Parameters Type Name Description Among [] v System.Int32 v_size Returns Type Description System.Int32 | Improve this Doc View Source FindAmongB(Among[], Int32) Declaration protected virtual int FindAmongB(Among[] v, int v_size) Parameters Type Name Description Among [] v System.Int32 v_size Returns Type Description System.Int32 | Improve this Doc View Source InGrouping(Char[], Int32, Int32) Declaration protected virtual bool InGrouping(char[] s, int min, int max) Parameters Type Name Description System.Char [] s System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source InGroupingB(Char[], Int32, Int32) Declaration protected virtual bool InGroupingB(char[] s, int min, int max) Parameters Type Name Description System.Char [] s System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source InRange(Int32, Int32) Declaration protected virtual bool InRange(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source InRangeB(Int32, Int32) Declaration protected virtual bool InRangeB(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source Insert(Int32, Int32, String) Declaration protected virtual void Insert(int c_bra, int c_ket, string s) Parameters Type Name Description System.Int32 c_bra System.Int32 c_ket System.String s | Improve this Doc View Source OutGrouping(Char[], Int32, Int32) Declaration protected virtual bool OutGrouping(char[] s, int min, int max) Parameters Type Name Description System.Char [] s System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source OutGroupingB(Char[], Int32, Int32) Declaration protected virtual bool OutGroupingB(char[] s, int min, int max) Parameters Type Name Description System.Char [] s System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source OutRange(Int32, Int32) Declaration protected virtual bool OutRange(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source OutRangeB(Int32, Int32) Declaration protected virtual bool OutRangeB(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description System.Boolean | Improve this Doc View Source ReplaceS(Int32, Int32, String) to replace chars between c_bra and c_ket in current by the chars in s . Declaration protected virtual int ReplaceS(int c_bra, int c_ket, string s) Parameters Type Name Description System.Int32 c_bra System.Int32 c_ket System.String s Returns Type Description System.Int32 | Improve this Doc View Source SetCurrent(Char[], Int32) Set the current string. Declaration public virtual void SetCurrent(char[] text, int length) Parameters Type Name Description System.Char [] text character array containing input System.Int32 length valid length of text. | Improve this Doc View Source SetCurrent(String) Set the current string. Declaration public virtual void SetCurrent(string value) Parameters Type Name Description System.String value | Improve this Doc View Source SliceCheck() Declaration protected virtual void SliceCheck() | Improve this Doc View Source SliceDel() Declaration protected virtual void SliceDel() | Improve this Doc View Source SliceFrom(String) Declaration protected virtual void SliceFrom(string s) Parameters Type Name Description System.String s | Improve this Doc View Source SliceTo(StringBuilder) Copy the slice into the supplied System.Text.StringBuilder Declaration protected virtual StringBuilder SliceTo(StringBuilder s) Parameters Type Name Description System.Text.StringBuilder s Returns Type Description System.Text.StringBuilder | Improve this Doc View Source Stem() Declaration public abstract bool Stem() Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.html",
    "title": "Namespace Lucene.Net.Tartarus.Snowball.Ext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Tartarus.Snowball.Ext Classes ArmenianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. BasqueStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. CatalanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. DanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. DutchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. EnglishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. FinnishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. FrenchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. German2Stemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. GermanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. HungarianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. IrishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. ItalianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. KpStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. LovinsStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. NorwegianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. PorterStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. PortugueseStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. RomanianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. RussianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. SpanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. SwedishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. TurkishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std31.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std31.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std31 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std31 Classes StandardTokenizerImpl31 This class implements StandardTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl31 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardTokenizerInterface.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardTokenizerInterface.html",
    "title": "Class StandardTokenizerInterface | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizerInterface Inheritance System.Object StandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class StandardTokenizerInterface Fields | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public const int YYEOF = -1 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.IStandardTokenizerInterface.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.IStandardTokenizerInterface.html",
    "title": "Interface IStandardTokenizerInterface | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStandardTokenizerInterface Internal interface for supporting versioned grammars. @lucene.internal Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IStandardTokenizerInterface Properties | Improve this Doc View Source YyChar Returns the current position. Declaration int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration int YyLength { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration int GetNextToken() Returns Type Description System.Int32 the next token, YYEOF on end of stream Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Copies the matched text into the ICharTermAttribute Declaration void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Declaration void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.IPayloadEncoder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.IPayloadEncoder.html",
    "title": "Interface IPayloadEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPayloadEncoder Mainly for use with the DelimitedPayloadTokenFilter , converts char buffers to BytesRef . NOTE: This interface is subject to change Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[]) Declaration BytesRef Encode(char[] buffer) Parameters Type Name Description System.Char [] buffer Returns Type Description BytesRef | Improve this Doc View Source Encode(Char[], Int32, Int32) Convert a char array to a BytesRef Declaration BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef encoded BytesRef"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.html",
    "title": "Namespace Lucene.Net.Analysis.Pattern | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pattern Classes PatternCaptureGroupFilterFactory Factory for PatternCaptureGroupTokenFilter . <fieldType name=\"text_ptncapturegroup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternCaptureGroupFilterFactory\" pattern=\"([^a-z])\" preserve_original=\"true\"/> </analyzer> </fieldType> PatternCaptureGroupTokenFilter CaptureGroup uses .NET regexes to emit multiple tokens - one for each capture group in one or more patterns. For example, a pattern like: \"(https?://([a-zA-Z-_0-9.]+))\" when matched against the string \" http://www.foo.com/index&quot ; would return the tokens \"https://www.foo.com\" and \"www.foo.com\". If none of the patterns match, or if preserveOriginal is true, the original token will be preserved. Each pattern is matched as often as it can be, so the pattern \"(...)\" , when matched against \"abcdefghi\" would produce [\"abc\",\"def\",\"ghi\"] A camelCaseFilter could be written as: \"([A-Z]{2,})\", \"(?<![A-Z])([A-Z][a-z]+)\", \"(?:^|\\\\b|(?<=[0-9_])|(?<=[A-Z]{2}))([a-z]+)\", \"([0-9]+)\" plus if Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.preserveOriginal is true, it would also return camelCaseFilter PatternReplaceCharFilter CharFilter that uses a regular expression for the target of replace string. The pattern match will be done in each \"block\" in char stream. ex1) source=\"aa bb aa bb\", pattern=\"(aa)\\s+(bb)\" replacement=\"$1#$2\" output=\"aa#bb aa#bb\" NOTE: If you produce a phrase that has different length to source string and the field is used for highlighting for a term of the phrase, you will face a trouble. ex2) source=\"aa123bb\", pattern=\"(aa)\\d+(bb)\" replacement=\"$1 $2\" output=\"aa bb\" and you want to search bb and highlight it, you will get highlight snippet=\"aa1<em>23bb</em>\" @since Solr 1.5 PatternReplaceCharFilterFactory Factory for PatternReplaceCharFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PatternReplaceCharFilterFactory\" pattern=\"([^a-z])\" replacement=\"\"/> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 3.1 PatternReplaceFilter A TokenFilter which applies a System.Text.RegularExpressions.Regex to each token in the stream, replacing match occurances with the specified replacement string. Note: Depending on the input and the pattern used and the input TokenStream , this TokenFilter may produce Token s whose text is the empty string. PatternReplaceFilterFactory Factory for PatternReplaceFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternReplaceFilterFactory\" pattern=\"([^a-z])\" replacement=\"\" replace=\"all\"/> </analyzer> </fieldType> PatternTokenizer This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. PatternTokenizerFactory Factory for PatternTokenizer . This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. <fieldType name=\"text_ptn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.PatternTokenizerFactory\" pattern=\"\\'([^\\']+)\\'\" group=\"1\"/> </analyzer> </fieldType> @since solr1.2"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Path.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Path.html",
    "title": "Namespace Lucene.Net.Analysis.Path | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Path Classes PathHierarchyTokenizer Tokenizer for path-like hierarchies. Take something like: /something/something/else and make: /something /something/something /something/something/else PathHierarchyTokenizerFactory Factory for PathHierarchyTokenizer . This factory is typically configured for use only in the index Analyzer (or only in the query Analyzer, but never both). For example, in the configuration below a query for Books/NonFic will match documents indexed with values like Books/NonFic , Books/NonFic/Law , Books/NonFic/Science/Physics , etc. But it will not match documents indexed with values like Books , or Books/Fic ... <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> </fieldType> In this example however we see the oposite configuration, so that a query for Books/NonFic/Science/Physics would match documents containing Books/NonFic , Books/NonFic/Science , or Books/NonFic/Science/Physics , but not Books/NonFic/Science/Physics/Theory or Books/NonFic/Law . <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> </fieldType> ReversePathHierarchyTokenizer Tokenizer for domain-like hierarchies. Take something like: www.site.co.uk and make: www.site.co.uk site.co.uk co.uk uk"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.html",
    "title": "Namespace Lucene.Net.Analysis.In | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.In Classes IndicNormalizationFilter A TokenFilter that applies IndicNormalizer to normalize text in Indian Languages. IndicNormalizationFilterFactory Factory for IndicNormalizationFilter . <fieldType name=\"text_innormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IndicNormalizationFilterFactory\"/> </analyzer> </fieldType> IndicNormalizer Normalizes the Unicode representation of text in Indian languages. Follows guidelines from Unicode 5.2, chapter 6, South Asian Scripts I and graphical decompositions from http://ldc.upenn.edu/myl/IndianScriptsUnicode.html IndicTokenizer Simple Tokenizer for text in Indian Languages."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.IndicNormalizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.IndicNormalizer.html",
    "title": "Class IndicNormalizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndicNormalizer Normalizes the Unicode representation of text in Indian languages. Follows guidelines from Unicode 5.2, chapter 6, South Asian Scripts I and graphical decompositions from http://ldc.upenn.edu/myl/IndianScriptsUnicode.html Inheritance System.Object IndicNormalizer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndicNormalizer Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalizes input text, and returns the new length. The length will always be less than or equal to the existing length. Declaration public virtual int Normalize(char[] text, int len) Parameters Type Name Description System.Char [] text input text System.Int32 len valid length Returns Type Description System.Int32 normalized length"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.html",
    "title": "Namespace Lucene.Net.Analysis.Id | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Id Classes IndonesianAnalyzer Analyzer for Indonesian (Bahasa) IndonesianStemFilter A TokenFilter that applies IndonesianStemmer to stem Indonesian words. IndonesianStemFilterFactory Factory for IndonesianStemFilter . <fieldType name=\"text_idstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.IndonesianStemFilterFactory\" stemDerivational=\"true\"/> </analyzer> </fieldType> IndonesianStemmer Stemmer for Indonesian. Stems Indonesian words with the algorithm presented in: A Study of Stemming Effects on Information Retrieval in Bahasa Indonesia , Fadillah Z Tala. http://www.illc.uva.nl/Publications/ResearchReports/MoL-2003-02.text.pdf"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.html",
    "title": "Namespace Lucene.Net.Analysis.Fr | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fr Classes FrenchAnalyzer Analyzer for French language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating FrenchAnalyzer: As of 3.6, FrenchLightStemFilter is used for less aggressive stemming. As of 3.1, Snowball stemming is done with SnowballFilter , LowerCaseFilter is used prior to StopFilter , and ElisionFilter and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . FrenchLightStemFilter A TokenFilter that applies FrenchLightStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchLightStemFilterFactory Factory for FrenchLightStemFilter . <fieldType name=\"text_frlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchLightStemFilterFactory\"/> </analyzer> </fieldType> FrenchLightStemmer Light Stemmer for French. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy FrenchMinimalStemFilter A TokenFilter that applies FrenchMinimalStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchMinimalStemFilterFactory Factory for FrenchMinimalStemFilter . <fieldType name=\"text_frminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchMinimalStemFilterFactory\"/> </analyzer> </fieldType> FrenchMinimalStemmer Light Stemmer for French. This stemmer implements the following algorithm: A Stemming procedure and stopword list for general French corpora. Jacques Savoy. FrenchStemFilter A TokenFilter that stems french words. The used stemmer can be changed at runtime after the filter object is created (as long as it is a FrenchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FrenchStemmer A stemmer for French words. The algorithm is based on the work of Dr Martin Porter on his snowball project refer to http://snowball.sourceforge.net/french/stemmer.html (French stemming algorithm) for details"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchStemmer.html",
    "title": "Class FrenchStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchStemmer A stemmer for French words. The algorithm is based on the work of Dr Martin Porter on his snowball project refer to http://snowball.sourceforge.net/french/stemmer.html (French stemming algorithm) for details Inheritance System.Object FrenchStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use FrenchStemmer instead, which has the same functionality.\")] public class FrenchStemmer Methods | Improve this Doc View Source Stem(String) Stems the given term to a unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchMinimalStemmer.html",
    "title": "Class FrenchMinimalStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchMinimalStemmer Light Stemmer for French. This stemmer implements the following algorithm: A Stemming procedure and stopword list for general French corpora. Jacques Savoy. Inheritance System.Object FrenchMinimalStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchMinimalStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.html",
    "title": "Namespace Lucene.Net.Analysis.Cjk | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cjk Classes CJKAnalyzer An Analyzer that tokenizes text with StandardTokenizer , normalizes content with CJKWidthFilter , folds case with LowerCaseFilter , forms bigrams of CJK with CJKBigramFilter , and filters stopwords with StopFilter CJKBigramFilter Forms bigrams of CJK terms that are generated from StandardTokenizer or ICUTokenizer. CJK types are set by these tokenizers, but you can also use CJKBigramFilter(TokenStream, CJKScript) to explicitly control which of the CJK scripts are turned into bigrams. By default, when a CJK character has no adjacent characters to form a bigram, it is output in unigram form. If you want to always output both unigrams and bigrams, set the outputUnigrams flag in CJKBigramFilter(TokenStream, CJKScript, Boolean) . This can be used for a combined unigram+bigram approach. In all cases, all non-CJK input is passed thru unmodified. CJKBigramFilterFactory Factory for CJKBigramFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\" han=\"true\" hiragana=\"true\" katakana=\"true\" hangul=\"true\" outputUnigrams=\"false\" /> </analyzer> </fieldType> CJKTokenizer CJKTokenizer is designed for Chinese, Japanese, and Korean languages. The tokens returned are every two adjacent characters with overlap match. Example: \"java C1C2C3C4\" will be segmented to: \"java\" \"C1C2\" \"C2C3\" \"C3C4\". Additionally, the following is applied to Latin text (such as English): Text is converted to lowercase. Numeric digits, '+', '#', and '_' are tokenized as letters. Full-width forms are converted to half-width forms. For more info on Asian language (Chinese, Japanese, and Korean) text segmentation: please search google CJKTokenizerFactory Factory for CJKTokenizer . <fieldType name=\"text_cjk\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.CJKTokenizerFactory\"/> </analyzer> </fieldType> CJKWidthFilter A TokenFilter that normalizes CJK width differences: Folds fullwidth ASCII variants into the equivalent basic latin Folds halfwidth Katakana variants into the equivalent kana NOTE: this filter can be viewed as a (practical) subset of NFKC/NFKD Unicode normalization. See the normalization support in the ICU package for full normalization. CJKWidthFilterFactory Factory for CJKWidthFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\"/> </analyzer> </fieldType> Enums CJKScript"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKScript.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKScript.html",
    "title": "Enum CJKScript | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum CJKScript Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax [Flags] public enum CJKScript Fields Name Description ALL bigram flag for all scripts HAN bigram flag for Han Ideographs HANGUL bigram flag for Hangul HIRAGANA bigram flag for Hiragana KATAKANA bigram flag for Katakana"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDecoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoDecoder.html",
    "title": "Class EliasFanoDecoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EliasFanoDecoder A decoder for an EliasFanoEncoder . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object EliasFanoDecoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoDecoder Constructors | Improve this Doc View Source EliasFanoDecoder(EliasFanoEncoder) Construct a decoder for a given EliasFanoEncoder . The decoding index is set to just before the first encoded value. Declaration public EliasFanoDecoder(EliasFanoEncoder efEncoder) Parameters Type Name Description EliasFanoEncoder efEncoder Fields | Improve this Doc View Source NO_MORE_VALUES Declaration public const long NO_MORE_VALUES = -1L Field Value Type Description System.Int64 Properties | Improve this Doc View Source EliasFanoEncoder Declaration public virtual EliasFanoEncoder EliasFanoEncoder { get; } Property Value Type Description EliasFanoEncoder The Elias-Fano encoder that is decoded. | Improve this Doc View Source NumEncoded The number of values encoded by the encoder. Declaration public virtual long NumEncoded { get; } Property Value Type Description System.Int64 The number of values encoded by the encoder. Methods | Improve this Doc View Source AdvanceToIndex(Int64) Advance the decoding index to a given index . and return true iff it is available. See also CurrentValue() . The current implementation does not use the index on the upper bit zero bit positions. Note: there is currently no implementation of BackToIndex() . Declaration public virtual bool AdvanceToIndex(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source AdvanceToValue(Int64) Given a target value, advance the decoding index to the first bigger or equal value and return it if it is available. Otherwise return NO_MORE_VALUES . The current implementation uses the index on the upper zero bit positions. Declaration public virtual long AdvanceToValue(long target) Parameters Type Name Description System.Int64 target Returns Type Description System.Int64 | Improve this Doc View Source BackToValue(Int64) Given a target value, go back to the first smaller or equal value and return it if it is available. Otherwise return NO_MORE_VALUES . The current implementation does not use the index on the upper zero bit positions. Declaration public virtual long BackToValue(long target) Parameters Type Name Description System.Int64 target Returns Type Description System.Int64 | Improve this Doc View Source CurrentIndex() The current decoding index. The first value encoded by EncodeNext(Int64) has index 0. Only valid directly after NextValue() , AdvanceToValue(Int64) , PreviousValue() , or BackToValue(Int64) returned another value than NO_MORE_VALUES , or AdvanceToIndex(Int64) returned true . Declaration public virtual long CurrentIndex() Returns Type Description System.Int64 The decoding index of the last decoded value, or as last set by AdvanceToIndex(Int64) . | Improve this Doc View Source CurrentValue() The value at the current decoding index. Only valid when CurrentIndex() would return a valid result. This is only intended for use after AdvanceToIndex(Int64) returned true . Declaration public virtual long CurrentValue() Returns Type Description System.Int64 The value encoded at CurrentIndex() . | Improve this Doc View Source NextValue() If another value is available after the current decoding index, return this value and and increase the decoding index by 1. Otherwise return NO_MORE_VALUES . Declaration public virtual long NextValue() Returns Type Description System.Int64 | Improve this Doc View Source PreviousValue() If another value is available before the current decoding index, return this value and decrease the decoding index by 1. Otherwise return NO_MORE_VALUES . Declaration public virtual long PreviousValue() Returns Type Description System.Int64 | Improve this Doc View Source ToAfterSequence() Set the decoding index to just after the last encoded value. Declaration public virtual void ToAfterSequence() | Improve this Doc View Source ToBeforeSequence() Set the decoding index to just before the first encoded value. Declaration public virtual void ToBeforeSequence() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReaderIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReaderIterator.html",
    "title": "Class BlockPackedReaderIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockPackedReaderIterator Reader for sequences of System.Int64 s written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BlockPackedReaderIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedReaderIterator Constructors | Improve this Doc View Source BlockPackedReaderIterator(DataInput, Int32, Int32, Int64) Sole constructor. Declaration public BlockPackedReaderIterator(DataInput in, int packedIntsVersion, int blockSize, long valueCount) Parameters Type Name Description DataInput in System.Int32 packedIntsVersion System.Int32 blockSize The number of values of a block, must be equal to the block size of the BlockPackedWriter which has been used to write the stream. System.Int64 valueCount Properties | Improve this Doc View Source Ord Return the offset of the next value to read. Declaration public long Ord { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Read the next value. Declaration public long Next() Returns Type Description System.Int64 | Improve this Doc View Source Next(Int32) Read between 1 and count values. Declaration public Int64sRef Next(int count) Parameters Type Name Description System.Int32 count Returns Type Description Int64sRef | Improve this Doc View Source Reset(DataInput, Int64) Reset the current reader to wrap a stream of valueCount values contained in in . The block size remains unchanged. Declaration public void Reset(DataInput in, long valueCount) Parameters Type Name Description DataInput in System.Int64 valueCount | Improve this Doc View Source Skip(Int64) Skip exactly count values. Declaration public void Skip(long count) Parameters Type Name Description System.Int64 count Extension Methods Number.IsNumber(Object) See Also BlockPackedWriter"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractBlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractBlockPackedWriter.html",
    "title": "Class AbstractBlockPackedWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractBlockPackedWriter Inheritance System.Object AbstractBlockPackedWriter BlockPackedWriter MonotonicBlockPackedWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractBlockPackedWriter Constructors | Improve this Doc View Source AbstractBlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public AbstractBlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize the number of values of a single block, must be a multiple of 64 . Fields | Improve this Doc View Source m_blocks Declaration protected byte[] m_blocks Field Value Type Description System.Byte [] | Improve this Doc View Source m_finished Declaration protected bool m_finished Field Value Type Description System.Boolean | Improve this Doc View Source m_off Declaration protected int m_off Field Value Type Description System.Int32 | Improve this Doc View Source m_ord Declaration protected long m_ord Field Value Type Description System.Int64 | Improve this Doc View Source m_out Declaration protected DataOutput m_out Field Value Type Description DataOutput | Improve this Doc View Source m_values Declaration protected readonly long[] m_values Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Ord Return the number of values which have been added. Declaration public virtual long Ord { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Add(Int64) Append a new long. Declaration public virtual void Add(long l) Parameters Type Name Description System.Int64 l | Improve this Doc View Source Finish() Flush all buffered data to disk. This instance is not usable anymore after this method has been called until Reset(DataOutput) has been called. Declaration public virtual void Finish() | Improve this Doc View Source Flush() Declaration protected abstract void Flush() | Improve this Doc View Source Reset(DataOutput) Reset this writer to wrap out . The block size remains unchanged. Declaration public virtual void Reset(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source WriteValues(Int32) Declaration protected void WriteValues(int bitsRequired) Parameters Type Name Description System.Int32 bitsRequired Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.Arc-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.Arc-1.html",
    "title": "Class FST.Arc<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FST.Arc<T> Represents a single arc. Inheritance System.Object FST.Arc<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Arc<T> Type Parameters Name Description T Properties | Improve this Doc View Source IsFinal Declaration public virtual bool IsFinal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsLast Declaration public virtual bool IsLast { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Label Declaration public int Label { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NextFinalOutput Declaration public T NextFinalOutput { get; set; } Property Value Type Description T | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T | Improve this Doc View Source Target To node (ord or address) Declaration public long Target { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(FST.Arc<T>) Return this Declaration public FST.Arc<T> CopyFrom(FST.Arc<T> other) Parameters Type Name Description FST.Arc <T> other Returns Type Description FST.Arc <T> | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST-1.html",
    "title": "Class FST<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FST<T> Represents an finite state machine (FST), using a compact byte[] format. The format is similar to what's used by Morfologik ( http://sourceforge.net/projects/morfologik ). See the FST package documentation for some simple examples. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FST<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class FST<T> Type Parameters Name Description T Constructors | Improve this Doc View Source FST(DataInput, Outputs<T>) Load a previously saved FST. Declaration public FST(DataInput in, Outputs<T> outputs) Parameters Type Name Description DataInput in Outputs <T> outputs | Improve this Doc View Source FST(DataInput, Outputs<T>, Int32) Load a previously saved FST; maxBlockBits allows you to control the size of the byte[] pages used to hold the FST bytes. Declaration public FST(DataInput in, Outputs<T> outputs, int maxBlockBits) Parameters Type Name Description DataInput in Outputs <T> outputs System.Int32 maxBlockBits Properties | Improve this Doc View Source ArcCount Declaration public long ArcCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source ArcWithOutputCount Declaration public long ArcWithOutputCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source EmptyOutput Declaration public T EmptyOutput { get; set; } Property Value Type Description T | Improve this Doc View Source InputType Declaration public FST.INPUT_TYPE InputType { get; } Property Value Type Description FST.INPUT_TYPE | Improve this Doc View Source NodeCount Declaration public long NodeCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Outputs Declaration public Outputs<T> Outputs { get; } Property Value Type Description Outputs <T> Methods | Improve this Doc View Source FindTargetArc(Int32, FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Finds an arc leaving the incoming arc , replacing the arc in place. this returns null if the arc was not found, else the incoming arc . Declaration public FST.Arc<T> FindTargetArc(int labelToMatch, FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int32 labelToMatch FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source GetBytesReader() Returns a FST.BytesReader for this FST, positioned at position 0. Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader | Improve this Doc View Source GetFirstArc(FST.Arc<T>) Fills virtual 'start' arc, ie, an empty incoming arc to the FST's start node Declaration public FST.Arc<T> GetFirstArc(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description FST.Arc <T> | Improve this Doc View Source GetSizeInBytes() Returns bytes used to represent the FST Declaration public long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ReadFirstRealTargetArc(Int64, FST.Arc<T>, FST.BytesReader) Declaration public FST.Arc<T> ReadFirstRealTargetArc(long node, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int64 node FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadFirstTargetArc(FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Follow the follow arc and read the first arc of its target; this changes the provided arc (2nd arg) in-place and returns it. Declaration public FST.Arc<T> ReadFirstTargetArc(FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> Returns the second argument ( arc ). | Improve this Doc View Source ReadLastTargetArc(FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Follows the follow arc and reads the last arc of its target; this changes the provided arc (2nd arg) in-place and returns it. Declaration public FST.Arc<T> ReadLastTargetArc(FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> follow FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> Returns the second argument ( arc ). | Improve this Doc View Source ReadNextArc(FST.Arc<T>, FST.BytesReader) In-place read; returns the arc. Declaration public FST.Arc<T> ReadNextArc(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadNextArcLabel(FST.Arc<T>, FST.BytesReader) Peeks at next arc's label; does not alter arc . Do not call this if arc.IsLast! Declaration public int ReadNextArcLabel(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description System.Int32 | Improve this Doc View Source ReadNextRealArc(FST.Arc<T>, FST.BytesReader) Never returns null , but you should never call this if arc.IsLast is true . Declaration public FST.Arc<T> ReadNextRealArc(FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description FST.Arc <T> arc FST.BytesReader in Returns Type Description FST.Arc <T> | Improve this Doc View Source ReadRootArcs(FST.Arc<T>[]) Declaration public void ReadRootArcs(FST.Arc<T>[] arcs) Parameters Type Name Description FST.Arc <T>[] arcs | Improve this Doc View Source Save(DataOutput) Declaration public void Save(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source Save(FileInfo) Writes an automaton to a file. Declaration public void Save(FileInfo file) Parameters Type Name Description System.IO.FileInfo file | Improve this Doc View Source TargetHasArcs(FST.Arc<T>) returns true if the node at this address has any outgoing arcs Declaration public static bool TargetHasArcs(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.html",
    "title": "Class BytesRefFSTEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. BytesRefFSTEnum.InputOutput{T} rather than BytesRefFSTEnum{T}.InputOutput{T}) Inheritance System.Object BytesRefFSTEnum Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class BytesRefFSTEnum Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.InputOutput-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum.InputOutput-1.html",
    "title": "Class BytesRefFSTEnum.InputOutput<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefFSTEnum.InputOutput<T> Holds a single input ( BytesRef ) + output pair. Inheritance System.Object BytesRefFSTEnum.InputOutput<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class InputOutput<T> Type Parameters Name Description T Properties | Improve this Doc View Source Input Declaration public BytesRef Input { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.html",
    "title": "Class Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder LUCENENET specific type used to access nested types of Builder<T> without referring to its generic closing type. Inheritance System.Object Builder Builder <T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class Builder Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.Allocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.Allocator.html",
    "title": "Class ByteBlockPool.Allocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBlockPool.Allocator Abstract class for allocating and freeing byte blocks. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectAllocator ByteBlockPool.DirectTrackingAllocator RecyclingByteBlockAllocator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Allocator Constructors | Improve this Doc View Source Allocator(Int32) Declaration protected Allocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetByteBlock() Declaration public virtual byte[] GetByteBlock() Returns Type Description System.Byte [] | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public abstract void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end | Improve this Doc View Source RecycleByteBlocks(IList<Byte[]>) Declaration public virtual void RecycleByteBlocks(IList<byte[]> blocks) Parameters Type Name Description System.Collections.Generic.IList < System.Byte []> blocks Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BroadWord.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BroadWord.html",
    "title": "Class BroadWord | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BroadWord Methods and constants inspired by the article \"Broadword Implementation of Rank/Select Queries\" by Sebastiano Vigna, January 30, 2012: algorithm 1: Lucene.Net.Util.BroadWord.BitCount(System.Int64) , count of set bits in a System.Int64 algorithm 2: Select(Int64, Int32) , selection of a set bit in a System.Int64 , bytewise signed smaller < 8 operator: SmallerUpTo7_8(Int64, Int64) . shortwise signed smaller < 16 operator: SmallerUpto15_16(Int64, Int64) . some of the Lk and Hk constants that are used by the above: L8 L8_L , H8 H8_L , L9 L9_L , L16 L16_L and H16 H8_L . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BroadWord Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BroadWord Fields | Improve this Doc View Source H16_L Declaration public static readonly long H16_L Field Value Type Description System.Int64 | Improve this Doc View Source H8_L Hk = Lk << (k-1) . These contain the high bit of each group of k bits. The suffix _L indicates the System.Int64 implementation. Declaration public static readonly long H8_L Field Value Type Description System.Int64 | Improve this Doc View Source L16_L Declaration public const long L16_L = 281479271743489L Field Value Type Description System.Int64 | Improve this Doc View Source L8_L Lk denotes the constant whose ones are in position 0, k, 2k, . . . These contain the low bit of each group of k bits. The suffix _L indicates the System.Int64 implementation. Declaration public const long L8_L = 72340172838076673L Field Value Type Description System.Int64 | Improve this Doc View Source L9_L Declaration public const long L9_L = -9205322385119247871L Field Value Type Description System.Int64 Methods | Improve this Doc View Source NotEquals0_8(Int64) An unsigned bytewise not equals 0 operator. This uses the following numbers of basic System.Int64 operations: 2 or, 1 and, 1 minus. Declaration public static long NotEquals0_8(long x) Parameters Type Name Description System.Int64 x Returns Type Description System.Int64 A System.Int64 with bits set in the H8_L positions corresponding to each unsigned byte that does not equal 0. | Improve this Doc View Source Select(Int64, Int32) Select a 1-bit from a System.Int64 . Declaration public static int Select(long x, int r) Parameters Type Name Description System.Int64 x System.Int32 r Returns Type Description System.Int32 The index of the r-th 1 bit in x, or if no such bit exists, 72. | Improve this Doc View Source SelectNaive(Int64, Int32) Naive implementation of Select(Int64, Int32) , using NumberOfLeadingZeros(Int64) repetitively. Works relatively fast for low ranks. Declaration public static int SelectNaive(long x, int r) Parameters Type Name Description System.Int64 x System.Int32 r Returns Type Description System.Int32 The index of the r-th 1 bit in x, or if no such bit exists, 72. | Improve this Doc View Source Smalleru_8(Int64, Int64) An unsigned bytewise smaller < 8 operator. This uses the following numbers of basic System.Int64 operations: 3 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long Smalleru_8(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A System.Int64 with bits set in the H8_L positions corresponding to each input unsigned byte pair that compares smaller. | Improve this Doc View Source SmallerUpto15_16(Int64, Int64) A bytewise smaller < 16 operator. This uses the following numbers of basic System.Int64 operations: 1 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long SmallerUpto15_16(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A System.Int64 with bits set in the H16_L positions corresponding to each input signed short pair that compares smaller. | Improve this Doc View Source SmallerUpTo7_8(Int64, Int64) A signed bytewise smaller < 8 operator, for operands 0L<= x, y <=0x7L. This uses the following numbers of basic System.Int64 operations: 1 or, 2 and, 2 xor, 1 minus, 1 not. Declaration public static long SmallerUpTo7_8(long x, long y) Parameters Type Name Description System.Int64 x System.Int64 y Returns Type Description System.Int64 A System.Int64 with bits set in the H8_L positions corresponding to each input signed byte pair that compares smaller. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BitUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BitUtil.html",
    "title": "Class BitUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BitUtil A variety of high efficiency bit twiddling routines. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BitUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BitUtil Methods | Improve this Doc View Source BitCount(Byte) Return the number of bits sets in b . Declaration public static int BitCount(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Int32 | Improve this Doc View Source BitList(Byte) Return the list of bits which are set in b encoded as followed: (i >>> (4 * n)) & 0x0F is the offset of the n-th set bit of the given byte plus one, or 0 if there are n or less bits set in the given byte. For example bitList(12) returns 0x43: 0x43 & 0x0F is 3, meaning the the first bit set is at offset 3-1 = 2, (0x43 >>> 4) & 0x0F is 4, meaning there is a second bit set at offset 4-1=3, (0x43 >>> 8) & 0x0F is 0, meaning there is no more bit set in this byte. Declaration public static int BitList(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Int32 | Improve this Doc View Source NextHighestPowerOfTwo(Int32) Returns the next highest power of two, or the current value if it's already a power of two or zero Declaration public static int NextHighestPowerOfTwo(int v) Parameters Type Name Description System.Int32 v Returns Type Description System.Int32 | Improve this Doc View Source NextHighestPowerOfTwo(Int64) Returns the next highest power of two, or the current value if it's already a power of two or zero Declaration public static long NextHighestPowerOfTwo(long v) Parameters Type Name Description System.Int64 v Returns Type Description System.Int64 | Improve this Doc View Source Pop_AndNot(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of A & ~B. Neither array is modified. Declaration public static long Pop_AndNot(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Array(Int64[], Int32, Int32) Returns the number of set bits in an array of System.Int64 s. Declaration public static long Pop_Array(long[] arr, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Intersect(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of the two sets after an intersection. Neither array is modified. Declaration public static long Pop_Intersect(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Union(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of the union of two sets. Neither array is modified. Declaration public static long Pop_Union(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 | Improve this Doc View Source Pop_Xor(Int64[], Int64[], Int32, Int32) Returns the popcount or cardinality of A ^ B Neither array is modified. Declaration public static long Pop_Xor(long[] arr1, long[] arr2, int wordOffset, int numWords) Parameters Type Name Description System.Int64 [] arr1 System.Int64 [] arr2 System.Int32 wordOffset System.Int32 numWords Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.html",
    "title": "Class Bits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Bits Inheritance System.Object Bits Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class Bits Fields | Improve this Doc View Source EMPTY_ARRAY Declaration public static readonly IBits[] EMPTY_ARRAY Field Value Type Description IBits []"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.html",
    "title": "Namespace Lucene.Net.Util.Automaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Automaton Classes Automaton Finite-state automaton with regular expression operations. Class invariants: An automaton is either represented explicitly (with State and Transition objects) or with a singleton string (see Singleton and ExpandSingleton() ) in case the automaton is known to accept exactly one string. (Implicitly, all states and transitions of an automaton are reachable from its initial state.) Automata are always reduced (see Reduce() ) and have no transitions to dead states (see RemoveDeadTransitions() ). If an automaton is nondeterministic, then IsDeterministic returns false (but the converse is not required). Automata provided as input to operations are generally assumed to be disjoint. If the states or transitions are manipulated manually, the RestoreInvariant() method and IsDeterministic setter should be used afterwards to restore representation invariants that are assumed by the built-in automata operations. Note: this class has internal mutable state and is not thread safe. It is the caller's responsibility to ensure any necessary synchronization if you wish to use the same Automaton from multiple threads. In general it is instead recommended to use a RunAutomaton for multithreaded matching: it is immutable, thread safe, and much faster. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicAutomata Construction of basic automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicOperations Basic automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteRunAutomaton Automaton representation for matching UTF-8 byte[] . CharacterRunAutomaton Automaton representation for matching char[] . CompiledAutomaton Immutable class holding compiled details for a given Automaton . The Automaton is deterministic, must not have dead states but is not necessarily minimal. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LevenshteinAutomata Class to construct DFAs that match a word within some edit distance. Implements the algorithm described in: Schulz and Mihov: Fast String Correction with Levenshtein Automata This is a Lucene.NET EXPERIMENTAL API, use at your own risk MinimizationOperations Operations for minimizing automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk RegExp Regular Expression extension to Automaton . Regular expressions are built from the following abstract syntax: regexp ::= unionexp | unionexp ::= interexp | unionexp (union) | interexp interexp ::= concatexp & interexp (intersection) [OPTIONAL] | concatexp concatexp ::= repeatexp concatexp (concatenation) | repeatexp repeatexp ::= repeatexp ? (zero or one occurrence) | repeatexp * (zero or more occurrences) | repeatexp + (one or more occurrences) | repeatexp { n } ( n occurrences) | repeatexp { n ,} ( n or more occurrences) | repeatexp { n , m } ( n to m occurrences, including both) | complexp complexp ::= ~ complexp (complement) [OPTIONAL] | charclassexp charclassexp ::= [ charclasses ] (character class) | [^ charclasses ] (negated character class) | simpleexp charclasses ::= charclass charclasses | charclass charclass ::= charexp - charexp (character range, including end-points) | charexp simpleexp ::= charexp | . (any single character) | # (the empty language) [OPTIONAL] | @ (any string) [OPTIONAL] | \" <Unicode string without double-quotes> \" (a string) | ( ) (the empty string) | ( unionexp ) (precedence override) | < <identifier> > (named automaton) [OPTIONAL] | < n - m > (numerical interval) [OPTIONAL] charexp ::=<Unicode character>(a single non-reserved character) | </strong> <Unicode character> (a single character) The productions marked [OPTIONAL] are only allowed if specified by the syntax flags passed to the RegExp constructor. The reserved characters used in the (enabled) syntax must be escaped with backslash ( </code>) or double-quotes ( \"...\" ). (In contrast to other regexp syntaxes, this is required also in character classes.) Be aware that dash ( - ) has a special meaning in charclass expressions. An identifier is a string not containing right angle bracket ( > ) or dash ( - ). Numerical intervals are specified by non-negative decimal integers and include both end points, and if n and m have the same number of digits, then the conforming strings must have that length (i.e. prefixed by 0's). This is a Lucene.NET EXPERIMENTAL API, use at your own risk RunAutomaton Finite-state automaton with fast run operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpecialOperations Special automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk State Automaton state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StatePair Pair of states. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Transition Automaton transition. A transition, which belongs to a source state, consists of a Unicode codepoint interval and a destination state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk UTF32ToUTF8 Converts UTF-32 automata to the equivalent UTF-8 representation. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces IAutomatonProvider Automaton provider for RegExp . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums CompiledAutomaton.AUTOMATON_TYPE Automata are compiled into different internal forms for the most efficient execution depending upon the language they accept. RegExpSyntax"
  },
  "api/Lucene.Net/Lucene.Net.Support.SetExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SetExtensions.html",
    "title": "Class SetExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetExtensions Inheritance System.Object SetExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class SetExtensions Methods | Improve this Doc View Source AddAll<T>(ICollection<T>, IEnumerable<T>) Declaration public static void AddAll<T>(this ICollection<T> set, IEnumerable<T> itemsToAdd) Parameters Type Name Description System.Collections.Generic.ICollection <T> set System.Collections.Generic.IEnumerable <T> itemsToAdd Type Parameters Name Description T | Improve this Doc View Source RemoveAll<T>(ICollection<T>, IEnumerable<T>) Declaration public static void RemoveAll<T>(this ICollection<T> theSet, IEnumerable<T> removeList) Parameters Type Name Description System.Collections.Generic.ICollection <T> theSet System.Collections.Generic.IEnumerable <T> removeList Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.RectangularArrays.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.RectangularArrays.html",
    "title": "Class RectangularArrays | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RectangularArrays Inheritance System.Object RectangularArrays Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class RectangularArrays Methods | Improve this Doc View Source ReturnRectangularArray<T>(Int32, Int32) Declaration public static T[][] ReturnRectangularArray<T>(int size1, int size2) Parameters Type Name Description System.Int32 size1 System.Int32 size2 Returns Type Description T[][] Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.IUpdateValue-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IUpdateValue-2.html",
    "title": "Interface IUpdateValue<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IUpdateValue<TKey, TValue> An interface to provide conditional or custom update logic to a concurrent dictionary. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface IUpdateValue<TKey, TValue> Type Parameters Name Description TKey TValue Methods | Improve this Doc View Source UpdateValue(TKey, ref TValue) Called when the key was found within the dictionary to produce a modified value to update the item to. Return true to continue with the update, or false to prevent the key/value from being updated. Declaration bool UpdateValue(TKey key, ref TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IResourceManagerFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IResourceManagerFactory.html",
    "title": "Interface IResourceManagerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IResourceManagerFactory LUCENENET specific interface used to inject instances of System.Resources.ResourceManager . This extension point can be used to override the default behavior to, for example, retrieve resources from a persistent data store, rather than getting them from resource files. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface IResourceManagerFactory Methods | Improve this Doc View Source Create(Type) Declaration ResourceManager Create(Type resourceSource) Parameters Type Name Description System.Type resourceSource Returns Type Description System.Resources.ResourceManager | Improve this Doc View Source Release(ResourceManager) Declaration void Release(ResourceManager manager) Parameters Type Name Description System.Resources.ResourceManager manager Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IRemoveValue-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IRemoveValue-2.html",
    "title": "Interface IRemoveValue<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRemoveValue<TKey, TValue> An interface to provide conditional removal of an item from a concurrent dictionary. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface IRemoveValue<TKey, TValue> Type Parameters Name Description TKey TValue Remarks Generally implemented as a struct and passed by ref to save stack space and to retrieve the values that where inserted or updated. Methods | Improve this Doc View Source RemoveValue(TKey, TValue) Called when the dictionary is about to remove the key/value pair provided, return true to allow it's removal, or false to prevent it from being removed. Declaration bool RemoveValue(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.html",
    "title": "Namespace Lucene.Net.Support.IO | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support.IO Classes BinaryReaderDataInput BinaryWriterDataOutput Buffer A buffer is a list of elements of a specific primitive type. A buffer can be described by the following properties: Capacity: The number of elements a buffer can hold. Capacity may not be negative and never changes. Position: A cursor of this buffer. Elements are read or written at the position if you do not specify an index explicitly. Position may not be negative and not greater than the limit. Limit: Controls the scope of accessible elements. You can only read or write elements from index zero to limit - 1 . Accessing elements out of the scope will cause an exception. Limit may not be negative and not greater than capacity. Mark: Used to remember the current position, so that you can reset the position later. Mark may not be negative and no greater than position. A buffer can be read-only or read-write. Trying to modify the elements of a read-only buffer will cause a ReadOnlyBufferException , while changing the position, limit and mark of a read-only buffer is OK. A buffer can be direct or indirect. A direct buffer will try its best to take advantage of native memory APIs and it may not stay in the heap, thus it is not affected by garbage collection. Buffers are not thread-safe. If concurrent access to a buffer instance is required, then the callers are responsible to take care of the synchronization issues. BufferOverflowException BufferUnderflowException ByteArrayOutputStream ByteBuffer A buffer for bytes. A byte buffer can be created in either one of the following ways: Allocate(Int32) a new byte array and create a buffer based on it AllocateDirect(Int32) a memory block and create a direct buffer based on it Wrap(Byte[]) an existing byte array to create a new buffer ByteOrder Defines byte order constants. DataInputStream Java's DataInputStream is similar to .NET's BinaryReader. However, it reads using a modified UTF-8 format that cannot be read using BinaryReader. This is a port of DataInputStream that is fully compatible with Java's DataOutputStream. Usage Note: Always favor BinaryReader over DataInputStream unless you specifically need the modified UTF-8 format and/or the ReadUTF() or Lucene.Net.Support.IO.DataInputStream.DecodeUTF(System.Int32) method. DataOutputStream Java's DataOutputStream is similar to .NET's BinaryWriter. However, it writes in a modified UTF-8 format that cannot be read (or duplicated) using BinaryWriter. This is a port of DataOutputStream that is fully compatible with Java's DataInputStream. Usage Note: Always favor BinaryWriter over DataOutputStream unless you specifically need the modified UTF-8 format and/or the WriteUTF(String) method. FileStreamExtensions FileSupport Represents the methods to support some operations over files. Int64Buffer A buffer of longs. A long buffer can be created in either of the following ways: Allocate(Int32) a new long array and create a buffer based on it Wrap(Int64[]) an existing long array to create a new buffer InvalidMarkException ReadOnlyBufferException SafeTextWriterWrapper Decorates a System.IO.TextWriter instance and makes no assumptions about whether System.IDisposable.Dispose() has been called on the inner instance or not. Acts like a circuit breaker - the first System.ObjectDisposedException caught turns it off and the rest of the calls are ignored after that point until Reset() is called. The primary purpose is for using a System.IO.TextWriter instance within a non-disposable parent object. Since the creator of the System.IO.TextWriter ultimately is responsible for disposing it, our non-disposable object has no way of knowing whether it is safe to use the System.IO.TextWriter . Wraping the System.IO.TextWriter within a SafeTextWriterWrapper ensures the non-disposable object can continue to make calls to the System.IO.TextWriter without raising exceptions (it is presumed that the System.IO.TextWriter functionality is optional). StreamExtensions Extension methods that make a System.IO.Stream effectively into a binary serializer with no encoding. We simply convert types into bytes and write them without any concern whether surrogate pairs are respected, similar to what BinaryFormatter does. This makes it possible to serialize/deserialize raw character arrays and get the data back in the same order without any exceptions warning that the order is not valid and without the need for BinaryFormatter. Byte order is little-endian (same as System.IO.BinaryReader and System.IO.BinaryWriter ). StreamTokenizer Parses a stream into a set of defined tokens, one at a time. The different types of tokens that can be found are numbers, identifiers, quoted strings, and different comment styles. The class can be used for limited processing of source code of programming languages like Java, although it is nowhere near a full parser. Interfaces IDataInput Equivalent to Java's DataInput interface IDataOutput Equivalent to Java's DataOutut interface Enums Endianness"
  },
  "api/Lucene.Net/Lucene.Net.Support.ICreateValue-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ICreateValue-2.html",
    "title": "Interface ICreateValue<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICreateValue<TKey, TValue> An interface to provide conditional or custom creation logic to a concurrent dictionary. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface ICreateValue<TKey, TValue> Type Parameters Name Description TKey TValue Methods | Improve this Doc View Source CreateValue(TKey, out TValue) Called when the key was not found within the dictionary to produce a new value that can be added. Return true to continue with the insertion, or false to prevent the key/value from being inserted. Declaration bool CreateValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.Compatibility.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Compatibility.html",
    "title": "Namespace Lucene.Net.Support.Compatibility | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support.Compatibility Classes SetFactory"
  },
  "api/Lucene.Net/Lucene.Net.Support.Compatibility.SetFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Compatibility.SetFactory.html",
    "title": "Class SetFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetFactory Inheritance System.Object SetFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.Compatibility Assembly : Lucene.Net.dll Syntax public static class SetFactory Methods | Improve this Doc View Source CreateHashSet<T>() Declaration public static ISet<T> CreateHashSet<T>() Returns Type Description System.Collections.Generic.ISet <T> Type Parameters Name Description T | Improve this Doc View Source CreateHashSet<T>(IEnumerable<T>) Declaration public static ISet<T> CreateHashSet<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other Returns Type Description System.Collections.Generic.ISet <T> Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemInsertedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemInsertedHandler-1.html",
    "title": "Delegate ItemInsertedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate ItemInsertedHandler<T> The type of event raised after an item has been inserted into a list by an Insert, InsertFirst or InsertLast operation. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an ItemsAdded event will also be fired. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void ItemInsertedHandler<T>(object sender, ItemAtEventArgs<T> eventArgs); Parameters Type Name Description System.Object sender ItemAtEventArgs <T> eventArgs Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.html",
    "title": "Namespace Lucene.Net.Search | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Code to search indices. Table Of Contents Search Basics 2. The Query Classes 3. Scoring: Introduction 4. Scoring: Basics 5. Changing the Scoring 6. Appendix: Search Algorithm Search Basics Lucene offers a wide variety of Query implementations, most of which are in this package, its subpackages ( spans , payloads ), or the queries module . These implementations can be combined in a wide variety of ways to provide complex querying capabilities along with information about where matches took place in the document collection. The Query Classes section below highlights some of the more important Query classes. For details on implementing your own Query class, see Custom Queries -- Expert Level below. To perform a search, applications usually call #search(Query,int) or #search(Query,Filter,int) . Once a Query has been created and submitted to the IndexSearcher , the scoring process begins. After some infrastructure setup, control finally passes to the Weight implementation and its Scorer or BulkScore instances. See the Algorithm section for more notes on the process. <!-- TODO: this page over-links the same things too many times --> Query Classes [TermQuery](xref:Lucene.Net.Search.TermQuery) Of the various implementations of Query , the TermQuery is the easiest to understand and the most often used in applications. A TermQuery matches all the documents that contain the specified Term , which is a word that occurs in a certain Field . Thus, a TermQuery identifies and scores all Document s that have a Field with the specified string in it. Constructing a TermQuery is as simple as: TermQuery tq = new TermQuery(new Term(\"fieldName\", \"term\")); In this example, the Query identifies all Document s that have the Field named \"fieldName\" containing the word \"term\" . [BooleanQuery](xref:Lucene.Net.Search.BooleanQuery) Things start to get interesting when one combines multiple TermQuery instances into a BooleanQuery . A BooleanQuery contains multiple BooleanClause s, where each clause contains a sub-query ( Query instance) and an operator (from BooleanClause.Occur ) describing how that sub-query is combined with the other clauses: 1. SHOULD — Use this operator when a clause can occur in the result set, but is not required. If a query is made up of all SHOULD clauses, then every document in the result set matches at least one of these clauses. 2. MUST — Use this operator when a clause is required to occur in the result set. Every document in the result set will match all such clauses. 3. NOT — Use this operator when a clause must not occur in the result set. No document in the result set will match any such clauses. Boolean queries are constructed by adding two or more BooleanClause instances. If too many clauses are added, a TooManyClauses exception will be thrown during searching. This most often occurs when a Query is rewritten into a BooleanQuery with many TermQuery clauses, for example by WildcardQuery . The default setting for the maximum number of clauses 1024, but this can be changed via the static method #setMaxClauseCount(int) . Phrases Another common search is to find documents containing certain phrases. This is handled three different ways: PhraseQuery — Matches a sequence of Term s. PhraseQuery uses a slop factor to determine how many positions may occur between any two terms in the phrase and still be considered a match. The slop is 0 by default, meaning the phrase must match exactly. MultiPhraseQuery — A more general form of PhraseQuery that accepts multiple Terms for a position in the phrase. For example, this can be used to perform phrase queries that also incorporate synonyms. 3. SpanNearQuery — Matches a sequence of other SpanQuery instances. SpanNearQuery allows for much more complicated phrase queries since it is constructed from other SpanQuery instances, instead of only TermQuery instances. [TermRangeQuery](xref:Lucene.Net.Search.TermRangeQuery) The TermRangeQuery matches all documents that occur in the exclusive range of a lower Term and an upper Term according to TermsEnum.getComparator . It is not intended for numerical ranges; use NumericRangeQuery instead. For example, one could find all documents that have terms beginning with the letters a through c . [NumericRangeQuery](xref:Lucene.Net.Search.NumericRangeQuery) The NumericRangeQuery matches all documents that occur in a numeric range. For NumericRangeQuery to work, you must index the values using a one of the numeric fields ( IntField , LongField , FloatField , or DoubleField ). [PrefixQuery](xref:Lucene.Net.Search.PrefixQuery), [WildcardQuery](xref:Lucene.Net.Search.WildcardQuery), [RegexpQuery](xref:Lucene.Net.Search.RegexpQuery) While the PrefixQuery has a different implementation, it is essentially a special case of the WildcardQuery . The PrefixQuery allows an application to identify all documents with terms that begin with a certain string. The WildcardQuery generalizes this by allowing for the use of (matches 0 or more characters) and ? (matches exactly one character) wildcards. Note that the WildcardQuery can be quite slow. Also note that WildcardQuery should not start with and ? , as these are extremely slow. Some QueryParsers may not allow this by default, but provide a setAllowLeadingWildcard method to remove that protection. The RegexpQuery is even more general than WildcardQuery, allowing an application to identify all documents with terms that match a regular expression pattern. [FuzzyQuery](xref:Lucene.Net.Search.FuzzyQuery) A FuzzyQuery matches documents that contain terms similar to the specified term. Similarity is determined using Levenshtein (edit) distance . This type of query can be useful when accounting for spelling variations in the collection. Scoring — Introduction Lucene scoring is the heart of why we all love Lucene. It is blazingly fast and it hides almost all of the complexity from the user. In a nutshell, it works. At least, that is, until it doesn't work, or doesn't work as one would expect it to work. Then we are left digging into Lucene internals or asking for help on java-user@lucene.apache.org to figure out why a document with five of our query terms scores lower than a different document with only one of the query terms. While this document won't answer your specific scoring issues, it will, hopefully, point you to the places that can help you figure out the what and why of Lucene scoring. Lucene scoring supports a number of pluggable information retrieval models , including: * Vector Space Model (VSM) * Probablistic Models such as Okapi BM25 and DFR * Language models These models can be plugged in via the Similarity API , and offer extension hooks and parameters for tuning. In general, Lucene first finds the documents that need to be scored based on boolean logic in the Query specification, and then ranks this subset of matching documents via the retrieval model. For some valuable references on VSM and IR in general refer to Lucene Wiki IR references . The rest of this document will cover Scoring basics and explain how to change your Similarity . Next, it will cover ways you can customize the lucene internals in Custom Queries -- Expert Level , which gives details on implementing your own Query class and related functionality. Finally, we will finish up with some reference material in the Appendix . Scoring — Basics Scoring is very much dependent on the way documents are indexed, so it is important to understand indexing. (see Lucene overview before continuing on with this section) Be sure to use the useful Doc) to understand how the score for a certain matching document was computed. Generally, the Query determines which documents match (a binary decision), while the Similarity determines how to assign scores to the matching documents. Fields and Documents In Lucene, the objects we are scoring are Document s. A Document is a collection of Field s. Each Field has semantics about how it is created and stored ( Tokenized , Stored , etc). It is important to note that Lucene scoring works on Fields and then combines the results to return Documents. This is important because two Documents with the exact same content, but one having the content in two Fields and the other in one Field may return different scores for the same query due to length normalization. Score Boosting Lucene allows influencing search results by \"boosting\" at different times: * Index-time boost by calling Field.setBoost before a document is added to the index. * Query-time boost by setting a boost on a query clause, calling Query.setBoost . Indexing time boosts are pre-processed for storage efficiency and written to storage for a field as follows: * All boosts of that field (i.e. all boosts under the same field name in that doc) are multiplied. * The boost is then encoded into a normalization value by the Similarity object at index-time: ComputeNorm . The actual encoding depends upon the Similarity implementation, but note that most use a lossy encoding (such as multiplying the boost with document length or similar, packed into a single byte!). * Decoding of any index-time normalization values and integration into the document's score is also performed at search time by the Similarity. Changing Scoring — Similarity Changing Similarity is an easy way to influence scoring, this is done at index-time with IndexWriterConfig.setSimilarity and at query-time with IndexSearcher.setSimilarity . Be sure to use the same Similarity at query-time as at index-time (so that norms are encoded/decoded correctly); Lucene makes no effort to verify this. You can influence scoring by configuring a different built-in Similarity implementation, or by tweaking its parameters, subclassing it to override behavior. Some implementations also offer a modular API which you can extend by plugging in a different component (e.g. term frequency normalizer). Finally, you can extend the low level Similarity directly to implement a new retrieval model, or to use external scoring factors particular to your application. For example, a custom Similarity can access per-document values via FieldCache or NumericDocValues and integrate them into the score. See the Lucene.Net.Search.Similarities package documentation for information on the built-in available scoring models and extending or changing Similarity. Custom Queries — Expert Level Custom queries are an expert level task, so tread carefully and be prepared to share your code if you want help. With the warning out of the way, it is possible to change a lot more than just the Similarity when it comes to matching and scoring in Lucene. Lucene's search is a complex mechanism that is grounded by three main classes : 1. Query — The abstract object representation of the user's information need. 2. Weight — The internal interface representation of the user's Query, so that Query objects may be reused. This is global (across all segments of the index) and generally will require global statistics (such as docFreq for a given term across all segments). 3. Scorer — An abstract class containing common functionality for scoring. Provides both scoring and explanation capabilities. This is created per-segment. 4. BulkScorer — An abstract class that scores a range of documents. A default implementation simply iterates through the hits from Scorer , but some queries such as BooleanQuery have more efficient implementations. Details on each of these classes, and their children, can be found in the subsections below. The Query Class In some sense, the Query class is where it all begins. Without a Query, there would be nothing to score. Furthermore, the Query class is the catalyst for the other scoring classes as it is often responsible for creating them or coordinating the functionality between them. The Query class has several methods that are important for derived classes: 1. Searcher) — A Weight is the internal representation of the Query, so each Query implementation must provide an implementation of Weight. See the subsection on The Weight Interface below for details on implementing the Weight interface. 2. Reader) — Rewrites queries into primitive queries. Primitive queries are: TermQuery , BooleanQuery , and other queries that implement Searcher) The Weight Interface The Weight interface provides an internal representation of the Query so that it can be reused. Any IndexSearcher dependent state should be stored in the Weight implementation, not in the Query class. The interface defines five methods that must be implemented: 1. GetQuery — Pointer to the Query that this Weight represents. 2. GetValueForNormalization — A weight can return a floating point value to indicate its magnitude for query normalization. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#getValueForNormalization . For example, with Lucene's classic vector-space formula , this is implemented as the sum of squared weights: ` 3. [TopLevelBoost)](xref:Lucene.Net.Search.Weight#methods) — Performs query normalization: * topLevelBoost : A query-boost factor from any wrapping queries that should be multiplied into every document's score. For example, a TermQuery that is wrapped within a BooleanQuery with a boost of 5 would receive this value at this time. This allows the TermQuery (the leaf node in this case) to compute this up-front a single time (e.g. by multiplying into the IDF), rather than for every document. * norm`: Passes in a a normalization factor which may allow for comparing scores between queries. Typically a weight such as TermWeight that scores via a Similarity will just defer to the Similarity's implementation: SimWeight#normalize . 4. AcceptDocs) — Construct a new Scorer for this Weight. See The Scorer Class below for help defining a Scorer. As the name implies, the Scorer is responsible for doing the actual scoring of documents given the Query. 5. AcceptDocs) — Construct a new BulkScorer for this Weight. See The BulkScorer Class below for help defining a BulkScorer. This is an optional method, and most queries do not implement it. 6. Doc) — Provide a means for explaining why a given document was scored the way it was. Typically a weight such as TermWeight that scores via a Similarity will make use of the Similarity's implementation: Freq) . The Scorer Class The Scorer abstract class provides common scoring functionality for all Scorer implementations and is the heart of the Lucene scoring process. The Scorer defines the following abstract (some of them are not yet abstract, but will be in future versions and should be considered as such now) methods which must be implemented (some of them inherited from DocIdSetIterator ): 1. NextDoc — Advances to the next document that matches this Query, returning true if and only if there is another document that matches. 2. DocID — Returns the id of the Document that contains the match. 3. Score — Return the score of the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the configured Similarity: Freq) . 4. Freq — Returns the number of matches for the current document. This value can be determined in any appropriate way for an application. For instance, the TermScorer simply defers to the term frequency from the inverted index: DocsEnum.freq . 5. Advance — Skip ahead in the document matches to the document whose id is greater than or equal to the passed in value. In many instances, advance can be implemented more efficiently than simply looping through all the matching documents until the target document is identified. 6. GetChildren — Returns any child subscorers underneath this scorer. This allows for users to navigate the scorer hierarchy and receive more fine-grained details on the scoring process. The BulkScorer Class The BulkScorer scores a range of documents. There is only one abstract method: 1. Score — Score all documents up to but not including the specified max document. Why would I want to add my own Query? In a nutshell, you want to add your own custom Query implementation when you think that Lucene's aren't appropriate for the task that you want to do. You might be doing some cutting edge research or you need more information back out of Lucene (similar to Doug adding SpanQuery functionality). Appendix: Search Algorithm This section is mostly notes on stepping through the Scoring process and serves as fertilizer for the earlier sections. In the typical search application, a Query is passed to the IndexSearcher , beginning the scoring process. Once inside the IndexSearcher, a Collector is used for the scoring and sorting of the search results. These important objects are involved in a search: 1. The Weight object of the Query. The Weight object is an internal representation of the Query that allows the Query to be reused by the IndexSearcher. 2. The IndexSearcher that initiated the call. 3. A Filter for limiting the result set. Note, the Filter may be null. 4. A Sort object for specifying how to sort the results if the standard score-based sort method is not desired. Assuming we are not sorting (since sorting doesn't affect the raw Lucene score), we call one of the search methods of the IndexSearcher, passing in the Weight object created by IndexSearcher.createNormalizedWeight , Filter and the number of results we want. This method returns a TopDocs object, which is an internal collection of search results. The IndexSearcher creates a TopScoreDocCollector and passes it along with the Weight, Filter to another expert search method (for more on the Collector mechanism, see IndexSearcher ). The TopScoreDocCollector uses a PriorityQueue to collect the top results for the search. If a Filter is being used, some initial setup is done to determine which docs to include. Otherwise, we ask the Weight for a Scorer for each IndexReader segment and proceed by calling BulkScorer.score . At last, we are actually going to score some documents. The score method takes in the Collector (most likely the TopScoreDocCollector or TopFieldCollector) and does its business.Of course, here is where things get involved. The Scorer that is returned by the Weight object depends on what type of Query was submitted. In most real world applications with multiple query terms, the Scorer is going to be a BooleanScorer2 created from BooleanWeight (see the section on custom queries for info on changing this). Assuming a BooleanScorer2, we first initialize the Coordinator, which is used to apply the coord() factor. We then get a internal Scorer based on the required, optional and prohibited parts of the query. Using this internal Scorer, the BooleanScorer2 then proceeds into a while loop based on the Scorer.nextDoc method. The nextDoc() method advances to the next document matching the query. This is an abstract method in the Scorer class and is thus overridden by all derived implementations. If you have a simple OR query your internal Scorer is most likely a DisjunctionSumScorer, which essentially combines the scorers from the sub scorers of the OR'd terms. Classes AutomatonQuery A Query that will match terms against a finite-state machine. This query will match documents that contain terms accepted by a given finite-state machine. The automaton can be constructed with the Lucene.Net.Util.Automaton API. Alternatively, it can be created from a regular expression with RegexpQuery or from the standard Lucene wildcard syntax with WildcardQuery . When the query is executed, it will create an equivalent DFA of the finite-state machine, and will enumerate the term dictionary in an intelligent way to reduce the number of comparisons. For example: the regular expression of [dl]og? will make approximately four comparisons: do, dog, lo, and log. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BitsFilteredDocIdSet This implementation supplies a filtered DocIdSet , that excludes all docids which are not in a IBits instance. This is especially useful in Filter to apply the Lucene.Net.Search.BitsFilteredDocIdSet.acceptDocs passed to GetDocIdSet(AtomicReaderContext, IBits) before returning the final DocIdSet . BooleanClause A clause in a BooleanQuery . BooleanQuery A Query that matches documents matching boolean combinations of other queries, e.g. TermQuery s, PhraseQuery s or other BooleanQuery s. Collection initializer note: To create and populate a BooleanQuery in a single statement, you can use the following example as a guide: var booleanQuery = new BooleanQuery() { { new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD }, { new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD } }; // or var booleanQuery = new BooleanQuery() { new BooleanClause(new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD), new BooleanClause(new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD) }; BooleanQuery.BooleanWeight Expert: the Weight for BooleanQuery , used to normalize, score and explain these queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BooleanQuery.TooManyClausesException Thrown when an attempt is made to add more than MaxClauseCount clauses. This typically happens if a PrefixQuery , FuzzyQuery , WildcardQuery , or TermRangeQuery is expanded to many terms during search. BoostAttribute Implementation class for IBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk BulkScorer This class is used to score a range of documents at once, and is returned by GetBulkScorer(AtomicReaderContext, Boolean, IBits) . Only queries that have a more optimized means of scoring across a range of documents need to override this. Otherwise, a default implementation is wrapped around the Scorer returned by GetScorer(AtomicReaderContext, IBits) . CachingCollector Caches all docs, and optionally also scores, coming from a search, and is then able to replay them to another collector. You specify the max RAM this class may use. Once the collection is done, call IsCached . If this returns true , you can use Replay(ICollector) against a new collector. If it returns false , this means too much RAM was required and you must instead re-run the original search. NOTE : this class consumes 4 (or 8 bytes, if scoring is cached) per collected document. If the result set is large this can easily be a very substantial amount of RAM! NOTE : this class caches at least 128 documents before checking RAM limits. See the Lucene modules/grouping module for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CachingWrapperFilter Wraps another Filter 's result and caches it. The purpose is to allow filters to simply filter, and then wrap with this class to add caching. CollectionStatistics Contains statistics for a collection (field) This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollectionTerminatedException Throw this exception in Collect(Int32) to prematurely terminate collection of the current leaf. Note: IndexSearcher swallows this exception and never re-throws it. As a consequence, you should not catch it when calling any overload of Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) as it is unnecessary and might hide misuse of this exception. Collector LUCENENET specific class used to hold the NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) static method. ComplexExplanation Expert: Describes the score computation for document and query, and can distinguish a match independent of a positive value. ConstantScoreAutoRewrite A rewrite method that tries to pick the best constant-score rewrite method based on term and document counts from the query. If both the number of terms and documents is small enough, then CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE is used. Otherwise, CONSTANT_SCORE_FILTER_REWRITE is used. ConstantScoreQuery A query that wraps another query or a filter and simply returns a constant score equal to the query boost for every document that matches the filter or query. For queries it therefore simply strips of all scores and returns a constant one. ConstantScoreQuery.ConstantBulkScorer We return this as our BulkScorer so that if the CSQ wraps a query with its own optimized top-level scorer (e.g. Lucene.Net.Search.BooleanScorer ) we can use that top-level scorer. ConstantScoreQuery.ConstantScorer ConstantScoreQuery.ConstantWeight ControlledRealTimeReopenThread<T> Utility class that runs a thread to manage periodic reopens of a ReferenceManager<G> , with methods to wait for a specific index changes to become visible. To use this class you must first wrap your IndexWriter with a TrackingIndexWriter and always use it to make changes to the index, saving the returned generation. Then, when a given search request needs to see a specific index change, call the WaitForGeneration(Int64) to wait for that change to be visible. Note that this will only scale well if most searches do not need to wait for a specific index generation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DisjunctionMaxQuery A query that generates the union of documents produced by its subqueries, and that scores each document with the maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. This is useful when searching for a word in multiple fields with different boost factors (so that the fields cannot be combined equivalently into a single search field). We want the primary score to be the one associated with the highest boost, not the sum of the field scores (as BooleanQuery would give). If the query is \"albino elephant\" this ensures that \"albino\" matching one field and \"elephant\" matching another gets a higher score than \"albino\" matching both fields. To get this result, use both BooleanQuery and DisjunctionMaxQuery : for each term a DisjunctionMaxQuery searches for it in each field, while the set of these DisjunctionMaxQuery 's is combined into a BooleanQuery . The tie breaker capability allows results that include the same term in multiple fields to be judged better than results that include this term in only the best of those multiple fields, without confusing this with the better case of two different terms in the multiple fields. Collection initializer note: To create and populate a DisjunctionMaxQuery in a single statement, you can use the following example as a guide: var disjunctionMaxQuery = new DisjunctionMaxQuery(0.1f) { new TermQuery(new Term(\"field1\", \"albino\")), new TermQuery(new Term(\"field2\", \"elephant\")) }; DisjunctionMaxQuery.DisjunctionMaxWeight Expert: the Weight for DisjunctionMaxQuery, used to normalize, score and explain these queries. NOTE: this API and implementation is subject to change suddenly in the next release. DocIdSet A DocIdSet contains a set of doc ids. Implementing classes must only implement GetIterator() to provide access to the set. DocIdSetIterator This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to System.Int32.MaxValue in order to be used as a sentinel object. Implementations of this class are expected to consider System.Int32.MaxValue as an invalid value. DocTermOrdsRangeFilter A range filter built on top of a cached multi-valued term field (in IFieldCache ). Like FieldCacheRangeFilter , this is just a specialized range query versus using a TermRangeQuery with DocTermOrdsRewriteMethod : it will only do two ordinal to term lookups. DocTermOrdsRewriteMethod Rewrites MultiTermQuery s into a filter, using DocTermOrds for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Explanation Expert: Describes the score computation for document and query. FieldCache FieldCache.Bytes Field values as 8-bit signed bytes FieldCache.CacheEntry EXPERT: A unique Identifier/Description for each item in the IFieldCache . Can be useful for logging/debugging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldCache.CreationPlaceholder Placeholder indicating creation of this cache is currently in-progress. FieldCache.Doubles Field values as 64-bit doubles FieldCache.Int16s Field values as 16-bit signed shorts NOTE: This was Shorts in Lucene FieldCache.Int32s Field values as 32-bit signed integers NOTE: This was Ints in Lucene FieldCache.Int64s Field values as 64-bit signed long integers NOTE: This was Longs in Lucene FieldCache.Singles Field values as 32-bit floats NOTE: This was Floats in Lucene FieldCacheDocIdSet Base class for DocIdSet to be used with IFieldCache . The implementation of its iterator is very stupid and slow if the implementation of the MatchDoc(Int32) method is not optimized, as iterators simply increment the document id until MatchDoc(Int32) returns true . Because of this MatchDoc(Int32) must be as fast as possible and in no case do any I/O. This is a Lucene.NET INTERNAL API, use at your own risk FieldCacheRangeFilter A range filter built on top of a cached single term field (in IFieldCache ). FieldCacheRangeFilter builds a single cache for the field the first time it is used. Each subsequent FieldCacheRangeFilter on the same field then reuses this cache, even if the range itself changes. this means that FieldCacheRangeFilter is much faster (sometimes more than 100x as fast) as building a TermRangeFilter , if using a NewStringRange(String, String, String, Boolean, Boolean) . However, if the range never changes it is slower (around 2x as slow) than building a CachingWrapperFilter on top of a single TermRangeFilter . For numeric data types, this filter may be significantly faster than NumericRangeFilter . Furthermore, it does not need the numeric values encoded by Int32Field , SingleField , Int64Field or DoubleField . But it has the problem that it only works with exact one value/document (see below). As with all IFieldCache based functionality, FieldCacheRangeFilter is only valid for fields which exact one term for each document (except for NewStringRange(String, String, String, Boolean, Boolean) where 0 terms are also allowed). Due to a restriction of IFieldCache , for numeric ranges all terms that do not have a numeric value, 0 is assumed. Thus it works on dates, prices and other single value fields but will not work on regular text fields. It is preferable to use a NOT_ANALYZED field to ensure that there is only a single term. This class does not have an constructor, use one of the static factory methods available, that create a correct instance for different data types supported by IFieldCache . FieldCacheRangeFilter<T> FieldCacheRewriteMethod Rewrites MultiTermQuery s into a filter, using the IFieldCache for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldCacheTermsFilter A Filter that only accepts documents whose single term value in the specified field is contained in the provided set of allowed terms. This is the same functionality as TermsFilter (from queries/), except this filter requires that the field contains only a single term for all documents. Because of drastically different implementations, they also have different performance characteristics, as described below. The first invocation of this filter on a given field will be slower, since a SortedDocValues must be created. Subsequent invocations using the same field will re-use this cache. However, as with all functionality based on IFieldCache , persistent RAM is consumed to hold the cache, and is not freed until the IndexReader is disposed. In contrast, TermsFilter has no persistent RAM consumption. With each search, this filter translates the specified set of Terms into a private FixedBitSet keyed by term number per unique IndexReader (normally one reader per segment). Then, during matching, the term number for each docID is retrieved from the cache and then checked for inclusion using the FixedBitSet . Since all testing is done using RAM resident data structures, performance should be very fast, most likely fast enough to not require further caching of the DocIdSet for each possible combination of terms. However, because docIDs are simply scanned linearly, an index with a great many small documents may find this linear scan too costly. In contrast, TermsFilter builds up a FixedBitSet , keyed by docID, every time it's created, by enumerating through all matching docs using DocsEnum to seek and scan through each term's docID list. While there is no linear scan of all docIDs, besides the allocation of the underlying array in the FixedBitSet , this approach requires a number of \"disk seeks\" in proportion to the number of terms, which can be exceptionally costly when there are cache misses in the OS's IO cache. Generally, this filter will be slower on the first invocation for a given field, but subsequent invocations, even if you change the allowed set of Terms , should be faster than TermsFilter, especially as the number of Terms being matched increases. If you are matching only a very small number of terms, and those terms in turn match a very small number of documents, TermsFilter may perform faster. Which filter is best is very application dependent. FieldComparer FieldComparer.ByteComparer Parses field's values as System.Byte (using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) and sorts by ascending value FieldComparer.DocComparer Sorts by ascending docID FieldComparer.DoubleComparer Parses field's values as System.Double (using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and sorts by ascending value FieldComparer.Int16Comparer Parses field's values as System.Int16 (using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and sorts by ascending value NOTE: This was ShortComparator in Lucene FieldComparer.Int32Comparer Parses field's values as System.Int32 (using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and sorts by ascending value NOTE: This was IntComparator in Lucene FieldComparer.Int64Comparer Parses field's values as System.Int64 (using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and sorts by ascending value NOTE: This was LongComparator in Lucene FieldComparer.NumericComparer<T> Base FieldComparer class for numeric types FieldComparer.RelevanceComparer Sorts by descending relevance. NOTE: if you are sorting only by descending relevance and then secondarily by ascending docID, performance is faster using TopScoreDocCollector directly (which all overloads of Search(Query, Int32) use when no Sort is specified). FieldComparer.SingleComparer Parses field's values as System.Single (using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and sorts by ascending value NOTE: This was FloatComparator in Lucene FieldComparer.TermOrdValComparer Sorts by field's natural Term sort order, using ordinals. This is functionally equivalent to FieldComparer.TermValComparer , but it first resolves the string to their relative ordinal positions (using the index returned by GetTermsIndex(AtomicReader, String, Single) ), and does most comparisons using the ordinals. For medium to large results, this comparer will be much faster than FieldComparer.TermValComparer . For very small result sets it may be slower. FieldComparer.TermValComparer Sorts by field's natural Term sort order. All comparisons are done using CompareTo(BytesRef) , which is slow for medium to large result sets but possibly very fast for very small results sets. FieldComparer<T> Expert: a FieldComparer compares hits so as to determine their sort order when collecting the top results with TopFieldCollector . The concrete public FieldComparer classes here correspond to the SortField types. This API is designed to achieve high performance sorting, by exposing a tight interaction with FieldValueHitQueue as it visits hits. Whenever a hit is competitive, it's enrolled into a virtual slot, which is an System.Int32 ranging from 0 to numHits-1. The FieldComparer is made aware of segment transitions during searching in case any internal state it's tracking needs to be recomputed during these transitions. A comparer must define these functions: Compare(Int32, Int32) Compare a hit at 'slot a' with hit 'slot b'. SetBottom(Int32) This method is called by FieldValueHitQueue to notify the FieldComparer of the current weakest (\"bottom\") slot. Note that this slot may not hold the weakest value according to your comparer, in cases where your comparer is not the primary one (ie, is only used to break ties from the comparers before it). CompareBottom(Int32) Compare a new hit (docID) against the \"weakest\" (bottom) entry in the queue. SetTopValue(Object) This method is called by TopFieldCollector to notify the FieldComparer of the top most value, which is used by future calls to CompareTop(Int32) . CompareTop(Int32) Compare a new hit (docID) against the top value previously set by a call to SetTopValue(Object) . Copy(Int32, Int32) Installs a new hit into the priority queue. The FieldValueHitQueue calls this method when a new hit is competitive. SetNextReader(AtomicReaderContext) Invoked when the search is switching to the next segment. You may need to update internal state of the comparer, for example retrieving new values from the IFieldCache . Item[Int32] Return the sort value stored in the specified slot. This is only called at the end of the search, in order to populate Fields when returning the top results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldComparerSource Provides a FieldComparer for custom field sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldDoc Expert: A ScoreDoc which also contains information about how to sort the referenced document. In addition to the document number and score, this object contains an array of values for the document from the field(s) used to sort. For example, if the sort criteria was to sort by fields \"a\", \"b\" then \"c\", the fields object array will have three elements, corresponding respectively to the term values for the document in fields \"a\", \"b\" and \"c\". The class of each element in the array will be either System.Int32 , System.Single or System.String depending on the type of values in the terms of each field. Created: Feb 11, 2004 1:23:38 PM @since lucene 1.4 FieldValueFilter A Filter that accepts all documents that have one or more values in a given field. this Filter request IBits from the IFieldCache and build the bits if not present. FieldValueHitQueue FieldValueHitQueue.Entry FieldValueHitQueue<T> Expert: A hit queue for sorting by hits by terms in more than one field. Uses FieldCache.DEFAULT for maintaining internal term lookup tables. @lucene.experimental @since 2.9 Filter Abstract base class for restricting which documents may be returned during searching. FilteredDocIdSet Abstract decorator class for a DocIdSet implementation that provides on-demand filtering/validation mechanism on a given DocIdSet . Technically, this same functionality could be achieved with ChainedFilter (under queries/), however the benefit of this class is it never materializes the full bitset for the filter. Instead, the Match(Int32) method is invoked on-demand, per docID visited during searching. If you know few docIDs will be visited, and the logic behind Match(Int32) is relatively costly, this may be a better way to filter than ChainedFilter. FilteredDocIdSetIterator Abstract decorator class of a DocIdSetIterator implementation that provides on-demand filter/validation mechanism on an underlying DocIdSetIterator . See DocIdSetIterator . FilteredQuery A query that applies a filter to the results of another query. Note: the bits are retrieved from the filter each time this query is used in a search - use a CachingWrapperFilter to avoid regenerating the bits every time. @since 1.4 FilteredQuery.FilterStrategy Abstract class that defines how the filter ( DocIdSet ) applied during document collection. FilteredQuery.RandomAccessFilterStrategy A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy . FuzzyQuery Implements the fuzzy search query. The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false to the transpositions parameter. this query uses MultiTermQuery.TopTermsScoringBooleanQueryRewrite as default. So terms will be collected and scored according to their edit distance. Only the top terms are used for building the BooleanQuery . It is not recommended to change the rewrite mode for fuzzy queries. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances (especially with transpositions enabled), are generally not useful and will match a significant amount of the term dictionary. If you really want this, consider using an n-gram indexing technique (such as the SpellChecker in the suggest module ) instead. NOTE: terms of length 1 or 2 will sometimes not match because of how the scaled distance between two terms is computed. For a term to match, the edit distance between the terms must be less than the minimum length term (either the input term, or the candidate term). For example, FuzzyQuery on term \"abcd\" with maxEdits=2 will not match an indexed term \"ab\", and FuzzyQuery on term \"a\" with maxEdits=2 will not match an indexed term \"abc\". FuzzyTermsEnum Subclass of TermsEnum for enumerating all terms that are similar to the specified filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. FuzzyTermsEnum.LevenshteinAutomataAttribute Stores compiled automata as a list (indexed by edit distance) This is a Lucene.NET INTERNAL API, use at your own risk IndexSearcher Implements search over a single IndexReader . Applications usually need only call the inherited Search(Query, Int32) or Search(Query, Filter, Int32) methods. For performance reasons, if your index is unchanging, you should share a single IndexSearcher instance across multiple searches instead of creating a new one per-search. If your index has changed and you wish to see the changes reflected in searching, you should use OpenIfChanged(DirectoryReader) to obtain a new reader and then create a new IndexSearcher from that. Also, for low-latency turnaround it's best to use a near-real-time reader ( Open(IndexWriter, Boolean) ). Once you have a new IndexReader , it's relatively cheap to create a new IndexSearcher from it. NOTE : IndexSearcher instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexSearcher instance; use your own (non-Lucene) objects instead. IndexSearcher.LeafSlice A class holding a subset of the IndexSearcher s leaf contexts to be executed within a single thread. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LiveFieldValues<S, T> Tracks live field values across NRT reader reopens. This holds a map for all updated ids since the last reader reopen. Once the NRT reader is reopened, it prunes the map. This means you must reopen your NRT reader periodically otherwise the RAM consumption of this class will grow unbounded! NOTE: you must ensure the same id is never updated at the same time by two threads, because in this case you cannot in general know which thread \"won\". MatchAllDocsQuery A query that matches all documents. MaxNonCompetitiveBoostAttribute Implementation class for IMaxNonCompetitiveBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk MultiCollector A ICollector which allows running a search with several ICollector s. It offers a static Wrap(ICollector[]) method which accepts a list of collectors and wraps them with MultiCollector , while filtering out the null ones. MultiPhraseQuery MultiPhraseQuery is a generalized version of PhraseQuery , with an added method Add(Term[]) . To use this class, to search for the phrase \"Microsoft app*\" first use Add(Term) on the term \"Microsoft\", then find all terms that have \"app\" as prefix using MultiFields.GetFields(IndexReader).GetTerms(string) , and use Add(Term[]) to add them to the query. Collection initializer note: To create and populate a MultiPhraseQuery in a single statement, you can use the following example as a guide: var multiPhraseQuery = new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) , Add(Term[]) , or Add(Term[], Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. MultiTermQuery An abstract Query that matches documents containing a subset of terms provided by a FilteredTermsEnum enumeration. This query cannot be used directly; you must subclass it and define GetTermsEnum(Terms, AttributeSource) to provide a FilteredTermsEnum that iterates through the terms to be matched. NOTE : if MultiTermRewriteMethod is either CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE or SCORING_BOOLEAN_QUERY_REWRITE , you may encounter a BooleanQuery.TooManyClausesException exception during searching, which happens when the number of terms to be searched exceeds MaxClauseCount . Setting MultiTermRewriteMethod to CONSTANT_SCORE_FILTER_REWRITE prevents this. The recommended rewrite method is CONSTANT_SCORE_AUTO_REWRITE_DEFAULT : it doesn't spend CPU computing unhelpful scores, and it tries to pick the most performant rewrite method given the query. If you need scoring (like , use MultiTermQuery.TopTermsScoringBooleanQueryRewrite which uses a priority queue to only collect competitive terms and not hit this limitation. Note that QueryParsers.Classic.QueryParser produces MultiTermQuery s using CONSTANT_SCORE_AUTO_REWRITE_DEFAULT by default. MultiTermQuery.RewriteMethod Abstract class that defines how the query is rewritten. MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , but the scores are only computed as the boost. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. MultiTermQuery.TopTermsScoringBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. It is the default rewrite method for FuzzyQuery . MultiTermQueryWrapperFilter<Q> A wrapper for MultiTermQuery , that exposes its functionality as a Filter . MultiTermQueryWrapperFilter<Q> is not designed to be used by itself. Normally you subclass it to provide a Filter counterpart for a MultiTermQuery subclass. For example, TermRangeFilter and PrefixFilter extend MultiTermQueryWrapperFilter<Q> . This class also provides the functionality behind CONSTANT_SCORE_FILTER_REWRITE ; this is why it is not abstract. NGramPhraseQuery This is a PhraseQuery which is optimized for n-gram phrase query. For example, when you query \"ABCD\" on a 2-gram field, you may want to use NGramPhraseQuery rather than PhraseQuery , because NGramPhraseQuery will Rewrite(IndexReader) the query to \"AB/0 CD/2\", while PhraseQuery will query \"AB/0 BC/1 CD/2\" (where term/position). Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new NGramPhraseQuery(2) { new Term(\"field\", \"ABCD\"), new Term(\"field\", \"EFGH\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. NumericRangeFilter LUCENENET specific static class to provide access to static methods without referring to the NumericRangeFilter<T> 's generic closing type. NumericRangeFilter<T> A Filter that only accepts numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). You create a new NumericRangeFilter with the static factory methods, eg: Filter f = NumericRangeFilter.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); Accepts all documents whose float valued \"weight\" field ranges from 0.03 to 0.10, inclusive. See NumericRangeQuery for details on how Lucene indexes and searches numeric valued fields. @since 2.9 NumericRangeQuery LUCENENET specific class to provide access to static factory metods of NumericRangeQuery<T> without referring to its genereic closing type. NumericRangeQuery<T> A Query that matches numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). If your terms are instead textual, you should use TermRangeQuery . NumericRangeFilter is the filter equivalent of this query. You create a new NumericRangeQuery<T> with the static factory methods, eg: Query q = NumericRangeQuery.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); matches all documents whose System.Single valued \"weight\" field ranges from 0.03 to 0.10, inclusive. The performance of NumericRangeQuery<T> is much better than the corresponding TermRangeQuery because the number of terms that must be searched is usually far fewer, thanks to trie indexing, described below. You can optionally specify a Lucene.Net.Search.NumericRangeQuery`1.precisionStep when creating this query. This is necessary if you've changed this configuration from its default (4) during indexing. Lower values consume more disk space but speed up searching. Suitable values are between 1 and 8 . A good starting point to test is 4 , which is the default value for all Numeric* classes. See below for details. This query defaults to CONSTANT_SCORE_AUTO_REWRITE_DEFAULT . With precision steps of <=4, this query can be run with one of the BooleanQuery rewrite methods without changing BooleanQuery 's default max clause count. How it works See the publication about panFMP , where this algorithm was described (referred to as TrieRangeQuery ): Schindler, U, Diepenbroek, M , 2008. Generic XML-based Framework for Metadata Portals. Computers & Geosciences 34 (12), 1947-1955. doi:10.1016/j.cageo.2008.02.023 A quote from this paper: Because Apache Lucene is a full-text search engine and not a conventional database, it cannot handle numerical ranges (e.g., field value is inside user defined bounds, even dates are numerical values). We have developed an extension to Apache Lucene that stores the numerical values in a special string-encoded format with variable precision (all numerical values like System.Double s, System.Int64 s, System.Single s, and System.Int32 s are converted to lexicographic sortable string representations and stored with different precisions (for a more detailed description of how the values are stored, see NumericUtils ). A range is then divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie , while the boundaries are matched more exactly. This reduces the number of terms dramatically. For the variant that stores long values in 8 different precisions (each reduced by 8 bits) that uses a lowest precision of 1 byte, the index contains only a maximum of 256 distinct values in the lowest precision. Overall, a range could consist of a theoretical maximum of 7*255*2 + 255 = 3825 distinct terms (when there is a term for every distinct value of an 8-byte-number in the index and the range covers almost all of them; a maximum of 255 distinct values is used because it would always be possible to reduce the full 256 values to one term with degraded precision). In practice, we have seen up to 300 terms in most cases (index with 500,000 metadata records and a uniform value distribution). Precision Step You can choose any Lucene.Net.Search.NumericRangeQuery`1.precisionStep when encoding values. Lower step values mean more precisions and so more terms in index (and index gets larger). The number of indexed terms per value is (those are generated by NumericTokenStream ): indexedTermsPerValue = ceil ( bitsPerValue / precisionStep ) As the lower precision terms are shared by many values, the additional terms only slightly grow the term dictionary (approx. 7% for precisionStep=4 ), but have a larger impact on the postings (the postings file will have more entries, as every document is linked to indexedTermsPerValue terms instead of one). The formula to estimate the growth of the term dictionary in comparison to one term per value: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> On the other hand, if the Lucene.Net.Search.NumericRangeQuery`1.precisionStep is smaller, the maximum number of terms to match reduces, which optimizes query speed. The formula to calculate the maximum number of terms that will be visited while executing the query is: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> For longs stored using a precision step of 4, maxQueryTerms = 15 15 2 + 15 = 465 , and for a precision step of 2, maxQueryTerms = 31 3 2 + 3 = 189 . But the faster search speed is reduced by more seeking in the term enum of the index. Because of this, the ideal Lucene.Net.Search.NumericRangeQuery`1.precisionStep value can only be found out by testing. Important: You can index with a lower precision step value and test search speed using a multiple of the original step value. Good values for Lucene.Net.Search.NumericRangeQuery`1.precisionStep are depending on usage and data type: The default for all data types is 4 , which is used, when no precisionStep is given. Ideal value in most cases for 64 bit data types (long, double) is 6 or 8 . Ideal value in most cases for 32 bit data types (int, float) is 4 . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue (see below). Steps >=64 for long/double and >=32 for int/float produces one token per value in the index and querying is as slow as a conventional TermRangeQuery . But it can be used to produce fields, that are solely used for sorting (in this case simply use System.Int32.MaxValue as Lucene.Net.Search.NumericRangeQuery`1.precisionStep ). Using Int32Field , Int64Field , SingleField or DoubleField for sorting is ideal, because building the field cache is much faster than with text-only numbers. These fields have one term per value and therefore also work with term enumeration for building distinct lists (e.g. facets / preselected values to search for). Sorting is also possible with range query optimized fields using one of the above Lucene.Net.Search.NumericRangeQuery`1.precisionStep s. Comparisons of the different types of RangeQueries on an index with about 500,000 docs showed that TermRangeQuery in boolean rewrite mode (with raised BooleanQuery clause count) took about 30-40 secs to complete, TermRangeQuery in constant score filter rewrite mode took 5 secs and executing this class took <100ms to complete (on an Opteron64 machine, Java 1.5, 8 bit precision step). This query type was developed for a geographic portal, where the performance for e.g. bounding boxes or exact date/time stamps is important. @since 2.9 PhraseQuery A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by QueryParser for input like \"new york\" . This query may be combined with other terms or queries with a BooleanQuery . Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new PhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. PositiveScoresOnlyCollector A ICollector implementation which wraps another ICollector and makes sure only documents with scores > 0 are collected. PrefixFilter A Filter that restricts search results to values that have a matching prefix in a given field. PrefixQuery A Query that matches documents containing terms with a specified prefix. A PrefixQuery is built by QueryParser for input like app* . This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. PrefixTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified prefix filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Query The abstract base class for queries. Instantiable subclasses are: TermQuery BooleanQuery WildcardQuery PhraseQuery PrefixQuery MultiPhraseQuery FuzzyQuery RegexpQuery TermRangeQuery NumericRangeQuery ConstantScoreQuery DisjunctionMaxQuery MatchAllDocsQuery See also the family of Span Queries ( Lucene.Net.Search.Spans ) and additional queries available in the Queries module QueryRescorer A Rescorer that uses a provided Query to assign scores to the first-pass hits. This is a Lucene.NET EXPERIMENTAL API, use at your own risk QueryWrapperFilter Constrains search results to only match those which also match a provided query. This could be used, for example, with a NumericRangeQuery on a suitably formatted date field to implement date filtering. One could re-use a single CachingWrapperFilter(QueryWrapperFilter) that matches, e.g., only documents modified within the last week. This would only need to be reconstructed once per day. ReferenceContext<T> ReferenceContext<T> holds a reference instance and ensures it is properly de-referenced from its corresponding ReferenceManager<G> when Dispose() is called. This class is primarily intended to be used with a using block. LUCENENET specific ReferenceManager LUCENENET specific class used to provide static access to ReferenceManager.IRefreshListener without having to specifiy the generic closing type of ReferenceManager<G> . ReferenceManager<G> Utility class to safely share instances of a certain type across multiple threads, while periodically refreshing them. This class ensures each reference is closed only once all threads have finished using it. It is recommended to consult the documentation of ReferenceManager<G> implementations for their MaybeRefresh() semantics. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ReferenceManagerExtensions RegexpQuery A fast regular expression query based on the Lucene.Net.Util.Automaton package. Comparisons are fast The term dictionary is enumerated in an intelligent way, to avoid comparisons. See AutomatonQuery for more details. The supported syntax is documented in the RegExp class. Note this might be different than other regular expression implementations. For some alternatives with different syntax, look under the sandbox. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow RegexpQuery s, a RegExp term should not start with the expression .* This is a Lucene.NET EXPERIMENTAL API, use at your own risk Rescorer Re-scores the topN results ( TopDocs ) from an original query. See QueryRescorer for an actual implementation. Typically, you run a low-cost first-pass query across the entire index, collecting the top few hundred hits perhaps, and then use this class to mix in a more costly second pass scoring. See Rescore(IndexSearcher, TopDocs, Query, Double, Int32) for a simple static method to call to rescore using a 2nd pass Query . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ScoreCachingWrappingScorer A Scorer which wraps another scorer and caches the score of the current document. Successive calls to GetScore() will return the same result and will not invoke the wrapped Scorer's GetScore() method, unless the current document has changed. This class might be useful due to the changes done to the ICollector interface, in which the score is not computed for a document by default, only if the collector requests it. Some collectors may need to use the score in several places, however all they have in hand is a Scorer object, and might end up computing the score of a document more than once. ScoreDoc Holds one hit in TopDocs . Scorer Expert: Common scoring functionality for different types of queries. A Scorer iterates over documents matching a query in increasing order of doc Id. Document scores are computed using a given Similarity implementation. NOTE : The values System.Single.NaN , System.Single.NegativeInfinity and System.Single.PositiveInfinity are not valid scores. Certain collectors (eg TopScoreDocCollector ) will not properly collect hits with these scores. Scorer.ChildScorer A child Scorer and its relationship to its parent. The meaning of the relationship depends upon the parent query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ScoringRewrite<Q> Base rewrite method that translates each term into a query, and keeps the scores as computed by the query. @lucene.internal - Only public to be accessible by spans package. SearcherFactory Factory class used by SearcherManager to create new IndexSearcher s. The default implementation just creates an IndexSearcher with no custom behavior: public IndexSearcher NewSearcher(IndexReader r) { return new IndexSearcher(r); } You can pass your own factory instead if you want custom behavior, such as: Setting a custom scoring model: Similarity Parallel per-segment search: IndexSearcher(IndexReader, TaskScheduler) Return custom subclasses of IndexSearcher (for example that implement distributed scoring) Run queries to warm your IndexSearcher before it is used. Note: when using near-realtime search you may want to also set MergedSegmentWarmer to warm newly merged segments in the background, outside of the reopen path. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SearcherLifetimeManager Keeps track of current plus old IndexSearcher s, disposing the old ones once they have timed out. Use it like this: SearcherLifetimeManager mgr = new SearcherLifetimeManager(); Per search-request, if it's a \"new\" search request, then obtain the latest searcher you have (for example, by using SearcherManager ), and then record this searcher: // Record the current searcher, and save the returend // token into user's search results (eg as a hidden // HTML form field): long token = mgr.Record(searcher); When a follow-up search arrives, for example the user clicks next page, drills down/up, etc., take the token that you saved from the previous search and: // If possible, obtain the same searcher as the last // search: IndexSearcher searcher = mgr.Acquire(token); if (searcher != null) { // Searcher is still here try { // do searching... } finally { mgr.Release(searcher); // Do not use searcher after this! searcher = null; } } else { // Searcher was pruned -- notify user session timed // out, or, pull fresh searcher again } Finally, in a separate thread, ideally the same thread that's periodically reopening your searchers, you should periodically prune old searchers: mgr.Prune(new PruneByAge(600.0)); NOTE : keeping many searchers around means you'll use more resources (open files, RAM) than a single searcher. However, as long as you are using OpenIfChanged(DirectoryReader) , the searchers will usually share almost all segments and the added resource usage is contained. When a large merge has completed, and you reopen, because that is a large change, the new searcher will use higher additional RAM than other searchers; but large merges don't complete very often and it's unlikely you'll hit two of them in your expiration window. Still you should budget plenty of heap in the runtime to have a good safety margin. SearcherLifetimeManager.PruneByAge Simple pruner that drops any searcher older by more than the specified seconds, than the newest searcher. SearcherManager Utility class to safely share IndexSearcher instances across multiple threads, while periodically reopening. This class ensures each searcher is disposed only once all threads have finished using it. Use Acquire() to obtain the current searcher, and Release(G) to release it, like this: IndexSearcher s = manager.Acquire(); try { // Do searching, doc retrieval, etc. with s } finally { manager.Release(s); // Do not use s after this! s = null; } In addition you should periodically call MaybeRefresh() . While it's possible to call this just before running each query, this is discouraged since it penalizes the unlucky queries that do the reopen. It's better to use a separate background thread, that periodically calls MaybeRefresh() . Finally, be sure to call Dispose() once you are done. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Sort Encapsulates sort criteria for returned hits. The fields used to determine sort order must be carefully chosen. Document s must contain a single term in such a field, and the value of the term should indicate the document's relative position in a given sort order. The field must be indexed, but should not be tokenized, and does not need to be stored (unless you happen to want it back with the rest of your document data). In other words: document.Add(new Field(\"byNumber\", x.ToString(CultureInfo.InvariantCulture), Field.Store.NO, Field.Index.NOT_ANALYZED)); Valid Types of Values There are four possible kinds of term values which may be put into sorting fields: System.Int32 s, System.Int64 s, System.Single s, or System.String s. Unless SortField objects are specified, the type of value in the field is determined by parsing the first term in the field. System.Int32 term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range System.Int32.MinValue and System.Int32.MaxValue inclusive. Documents which should appear first in the sort should have low value integers, later documents high values (i.e. the documents should be numbered 1..n where 1 is the first and n the last). System.Int64 term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range System.Int64.MinValue and System.Int64.MaxValue inclusive. Documents which should appear first in the sort should have low value integers, later documents high values. System.Single term values should conform to values accepted by System.Single (except that NaN and Infinity are not supported). Document s which should appear first in the sort should have low values, later documents high values. System.String term values can contain any valid System.String , but should not be tokenized. The values are sorted according to their comparable natural order ( System.StringComparer.Ordinal ). Note that using this type of term value has higher memory requirements than the other two types. Object Reuse One of these objects can be used multiple times and the sort order changed between usages. This class is thread safe. Memory Usage Sorting uses of caches of term values maintained by the internal HitQueue(s). The cache is static and contains an System.Int32 or System.Single array of length IndexReader.MaxDoc for each field name for which a sort is performed. In other words, the size of the cache in bytes is: 4 * IndexReader.MaxDoc * (# of different fields actually used to sort) For System.String fields, the cache is larger: in addition to the above array, the value of every term in the field is kept in memory. If there are many unique terms in the field, this could be quite large. Note that the size of the cache is not affected by how many fields are in the index and might be used to sort - only by the ones actually used to sort a result set. Created: Feb 12, 2004 10:53:57 AM @since lucene 1.4 SortField Stores information about how to sort documents by terms in an individual field. Fields must be indexed in order to sort by them. Created: Feb 11, 2004 1:25:29 PM @since lucene 1.4 SortRescorer A Rescorer that re-sorts according to a provided Sort. TermCollectingRewrite<Q> TermQuery A Query that matches documents containing a term. this may be combined with other terms with a BooleanQuery . TermRangeFilter A Filter that restricts search results to a range of term values in a given field. This filter matches the documents looking for terms that fall into the supplied range according to System.Byte.CompareTo(System.Byte) , It is not intended for numerical ranges; use NumericRangeFilter instead. If you construct a large number of range filters with different ranges but on the same field, FieldCacheRangeFilter may have significantly better performance. @since 2.9 TermRangeQuery A Query that matches documents within an range of terms. This query matches the documents looking for terms that fall into the supplied range according to System.Byte.CompareTo(System.Byte) . It is not intended for numerical ranges; use NumericRangeQuery instead. This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. @since 2.9 TermRangeTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified range parameters. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. TermStatistics Contains statistics for a specific term This is a Lucene.NET EXPERIMENTAL API, use at your own risk TimeLimitingCollector The TimeLimitingCollector is used to timeout search requests that take longer than the maximum allowed search time limit. After this time is exceeded, the search thread is stopped by throwing a TimeLimitingCollector.TimeExceededException . TimeLimitingCollector.TimeExceededException Thrown when elapsed search time exceeds allowed search time. TimeLimitingCollector.TimerThread Thread used to timeout search requests. Can be stopped completely with StopTimer() This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopDocs Represents hits returned by Search(Query, Filter, Int32) and Search(Query, Int32) . TopDocsCollector<T> A base class for all collectors that return a TopDocs output. This collector allows easy extension by providing a single constructor which accepts a PriorityQueue<T> as well as protected members for that priority queue and a counter of the number of total hits. Extending classes can override any of the methods to provide their own implementation, as well as avoid the use of the priority queue entirely by passing null to TopDocsCollector(PriorityQueue<T>) . In that case however, you might want to consider overriding all methods, in order to avoid a System.NullReferenceException . TopFieldCollector A ICollector that sorts by SortField using FieldComparer s. See the Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) method for instantiating a TopFieldCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopFieldDocs Represents hits returned by Search(Query, Filter, Int32, Sort) . TopScoreDocCollector A ICollector implementation that collects the top-scoring hits, returning them as a TopDocs . this is used by IndexSearcher to implement TopDocs -based search. Hits are sorted by score descending and then (when the scores are tied) docID ascending. When you create an instance of this collector you should know in advance whether documents are going to be collected in doc Id order or not. NOTE : The values System.Single.NaN and System.Single.NegativeInfinity are not valid scores. This collector will not properly collect hits with such scores. TopTermsRewrite<Q> Base rewrite method for collecting only the top terms via a priority queue. @lucene.internal - Only public to be accessible by spans package. TotalHitCountCollector Just counts the total number of hits. Weight Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching does not modify a Query , so that a Query instance can be reused. IndexSearcher dependent state of the query should reside in the Weight . AtomicReader dependent state should reside in the Scorer . Since Weight creates Scorer instances for a given AtomicReaderContext ( GetScorer(AtomicReaderContext, IBits) ) callers must maintain the relationship between the searcher's top-level IndexReaderContext and the context used to create a Scorer . A Weight is used in the following way: A Weight is constructed by a top-level query, given a IndexSearcher ( CreateWeight(IndexSearcher) ). The GetValueForNormalization() method is called on the Weight to compute the query normalization factor QueryNorm(Single) of the query clauses contained in the query. The query normalization factor is passed to Normalize(Single, Single) . At this point the weighting is complete. A Scorer is constructed by GetScorer(AtomicReaderContext, IBits) . @since 2.9 WildcardQuery Implements the wildcard search query. Supported wildcards are , which matches any character sequence (including the empty one), and ? , which matches any single character. '&apos; is the escape character. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow WildcardQueries, a Wildcard term should not start with the wildcard This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Interfaces FieldCache.IByteParser Interface to parse bytes from document fields. FieldCache.IDoubleParser Interface to parse System.Double s from document fields. FieldCache.IInt16Parser Interface to parse System.Int16 s from document fields. NOTE: This was ShortParser in Lucene FieldCache.IInt32Parser Interface to parse System.Int32 s from document fields. NOTE: This was IntParser in Lucene FieldCache.IInt64Parser Interface to parse System.Int64 from document fields. NOTE: This was LongParser in Lucene FieldCache.IParser Marker interface as super-interface to all parsers. It is used to specify a custom parser to SortField(String, FieldCache.IParser) . FieldCache.ISingleParser Interface to parse System.Single s from document fields. NOTE: This was FloatParser in Lucene FuzzyTermsEnum.ILevenshteinAutomataAttribute Reuses compiled automata across different segments, because they are independent of the index This is a Lucene.NET INTERNAL API, use at your own risk IBoostAttribute Add this IAttribute to a TermsEnum returned by GetTermsEnum(Terms, AttributeSource) and update the boost on each returned term. This enables to control the boost factor for each matching term in SCORING_BOOLEAN_QUERY_REWRITE or TopTermsRewrite<Q> mode. FuzzyQuery is using this to take the edit distance into account. Please note: this attribute is intended to be added only by the TermsEnum to itself in its constructor and consumed by the MultiTermQuery.RewriteMethod . This is a Lucene.NET INTERNAL API, use at your own risk ICollector Expert: Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc. Lucene's core collectors are derived from Collector. Likely your application can use one of these classes, or subclass TopDocsCollector<T> , instead of implementing ICollector directly: TopDocsCollector<T> is an abstract base class that assumes you will retrieve the top N docs, according to some criteria, after collection is done. TopScoreDocCollector is a concrete subclass TopDocsCollector<T> and sorts according to score + docID. This is used internally by the IndexSearcher search methods that do not take an explicit Sort . It is likely the most frequently used collector. TopFieldCollector subclasses TopDocsCollector<T> and sorts according to a specified Sort object (sort by field). This is used internally by the IndexSearcher search methods that take an explicit Sort . TimeLimitingCollector , which wraps any other Collector and aborts the search if it's taken too much time. PositiveScoresOnlyCollector wraps any other ICollector and prevents collection of hits whose score is <= 0.0 ICollector decouples the score from the collected doc: the score computation is skipped entirely if it's not needed. Collectors that do need the score should implement the SetScorer(Scorer) method, to hold onto the passed Scorer instance, and call GetScore() within the collect method to compute the current hit's score. If your collector may request the score for a single hit multiple times, you should use ScoreCachingWrappingScorer . NOTE: The doc that is passed to the collect method is relative to the current reader. If your collector needs to resolve this to the docID space of the Multi*Reader, you must re-base it by recording the docBase from the most recent SetNextReader(AtomicReaderContext) call. Here's a simple example showing how to collect docIDs into an OpenBitSet : private class MySearchCollector : ICollector { private readonly OpenBitSet bits; private int docBase; public MySearchCollector(OpenBitSet bits) { if (bits == null) throw new ArgumentNullException(\"bits\"); this.bits = bits; } // ignore scorer public void SetScorer(Scorer scorer) { } // accept docs out of order (for a BitSet it doesn't matter) public bool AcceptDocsOutOfOrder { get { return true; } } public void Collect(int doc) { bits.Set(doc + docBase); } public void SetNextReader(AtomicReaderContext context) { this.docBase = context.DocBase; } } IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); searcher.Search(query, new MySearchCollector(bits)); Not all collectors will need to rebase the docID. For example, a collector that simply counts the total number of hits would skip it. NOTE: Prior to 2.9, Lucene silently filtered out hits with score <= 0. As of 2.9, the core ICollector s no longer do that. It's very unusual to have such hits (a negative query boost, or function query returning negative custom scores, could cause it to happen). If you need that behavior, use PositiveScoresOnlyCollector . @lucene.experimental @since 2.9 IFieldCache Expert: Maintains caches of term values. Created: May 19, 2004 11:13:14 AM @lucene.internal @since lucene 1.4 IMaxNonCompetitiveBoostAttribute Add this IAttribute to a fresh AttributeSource before calling GetTermsEnum(Terms, AttributeSource) . FuzzyQuery is using this to control its internal behaviour to only return competitive terms. Please note: this attribute is intended to be added by the MultiTermQuery.RewriteMethod to an empty AttributeSource that is shared for all segments during query rewrite. This attribute source is passed to all segment enums on GetTermsEnum(Terms, AttributeSource) . TopTermsRewrite<Q> uses this attribute to inform all enums about the current boost, that is not competitive. This is a Lucene.NET INTERNAL API, use at your own risk ITopDocsCollector LUCENENET specific interface used to reference TopDocsCollector<T> without referencing its generic type. ReferenceManager.IRefreshListener Use to receive notification when a refresh has finished. See AddListener(ReferenceManager.IRefreshListener) . SearcherLifetimeManager.IPruner See Prune(SearcherLifetimeManager.IPruner) . Enums Occur Specifies how clauses are to occur in matching documents. SortFieldType Specifies the type of the terms to be sorted, or special types such as CUSTOM"
  },
  "api/Lucene.Net/Lucene.Net.Search.Scorer.ChildScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Scorer.ChildScorer.html",
    "title": "Class Scorer.ChildScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Scorer.ChildScorer A child Scorer and its relationship to its parent. The meaning of the relationship depends upon the parent query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Scorer.ChildScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ChildScorer Constructors | Improve this Doc View Source ChildScorer(Scorer, String) Creates a new Scorer.ChildScorer node with the specified relationship. The relationship can be any be any string that makes sense to the parent Scorer . Declaration public ChildScorer(Scorer child, string relationship) Parameters Type Name Description Scorer child System.String relationship Properties | Improve this Doc View Source Child Child Scorer . (note this is typically a direct child, and may itself also have children). Declaration public Scorer Child { get; } Property Value Type Description Scorer | Improve this Doc View Source Relationship An arbitrary string relating this scorer to the parent. Declaration public string Relationship { get; } Property Value Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoreDoc.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoreDoc.html",
    "title": "Class ScoreDoc | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoreDoc Holds one hit in TopDocs . Inheritance System.Object ScoreDoc FieldDoc FieldValueHitQueue.Entry Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ScoreDoc Constructors | Improve this Doc View Source ScoreDoc(Int32, Single) Constructs a ScoreDoc . Declaration public ScoreDoc(int doc, float score) Parameters Type Name Description System.Int32 doc System.Single score | Improve this Doc View Source ScoreDoc(Int32, Single, Int32) Constructs a ScoreDoc . Declaration public ScoreDoc(int doc, float score, int shardIndex) Parameters Type Name Description System.Int32 doc System.Single score System.Int32 shardIndex Properties | Improve this Doc View Source Doc A hit document's number. Declaration public int Doc { get; set; } Property Value Type Description System.Int32 See Also Doc(Int32) | Improve this Doc View Source Score The score of this document for the query. Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source ShardIndex Only set by Merge(Sort, Int32, Int32, TopDocs[]) Declaration public int ShardIndex { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() A convenience method for debugging. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.html",
    "title": "Namespace Lucene.Net.Search.Payloads | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Payloads <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The payloads package provides Query mechanisms for finding and using payloads. The following Query implementations are provided: 1. PayloadTermQuery -- Boost a term's score based on the value of the payload located at that term. 2. PayloadNearQuery -- A SpanNearQuery that factors in the value of the payloads located at each of the positions where the spans occur. Classes AveragePayloadFunction Calculate the final score as the average score of all payloads seen. Is thread safe and completely reusable. MaxPayloadFunction Returns the maximum payload score seen, else 1 if there are no payloads on the doc. Is thread safe and completely reusable. MinPayloadFunction Calculates the minimum payload seen PayloadFunction An abstract class that defines a way for Payload*Query instances to transform the cumulative effects of payload scores for a document. @lucene.experimental this class and its derivations are experimental and subject to change PayloadNearQuery This class is very similar to SpanNearQuery except that it factors in the value of the payloads located at each of the positions where the TermSpans occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . PayloadNearQuery.PayloadNearSpanScorer PayloadNearQuery.PayloadNearSpanWeight PayloadSpanUtil Experimental class to get set of payloads for most standard Lucene queries. Operates like Highlighter - IndexReader should only contain doc of interest, best to use MemoryIndex. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PayloadTermQuery This class is very similar to SpanTermQuery except that it factors in the value of the payload located at each of the positions where the Term occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . PayloadTermQuery.PayloadTermWeight PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCacheRangeFilter.html",
    "title": "Class FieldCacheRangeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheRangeFilter A range filter built on top of a cached single term field (in IFieldCache ). FieldCacheRangeFilter builds a single cache for the field the first time it is used. Each subsequent FieldCacheRangeFilter on the same field then reuses this cache, even if the range itself changes. this means that FieldCacheRangeFilter is much faster (sometimes more than 100x as fast) as building a TermRangeFilter , if using a NewStringRange(String, String, String, Boolean, Boolean) . However, if the range never changes it is slower (around 2x as slow) than building a CachingWrapperFilter on top of a single TermRangeFilter . For numeric data types, this filter may be significantly faster than NumericRangeFilter . Furthermore, it does not need the numeric values encoded by Int32Field , SingleField , Int64Field or DoubleField . But it has the problem that it only works with exact one value/document (see below). As with all IFieldCache based functionality, FieldCacheRangeFilter is only valid for fields which exact one term for each document (except for NewStringRange(String, String, String, Boolean, Boolean) where 0 terms are also allowed). Due to a restriction of IFieldCache , for numeric ranges all terms that do not have a numeric value, 0 is assumed. Thus it works on dates, prices and other single value fields but will not work on regular text fields. It is preferable to use a NOT_ANALYZED field to ensure that there is only a single term. This class does not have an constructor, use one of the static factory methods available, that create a correct instance for different data types supported by IFieldCache . Inheritance System.Object FieldCacheRangeFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldCacheRangeFilter Methods | Improve this Doc View Source NewByteRange(String, FieldCache.IByteParser, Nullable<SByte>, Nullable<SByte>, Boolean, Boolean) Creates a numeric range filter using GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) . This works with all System.Byte fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration [Obsolete] [CLSCompliant(false)] public static FieldCacheRangeFilter<sbyte?> NewByteRange(string field, FieldCache.IByteParser parser, sbyte? lowerVal, sbyte? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IByteParser parser System.Nullable < System.SByte > lowerVal System.Nullable < System.SByte > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.SByte >> | Improve this Doc View Source NewByteRange(String, Nullable<SByte>, Nullable<SByte>, Boolean, Boolean) Creates a numeric range filter using GetBytes(AtomicReader, String, Boolean) . This works with all System.Byte fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration [Obsolete] [CLSCompliant(false)] public static FieldCacheRangeFilter<sbyte?> NewByteRange(string field, sbyte? lowerVal, sbyte? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.SByte > lowerVal System.Nullable < System.SByte > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.SByte >> | Improve this Doc View Source NewBytesRefRange(String, BytesRef, BytesRef, Boolean, Boolean) Creates a BytesRef range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<BytesRef> NewBytesRefRange(string field, BytesRef lowerVal, BytesRef upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field BytesRef lowerVal BytesRef upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < BytesRef > | Improve this Doc View Source NewDoubleRange(String, FieldCache.IDoubleParser, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Creates a numeric range filter using GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) . This works with all System.Double fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<double?> NewDoubleRange(string field, FieldCache.IDoubleParser parser, double? lowerVal, double? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IDoubleParser parser System.Nullable < System.Double > lowerVal System.Nullable < System.Double > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Double >> | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Creates a numeric range filter using GetDoubles(AtomicReader, String, Boolean) . This works with all System.Double fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<double?> NewDoubleRange(string field, double? lowerVal, double? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Double > lowerVal System.Nullable < System.Double > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Double >> | Improve this Doc View Source NewInt16Range(String, FieldCache.IInt16Parser, Nullable<Int16>, Nullable<Int16>, Boolean, Boolean) Creates a numeric range filter using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) . This works with all System.Int16 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newShortRange() in Lucene Declaration [Obsolete] public static FieldCacheRangeFilter<short?> NewInt16Range(string field, FieldCache.IInt16Parser parser, short? lowerVal, short? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt16Parser parser System.Nullable < System.Int16 > lowerVal System.Nullable < System.Int16 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int16 >> | Improve this Doc View Source NewInt16Range(String, Nullable<Int16>, Nullable<Int16>, Boolean, Boolean) Creates a numeric range filter using GetInt16s(AtomicReader, String, Boolean) . This works with all System.Int16 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newShortRange() in Lucene Declaration [Obsolete] public static FieldCacheRangeFilter<short?> NewInt16Range(string field, short? lowerVal, short? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int16 > lowerVal System.Nullable < System.Int16 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int16 >> | Improve this Doc View Source NewInt32Range(String, FieldCache.IInt32Parser, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Creates a numeric range filter using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) . This works with all System.Int32 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newIntRange() in Lucene Declaration public static FieldCacheRangeFilter<int?> NewInt32Range(string field, FieldCache.IInt32Parser parser, int? lowerVal, int? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser System.Nullable < System.Int32 > lowerVal System.Nullable < System.Int32 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int32 >> | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Creates a numeric range filter using GetInt32s(AtomicReader, String, Boolean) . This works with all System.Int32 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newIntRange() in Lucene Declaration public static FieldCacheRangeFilter<int?> NewInt32Range(string field, int? lowerVal, int? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int32 > lowerVal System.Nullable < System.Int32 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int32 >> | Improve this Doc View Source NewInt64Range(String, FieldCache.IInt64Parser, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Creates a numeric range filter using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) . This works with all System.Int64 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newLongRange() in Lucene Declaration public static FieldCacheRangeFilter<long?> NewInt64Range(string field, FieldCache.IInt64Parser parser, long? lowerVal, long? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.IInt64Parser parser System.Nullable < System.Int64 > lowerVal System.Nullable < System.Int64 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int64 >> | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Creates a numeric range filter using GetInt64s(AtomicReader, String, Boolean) . This works with all System.Int64 fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<long?> NewInt64Range(string field, long? lowerVal, long? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Int64 > lowerVal System.Nullable < System.Int64 > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Int64 >> | Improve this Doc View Source NewSingleRange(String, FieldCache.ISingleParser, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Creates a numeric range filter using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) . This works with all System.Single fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newFloatRange() in Lucene Declaration public static FieldCacheRangeFilter<float?> NewSingleRange(string field, FieldCache.ISingleParser parser, float? lowerVal, float? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field FieldCache.ISingleParser parser System.Nullable < System.Single > lowerVal System.Nullable < System.Single > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Single >> | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Creates a numeric range filter using GetSingles(AtomicReader, String, Boolean) . This works with all System.Single fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null . NOTE: this was newFloatRange() in Lucene Declaration public static FieldCacheRangeFilter<float?> NewSingleRange(string field, float? lowerVal, float? upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.Nullable < System.Single > lowerVal System.Nullable < System.Single > upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.Nullable < System.Single >> | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Creates a string range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static FieldCacheRangeFilter<string> NewStringRange(string field, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description FieldCacheRangeFilter < System.String >"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFileNames.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFileNames.html",
    "title": "Class IndexFileNames | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexFileNames This class contains useful constants representing filenames and extensions used by lucene, as well as convenience methods for querying whether a file name matches an extension ( MatchesExtension(String, String) ), as well as generating file names from a segment name, generation and extension ( FileNameFromGeneration(String, String, Int64) , SegmentFileName(String, String, String) ). NOTE : extensions used by codecs are not listed here. You must interact with the Codec directly. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IndexFileNames Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexFileNames Fields | Improve this Doc View Source CODEC_FILE_PATTERN All files created by codecs much match this pattern (checked in SegmentInfo ). Declaration public static readonly Regex CODEC_FILE_PATTERN Field Value Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source COMPOUND_FILE_ENTRIES_EXTENSION Extension of compound file entries Declaration public static readonly string COMPOUND_FILE_ENTRIES_EXTENSION Field Value Type Description System.String | Improve this Doc View Source COMPOUND_FILE_EXTENSION Extension of compound file Declaration public static readonly string COMPOUND_FILE_EXTENSION Field Value Type Description System.String | Improve this Doc View Source GEN_EXTENSION Extension of gen file Declaration public static readonly string GEN_EXTENSION Field Value Type Description System.String | Improve this Doc View Source INDEX_EXTENSIONS This array contains all filename extensions used by Lucene's index files, with one exception, namely the extension made up from .s + a number. Also note that Lucene's segments_N files do not have any filename extension. Declaration public static readonly string[] INDEX_EXTENSIONS Field Value Type Description System.String [] | Improve this Doc View Source SEGMENTS Name of the index segment file Declaration public static readonly string SEGMENTS Field Value Type Description System.String | Improve this Doc View Source SEGMENTS_GEN Name of the generation reference file name Declaration public static readonly string SEGMENTS_GEN Field Value Type Description System.String Methods | Improve this Doc View Source FileNameFromGeneration(String, String, Int64) Computes the full file name from base, extension and generation. If the generation is -1, the file name is null . If it's 0, the file name is <base>.<ext>. If it's > 0, the file name is <base>_<gen>.<ext>. NOTE: .<ext> is added to the name only if ext is not an empty string. Declaration public static string FileNameFromGeneration(string base, string ext, long gen) Parameters Type Name Description System.String base main part of the file name System.String ext extension of the filename System.Int64 gen generation Returns Type Description System.String | Improve this Doc View Source GetExtension(String) Return the extension (anything after the first '.'), or null if there is no '.' in the file name. Declaration public static string GetExtension(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String | Improve this Doc View Source MatchesExtension(String, String) Returns true if the given filename ends with the given extension. One should provide a pure extension, without '.'. Declaration public static bool MatchesExtension(string filename, string ext) Parameters Type Name Description System.String filename System.String ext Returns Type Description System.Boolean | Improve this Doc View Source ParseSegmentName(String) Parses the segment name out of the given file name. Declaration public static string ParseSegmentName(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String the segment name only, or filename if it does not contain a '.' and '_'. | Improve this Doc View Source SegmentFileName(String, String, String) Returns a file name that includes the given segment name, your own custom name and extension. The format of the filename is: <segmentName>(_<name>)(.<ext>). NOTE: .<ext> is added to the result file name only if ext is not empty. NOTE: _<segmentSuffix> is added to the result file name only if it's not the empty string NOTE: all custom files should be named using this method, or otherwise some structures may fail to handle them properly (such as if they are added to compound files). Declaration public static string SegmentFileName(string segmentName, string segmentSuffix, string ext) Parameters Type Name Description System.String segmentName System.String segmentSuffix System.String ext Returns Type Description System.String | Improve this Doc View Source StripExtension(String) Removes the extension (anything after the first '.'), otherwise returns the original filename. Declaration public static string StripExtension(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String | Improve this Doc View Source StripSegmentName(String) Strips the segment name out of the given file name. If you used SegmentFileName(String, String, String) or FileNameFromGeneration(String, String, Int64) to create your files, then this method simply removes whatever comes before the first '.', or the second '_' (excluding both). Declaration public static string StripSegmentName(string filename) Parameters Type Name Description System.String filename Returns Type Description System.String the filename with the segment name removed, or the given filename if it does not contain a '.' and '_'. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamComponents.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamComponents.html",
    "title": "Class TokenStreamComponents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStreamComponents This class encapsulates the outer components of a token stream. It provides access to the source ( Tokenizer ) and the outer end (sink), an instance of TokenFilter which also serves as the TokenStream returned by GetTokenStream(String, TextReader) . Inheritance System.Object TokenStreamComponents Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public class TokenStreamComponents Constructors | Improve this Doc View Source TokenStreamComponents(Tokenizer) Creates a new TokenStreamComponents instance. Declaration public TokenStreamComponents(Tokenizer source) Parameters Type Name Description Tokenizer source the analyzer's tokenizer | Improve this Doc View Source TokenStreamComponents(Tokenizer, TokenStream) Creates a new TokenStreamComponents instance. Declaration public TokenStreamComponents(Tokenizer source, TokenStream result) Parameters Type Name Description Tokenizer source the analyzer's tokenizer TokenStream result the analyzer's resulting token stream Fields | Improve this Doc View Source m_sink Sink tokenstream, such as the outer tokenfilter decorating the chain. This can be the source if there are no filters. Declaration protected readonly TokenStream m_sink Field Value Type Description TokenStream | Improve this Doc View Source m_source Original source of the tokens. Declaration protected readonly Tokenizer m_source Field Value Type Description Tokenizer Properties | Improve this Doc View Source Tokenizer Returns the component's Tokenizer Declaration public virtual Tokenizer Tokenizer { get; } Property Value Type Description Tokenizer Component's Tokenizer | Improve this Doc View Source TokenStream Returns the sink TokenStream Declaration public virtual TokenStream TokenStream { get; } Property Value Type Description TokenStream the sink TokenStream Methods | Improve this Doc View Source SetReader(TextReader) Resets the encapsulated components with the given reader. If the components cannot be reset, an Exception should be thrown. Declaration protected virtual void SetReader(TextReader reader) Parameters Type Name Description System.IO.TextReader reader a reader to reset the source component Exceptions Type Condition System.IO.IOException if the component's reset method throws an System.IO.IOException Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.ReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.ReuseStrategy.html",
    "title": "Class ReuseStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReuseStrategy Strategy defining how TokenStreamComponents are reused per call to GetTokenStream(String, TextReader) . Inheritance System.Object ReuseStrategy Analyzer.GlobalReuseStrategy Analyzer.PerFieldReuseStrategy Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class ReuseStrategy Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Gets the reusable TokenStreamComponents for the field with the given name. Declaration public abstract TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer Analyzer from which to get the reused components. Use GetStoredValue(Analyzer) and SetStoredValue(Analyzer, Object) to access the data on the Analyzer . System.String fieldName Name of the field whose reusable TokenStreamComponents are to be retrieved Returns Type Description TokenStreamComponents Reusable TokenStreamComponents for the field, or null if there was no previous components for the field | Improve this Doc View Source GetStoredValue(Analyzer) Returns the currently stored value. Declaration protected object GetStoredValue(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Returns Type Description System.Object Currently stored value or null if no value is stored Exceptions Type Condition System.ObjectDisposedException if the Analyzer is closed. | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Stores the given TokenStreamComponents as the reusable components for the field with the give name. Declaration public abstract void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer Analyzer System.String fieldName Name of the field whose TokenStreamComponents are being set TokenStreamComponents components TokenStreamComponents which are to be reused for the field | Improve this Doc View Source SetStoredValue(Analyzer, Object) Sets the stored value. Declaration protected void SetStoredValue(Analyzer analyzer, object storedValue) Parameters Type Name Description Analyzer analyzer Analyzer System.Object storedValue Value to store Exceptions Type Condition System.ObjectDisposedException if the Analyzer is closed. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class Token Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind . Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserTokenManager.html",
    "title": "Class StandardSyntaxParserTokenManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardSyntaxParserTokenManager Token Manager. Inheritance System.Object StandardSyntaxParserTokenManager Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardSyntaxParserTokenManager Constructors | Improve this Doc View Source StandardSyntaxParserTokenManager(ICharStream) Constructor. Declaration public StandardSyntaxParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source StandardSyntaxParserTokenManager(ICharStream, Int32) Constructor. Declaration public StandardSyntaxParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialize parser. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialize parser. Declaration public void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public void SetDebugStream(TextWriter ds) Parameters Type Name Description System.IO.TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParserConstants.html",
    "title": "Class StandardSyntaxParserConstants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardSyntaxParserConstants Token literal values and constants. Inheritance System.Object StandardSyntaxParserConstants Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class StandardSyntaxParserConstants Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = 8 Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = 21 Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = 0 Field Value Type Description System.Int32 | Improve this Doc View Source ESCAPED_CHAR RegularExpression Id. Declaration public const int ESCAPED_CHAR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source FUZZY_SLOP RegularExpression Id. Declaration public const int FUZZY_SLOP = 24 Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = 13 Field Value Type Description System.Int32 | Improve this Doc View Source MINUS RegularExpression Id. Declaration public const int MINUS = 12 Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = 10 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = 28 Field Value Type Description System.Int32 | Improve this Doc View Source OP_COLON RegularExpression Id. Declaration public const int OP_COLON = 15 Field Value Type Description System.Int32 | Improve this Doc View Source OP_EQUAL RegularExpression Id. Declaration public const int OP_EQUAL = 16 Field Value Type Description System.Int32 | Improve this Doc View Source OP_LESSTHAN RegularExpression Id. Declaration public const int OP_LESSTHAN = 17 Field Value Type Description System.Int32 | Improve this Doc View Source OP_LESSTHANEQ RegularExpression Id. Declaration public const int OP_LESSTHANEQ = 18 Field Value Type Description System.Int32 | Improve this Doc View Source OP_MORETHAN RegularExpression Id. Declaration public const int OP_MORETHAN = 19 Field Value Type Description System.Int32 | Improve this Doc View Source OP_MORETHANEQ RegularExpression Id. Declaration public const int OP_MORETHANEQ = 20 Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = 9 Field Value Type Description System.Int32 | Improve this Doc View Source PLUS RegularExpression Id. Declaration public const int PLUS = 11 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = 22 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED_CHAR RegularExpression Id. Declaration public const int QUOTED_CHAR = 6 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_GOOP RegularExpression Id. Declaration public const int RANGE_GOOP = 33 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_QUOTED RegularExpression Id. Declaration public const int RANGE_QUOTED = 32 Field Value Type Description System.Int32 | Improve this Doc View Source RANGE_TO RegularExpression Id. Declaration public const int RANGE_TO = 29 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_END RegularExpression Id. Declaration public const int RANGEEX_END = 31 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEEX_START RegularExpression Id. Declaration public const int RANGEEX_START = 27 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_END RegularExpression Id. Declaration public const int RANGEIN_END = 30 Field Value Type Description System.Int32 | Improve this Doc View Source RANGEIN_START RegularExpression Id. Declaration public const int RANGEIN_START = 26 Field Value Type Description System.Int32 | Improve this Doc View Source REGEXPTERM RegularExpression Id. Declaration public const int REGEXPTERM = 25 Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = 14 Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = 23 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = 4 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_START_CHAR RegularExpression Id. Declaration public const int TERM_START_CHAR = 3 Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = 5 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = 0 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = 2 Field Value Type Description System.Int32 | Improve this Doc View Source Range Lexical state. Declaration public const int Range = 1 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Gets the column position of the character last read. Declaration [Obsolete] int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Line Gets the line number of the character last read. Declaration [Obsolete] int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetImage() Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string GetImage() Returns Type Description System.String | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = GetImage(); return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any System.IO.IOException . Declaration char ReadChar() Returns Type Description System.Char the next character from the selected input."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Nodes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Nodes Classes AbstractRangeQueryNode<T> This class should be extended by nodes intending to represent range queries. BooleanModifierNode A BooleanModifierNode has the same behaviour as ModifierQueryNode , it only indicates that this modifier was added by GroupQueryNodeProcessor and not by the user. MultiPhraseQueryNode A MultiPhraseQueryNode indicates that its children should be used to build a MultiPhraseQuery instead of PhraseQuery . NumericQueryNode This query node represents a field query that holds a numeric value. It is similar to FieldQueryNode , however the Value returns an System.Object representing a .NET numeric type. NumericRangeQueryNode This query node represents a range query composed by NumericQueryNode bounds, which means the bound values are System.Object s representing a .NET numeric type. PrefixWildcardQueryNode A PrefixWildcardQueryNode represents wildcardquery that matches abc* or *. This does not apply to phrases, this is a special case on the original lucene parser. TODO: refactor the code to remove this special case from the parser. and probably do it on a Processor RegexpQueryNode A RegexpQueryNode represents RegexpQuery query Examples: /[a-z]|[0-9]/ StandardBooleanQueryNode A StandardBooleanQueryNode has the same behavior as BooleanQueryNode . It only indicates if the coord should be enabled or not for this boolean query. TermRangeQueryNode This query node represents a range query composed by FieldQueryNode bounds, which means the bound values are strings. WildcardQueryNode A WildcardQueryNode represents wildcard query This does not apply to phrases. Examples: a b c Fl?w? m?ke*g Interfaces IAbstractRangeQueryNode LUCENENET specific interface used to identify an AbstractRangeQueryNode without referring to its generic closing type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.ICommonQueryParserConfiguration.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.ICommonQueryParserConfiguration.html",
    "title": "Interface ICommonQueryParserConfiguration | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICommonQueryParserConfiguration Configuration options common across queryparser implementations. Namespace : Lucene.Net.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICommonQueryParserConfiguration Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery . Note that this can produce very slow queries on big indexes. Default: false. Declaration bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Analyzer Declaration Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source EnablePositionIncrements Set to true to enable position increments in result query. When set, result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: false. Declaration bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FuzzyMinSim Get the minimal similarity for fuzzy queries. Declaration float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Get or Set the prefix length for fuzzy queries. Default is 0. Declaration int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Get or Set locale used by date range parsing. Declaration CultureInfo Locale { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Whether terms of multi-term queries (e.g., wildcard, prefix, fuzzy and range) should be automatically lower-cased or not. Default is true . Declaration bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default, it uses CONSTANT_SCORE_AUTO_REWRITE_DEFAULT when creating a prefix, wildcard and range queries. This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any exception due to too many listeners. However, if your application really needs to use the old-fashioned boolean queries expansion rewriting and the above points are not relevant then use this change the rewrite method. Declaration MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Gets or Sets the time zone. Declaration TimeZoneInfo TimeZone { get; set; } Property Value Type Description System.TimeZoneInfo Methods | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Sets the default DateTools.Resolution used for certain field when no DateTools.Resolution is defined for this field. Declaration void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Config | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Config Classes ConfigurationKeys Class holding keys for StandardQueryNodeProcessorPipeline options. FieldBoostMapFCListener This listener listens for every field configuration request and assign a BOOST to the equivalent FieldConfig based on a defined map: fieldName -> boostValue stored in FIELD_BOOST_MAP . FieldDateResolutionFCListener This listener listens for every field configuration request and assign a DATE_RESOLUTION to the equivalent FieldConfig based on a defined map: fieldName -> DateTools.Resolution stored in FIELD_DATE_RESOLUTION_MAP . FuzzyConfig Configuration parameters for FuzzyQuery s NumberDateFormat This NumberFormat parses System.Int64 into date strings and vice-versa. It uses the given dateFormat and System.Globalization.CultureInfo to parse and format dates, but before, it converts System.Int64 to System.DateTime objects or vice-versa. Note that the System.Int64 value the dates are parsed into and out of represent the number of milliseconds since January 1, 1970 0:00:00, also known as the \"epoch\". NumericConfig This class holds the configuration used to parse numeric queries and create NumericRangeQuery s. NumericFieldConfigListener This listener is used to listen to FieldConfig requests in QueryConfigHandler and add NUMERIC_CONFIG based on the NUMERIC_CONFIG_MAP set in the QueryConfigHandler . StandardQueryConfigHandler This query configuration handler is used for almost every processor defined in the StandardQueryNodeProcessorPipeline processor pipeline. It holds configuration methods that reproduce the configuration methods that could be set on the old lucene 2.4 QueryParser class. Enums DateFormat LUCENENET specific enum for mimicking the Java DateFormat StandardQueryConfigHandler.Operator Boolean Operator: AND or OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.Operator.html",
    "title": "Enum StandardQueryConfigHandler.Operator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum StandardQueryConfigHandler.Operator Boolean Operator: AND or OR Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public enum Operator Fields Name Description AND OR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericConfig.html",
    "title": "Class NumericConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericConfig This class holds the configuration used to parse numeric queries and create NumericRangeQuery s. Inheritance System.Object NumericConfig Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericConfig Constructors | Improve this Doc View Source NumericConfig(Int32, NumberFormat, NumericType) Constructs a NumericConfig object. Declaration public NumericConfig(int precisionStep, NumberFormat format, NumericType type) Parameters Type Name Description System.Int32 precisionStep the precision used to index the numeric values NumberFormat format the NumberFormat used to parse a System.String to an System.Object representing a .NET numeric type. NumericType type the numeric type used to index the numeric values See Also PrecisionStep NumberFormat Type Properties | Improve this Doc View Source NumberFormat Gets or Sets the NumberFormat used to parse a System.String to System.Object representing a .NET numeric type, cannot be null Declaration public virtual NumberFormat NumberFormat { get; set; } Property Value Type Description NumberFormat | Improve this Doc View Source PrecisionStep Gets or sets the precision used to index the numeric values Declaration public virtual int PrecisionStep { get; set; } Property Value Type Description System.Int32 See Also PrecisionStep | Improve this Doc View Source Type Gets or Sets the numeric type used to index the numeric values Declaration public virtual NumericType Type { get; set; } Property Value Type Description NumericType Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() LUCENENET specific - Visual Studio provides a compiler warning if Equals(Object) is overridden without GetHashCode() , so we provide an implementation that mirrors Equals(Object) . Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() See Also NumericRangeQuery NumberFormat"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FuzzyConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FuzzyConfig.html",
    "title": "Class FuzzyConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyConfig Configuration parameters for FuzzyQuery s Inheritance System.Object FuzzyConfig Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyConfig Constructors | Improve this Doc View Source FuzzyConfig() Declaration public FuzzyConfig() Properties | Improve this Doc View Source MinSimilarity Declaration public virtual float MinSimilarity { get; set; } Property Value Type Description System.Single | Improve this Doc View Source PrefixLength Declaration public virtual int PrefixLength { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragmentsBuilder.html",
    "title": "Interface IFragmentsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFragmentsBuilder IFragmentsBuilder is an interface for fragments (snippets) builder classes. A IFragmentsBuilder class can be plugged in to FastVectorHighlighter . Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragmentsBuilder Methods | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList) create a fragment. Declaration string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object Returns Type Description System.String a created fragment or null when no fragment created Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) create a fragment. Declaration string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String a created fragment or null when no fragment created Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) create multiple fragments. Declaration string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighter System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.Int32 maxNumFragments maximum number of fragments Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) create multiple fragments. Declaration string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighter System.String fieldName field of the document to be highlighted FieldFragList fieldFragList FieldFragList object System.Int32 maxNumFragments maximum number of fragments System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IFragListBuilder.html",
    "title": "Interface IFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFragListBuilder IFragListBuilder is an interface for FieldFragList builder classes. A IFragListBuilder class can be plugged in to Highlighter . Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragListBuilder Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) create a FieldFragList . Declaration FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList FieldPhraseList object System.Int32 fragCharSize the length (number of chars) of a fragment Returns Type Description FieldFragList the created FieldFragList object"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IBoundaryScanner.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.IBoundaryScanner.html",
    "title": "Interface IBoundaryScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBoundaryScanner Finds fragment boundaries: pluggable into BaseFragmentsBuilder Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IBoundaryScanner Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Scan forward to find start offset. Declaration int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer scanned object System.Int32 start start offset to begin Returns Type Description System.Int32 the found end offset | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Scan backward to find end offset. Declaration int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer scanned object System.Int32 start offset to begin Returns Type Description System.Int32 the found start offset"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.html",
    "title": "Class FieldTermStack | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldTermStack FieldTermStack is a stack that keeps query terms in the specified field of the document to be highlighted. Inheritance System.Object FieldTermStack Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldTermStack Constructors | Improve this Doc View Source FieldTermStack(IndexReader, Int32, String, FieldQuery) a constructor. Declaration public FieldTermStack(IndexReader reader, int docId, string fieldName, FieldQuery fieldQuery) Parameters Type Name Description IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted FieldQuery fieldQuery FieldQuery object Exceptions Type Condition System.IO.IOException If there is a low-level I/O error Properties | Improve this Doc View Source FieldName field name Declaration public virtual string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source IsEmpty to know whether the stack is empty. Returns true if the stack is empty, false if not Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Pop() Returns the top FieldTermStack.TermInfo object of the stack Declaration public virtual FieldTermStack.TermInfo Pop() Returns Type Description FieldTermStack.TermInfo the top FieldTermStack.TermInfo object of the stack | Improve this Doc View Source Push(FieldTermStack.TermInfo) Puts a FieldTermStack.TermInfo onto the top of the stack Declaration public virtual void Push(FieldTermStack.TermInfo termInfo) Parameters Type Name Description FieldTermStack.TermInfo termInfo the FieldTermStack.TermInfo object to be put on the top of the stack"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.html",
    "title": "Class FieldQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldQuery FieldQuery breaks down query object into terms/phrases and keeps them in a FieldQuery.QueryPhraseMap structure. Inheritance System.Object FieldQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldQuery Methods | Improve this Doc View Source ApplyParentBoost(Query, Query) Push parent's boost into a clone of query if parent has a non 1 boost. Declaration protected virtual Query ApplyParentBoost(Query query, Query parent) Parameters Type Name Description Query query Query parent Returns Type Description Query | Improve this Doc View Source GetFieldTermMap(String, String) Declaration public virtual FieldQuery.QueryPhraseMap GetFieldTermMap(string fieldName, string term) Parameters Type Name Description System.String fieldName System.String term Returns Type Description FieldQuery.QueryPhraseMap QueryPhraseMap | Improve this Doc View Source SearchPhrase(String, IList<FieldTermStack.TermInfo>) Declaration public virtual FieldQuery.QueryPhraseMap SearchPhrase(string fieldName, IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description System.String fieldName System.Collections.Generic.IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description FieldQuery.QueryPhraseMap QueryPhraseMap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.QueryPhraseMap.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldQuery.QueryPhraseMap.html",
    "title": "Class FieldQuery.QueryPhraseMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldQuery.QueryPhraseMap Internal structure of a query for highlighting: represents a nested query structure Inheritance System.Object FieldQuery.QueryPhraseMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryPhraseMap Constructors | Improve this Doc View Source QueryPhraseMap(FieldQuery) Declaration public QueryPhraseMap(FieldQuery fieldQuery) Parameters Type Name Description FieldQuery fieldQuery Properties | Improve this Doc View Source Boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source IsTerminal Declaration public virtual bool IsTerminal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Slop Declaration public virtual int Slop { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermOrPhraseNumber Declaration public virtual int TermOrPhraseNumber { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetTermMap(String) Declaration public virtual FieldQuery.QueryPhraseMap GetTermMap(string term) Parameters Type Name Description System.String term Returns Type Description FieldQuery.QueryPhraseMap | Improve this Doc View Source IsValidTermOrPhrase(IList<FieldTermStack.TermInfo>) Declaration public virtual bool IsValidTermOrPhrase(IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description System.Collections.Generic.IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description System.Boolean | Improve this Doc View Source SearchPhrase(IList<FieldTermStack.TermInfo>) Declaration public virtual FieldQuery.QueryPhraseMap SearchPhrase(IList<FieldTermStack.TermInfo> phraseCandidate) Parameters Type Name Description System.Collections.Generic.IList < FieldTermStack.TermInfo > phraseCandidate Returns Type Description FieldQuery.QueryPhraseMap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.html",
    "title": "Class FieldPhraseList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldPhraseList FieldPhraseList has a list of WeightedPhraseInfo that is used by FragListBuilder to create a FieldFragList object. Inheritance System.Object FieldPhraseList Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FieldPhraseList Constructors | Improve this Doc View Source FieldPhraseList(FieldPhraseList[]) Merging constructor. Declaration public FieldPhraseList(FieldPhraseList[] toMerge) Parameters Type Name Description FieldPhraseList [] toMerge FieldPhraseList s to merge to build this one | Improve this Doc View Source FieldPhraseList(FieldTermStack, FieldQuery) create a FieldPhraseList that has no limit on the number of phrases to analyze Declaration public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery) Parameters Type Name Description FieldTermStack fieldTermStack FieldTermStack object FieldQuery fieldQuery FieldQuery object | Improve this Doc View Source FieldPhraseList(FieldTermStack, FieldQuery, Int32) a constructor. Declaration public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery, int phraseLimit) Parameters Type Name Description FieldTermStack fieldTermStack FieldTermStack object FieldQuery fieldQuery FieldQuery object System.Int32 phraseLimit maximum size of phraseList Properties | Improve this Doc View Source PhraseList return the list of FieldPhraseList.WeightedPhraseInfo . Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo> PhraseList { get; } Property Value Type Description System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo > Methods | Improve this Doc View Source AddIfNoOverlap(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual void AddIfNoOverlap(FieldPhraseList.WeightedPhraseInfo wpi) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo wpi"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.html",
    "title": "Class FieldFragList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldFragList FieldFragList has a list of \"frag info\" that is used by IFragmentsBuilder class to create fragments (snippets). Inheritance System.Object FieldFragList SimpleFieldFragList WeightedFieldFragList Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class FieldFragList Constructors | Improve this Doc View Source FieldFragList(Int32) a constructor. Declaration public FieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Properties | Improve this Doc View Source FragInfos return the list of FieldFragList.WeightedFragInfo s. Declaration public virtual IList<FieldFragList.WeightedFragInfo> FragInfos { get; } Property Value Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) convert the list of FieldPhraseList.WeightedPhraseInfo to FieldFragList.WeightedFragInfo , then add it to the fragInfos Declaration public abstract void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset start offset of the fragment System.Int32 endOffset end offset of the fragment System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList list of FieldPhraseList.WeightedPhraseInfo objects"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.html",
    "title": "Class FieldFragList.WeightedFragInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldFragList.WeightedFragInfo List of term offsets + weight for a frag info Inheritance System.Object FieldFragList.WeightedFragInfo Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFragInfo Constructors | Improve this Doc View Source WeightedFragInfo(Int32, Int32, IList<FieldFragList.WeightedFragInfo.SubInfo>, Single) Declaration public WeightedFragInfo(int startOffset, int endOffset, IList<FieldFragList.WeightedFragInfo.SubInfo> subInfos, float totalBoost) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset System.Collections.Generic.IList < FieldFragList.WeightedFragInfo.SubInfo > subInfos System.Single totalBoost Properties | Improve this Doc View Source EndOffset Declaration public int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SubInfos Declaration public IList<FieldFragList.WeightedFragInfo.SubInfo> SubInfos { get; } Property Value Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo.SubInfo > | Improve this Doc View Source TotalBoost Declaration public float TotalBoost { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.SubInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldFragList.WeightedFragInfo.SubInfo.html",
    "title": "Class FieldFragList.WeightedFragInfo.SubInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldFragList.WeightedFragInfo.SubInfo Represents the list of term offsets for some text Inheritance System.Object FieldFragList.WeightedFragInfo.SubInfo Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SubInfo Constructors | Improve this Doc View Source SubInfo(String, IList<FieldPhraseList.WeightedPhraseInfo.Toffs>, Int32, Single) Declaration public SubInfo(string text, IList<FieldPhraseList.WeightedPhraseInfo.Toffs> termsOffsets, int seqnum, float boost) Parameters Type Name Description System.String text System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo.Toffs > termsOffsets System.Int32 seqnum System.Single boost Properties | Improve this Doc View Source Boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source Seqnum Declaration public virtual int Seqnum { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsOffsets Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo.Toffs> TermsOffsets { get; } Property Value Type Description System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo.Toffs > | Improve this Doc View Source Text Declaration public virtual string Text { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FastVectorHighlighter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FastVectorHighlighter.html",
    "title": "Class FastVectorHighlighter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastVectorHighlighter Another highlighter implementation. Inheritance System.Object FastVectorHighlighter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class FastVectorHighlighter Constructors | Improve this Doc View Source FastVectorHighlighter() the default constructor. Declaration public FastVectorHighlighter() | Improve this Doc View Source FastVectorHighlighter(Boolean, Boolean) a constructor. Using SimpleFragListBuilder and ScoreOrderFragmentsBuilder . Declaration public FastVectorHighlighter(bool phraseHighlight, bool fieldMatch) Parameters Type Name Description System.Boolean phraseHighlight true or false for phrase highlighting System.Boolean fieldMatch true of false for field matching | Improve this Doc View Source FastVectorHighlighter(Boolean, Boolean, IFragListBuilder, IFragmentsBuilder) a constructor. A IFragListBuilder and a IFragmentsBuilder can be specified (plugins). Declaration public FastVectorHighlighter(bool phraseHighlight, bool fieldMatch, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder) Parameters Type Name Description System.Boolean phraseHighlight true of false for phrase highlighting System.Boolean fieldMatch true of false for field matching IFragListBuilder fragListBuilder an instance of IFragmentsBuilder IFragmentsBuilder fragmentsBuilder an instance of IFragmentsBuilder Fields | Improve this Doc View Source DEFAULT_FIELD_MATCH Declaration public static readonly bool DEFAULT_FIELD_MATCH Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_PHRASE_HIGHLIGHT Declaration public static readonly bool DEFAULT_PHRASE_HIGHLIGHT Field Value Type Description System.Boolean Properties | Improve this Doc View Source IsFieldMatch return whether fieldMatch or not. Declaration public virtual bool IsFieldMatch { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsPhraseHighlight return whether phraseHighlight or not. Declaration public virtual bool IsPhraseHighlight { get; } Property Value Type Description System.Boolean | Improve this Doc View Source PhraseLimit Gets or Sets the maximum number of phrases to analyze when searching for the highest-scoring phrase. The default is unlimited (int.MaxValue). Declaration public virtual int PhraseLimit { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetBestFragment(FieldQuery, IndexReader, Int32, String, Int32) return the best fragment. Declaration public string GetBestFragment(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment Returns Type Description System.String the best fragment (snippet) string Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetBestFragment(FieldQuery, IndexReader, Int32, String, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) return the best fragment. Declaration public string GetBestFragment(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String the best fragment (snippet) string Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, ISet<String>, Int32, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) Return the best fragments. Matches are scanned from matchedFields and turned into fragments against storedField . The highlighting may not make sense if matchedFields has matches with offsets that don't correspond features in storedField . It will outright throw a System.IndexOutOfRangeException if matchedFields produces offsets outside of storedField . As such it is advisable that all matchedFields share the same source as storedField or are at least a prefix of it. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string storedField, ISet<string> matchedFields, int fragCharSize, int maxNumFragments, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String storedField field of the document that stores the text System.Collections.Generic.ISet < System.String > matchedFields fields of the document to scan for matches System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, Int32, Int32) return the best fragments. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, int maxNumFragments) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetBestFragments(FieldQuery, IndexReader, Int32, String, Int32, Int32, IFragListBuilder, IFragmentsBuilder, String[], String[], IEncoder) return the best fragments. Declaration public string[] GetBestFragments(FieldQuery fieldQuery, IndexReader reader, int docId, string fieldName, int fragCharSize, int maxNumFragments, IFragListBuilder fragListBuilder, IFragmentsBuilder fragmentsBuilder, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description FieldQuery fieldQuery FieldQuery object IndexReader reader IndexReader of the index System.Int32 docId document id to be highlighted System.String fieldName field of the document to be highlighted System.Int32 fragCharSize the length (number of chars) of a fragment System.Int32 maxNumFragments maximum number of fragments IFragListBuilder fragListBuilder IFragListBuilder object IFragmentsBuilder fragmentsBuilder IFragmentsBuilder object System.String [] preTags pre-tags to be used to highlight terms System.String [] postTags post-tags to be used to highlight terms IEncoder encoder an encoder that generates encoded text Returns Type Description System.String [] created fragments or null when no fragments created. size of the array can be less than maxNumFragments Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetFieldQuery(Query) create a FieldQuery object. Declaration public virtual FieldQuery GetFieldQuery(Query query) Parameters Type Name Description Query query a query Returns Type Description FieldQuery the created FieldQuery object | Improve this Doc View Source GetFieldQuery(Query, IndexReader) create a FieldQuery object. Declaration public virtual FieldQuery GetFieldQuery(Query query, IndexReader reader) Parameters Type Name Description Query query a query IndexReader reader Returns Type Description FieldQuery the created FieldQuery object"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.html",
    "title": "Namespace Lucene.Net.Search.Highlight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Highlight Classes DefaultEncoder Simple IEncoder implementation that does not modify the output GradientFormatter Formats text with different color intensity depending on the score of the term. Highlighter Class used to markup highlighted terms found in the best sections of a text, using configurable IFragmenter , Scorer , IFormatter , IEncoder and tokenizers. InvalidTokenOffsetsException Exception thrown if TokenStream Tokens are incompatible with provided text NullFragmenter IFragmenter implementation which does not fragment the text. This is useful for highlighting the entire content of a document or field. OffsetLimitTokenFilter This TokenFilter limits the number of tokens while indexing by adding up the current offset. PositionSpan Utility class to record Positions Spans This is a Lucene.NET INTERNAL API, use at your own risk QueryScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class converts appropriate Query s to SpanQuery s and attempts to score only those terms that participated in generating the 'hit' on the document. QueryTermExtractor Utility class used to extract the terms used in a query, plus any weights. This class will not find terms for MultiTermQuery , RangeQuery and PrefixQuery classes so the caller must pass a rewritten query (see Rewrite(IndexReader) ) to obtain a list of expanded terms. QueryTermScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class uses the QueryTermExtractor class to process determine the query terms and their boosts to be used. SimpleFragmenter IFragmenter implementation which breaks text up into same-size fragments with no concerns over spotting sentence boundaries. SimpleHTMLEncoder Simple IEncoder implementation to escape text for HTML output SimpleHTMLFormatter Simple IFormatter implementation to highlight terms with a pre and post tag SimpleSpanFragmenter IFragmenter implementation which breaks text up into same-size fragments but does not split up Spans . This is a simple sample class. SpanGradientFormatter Formats text with different color intensity depending on the score of the term using the span tag. GradientFormatter uses a bgcolor argument to the font tag which doesn't work in Mozilla, thus this class. TextFragment Low-level class used to record information about a section of a document with a score. TokenGroup One, or several overlapping tokens, along with the score(s) and the scope of the original text TokenSources Hides implementation issues associated with obtaining a TokenStream for use with the Highlighter - can obtain from term vectors with offsets and positions or from an Analyzer re-parsing the stored content. see TokenStreamFromTermVector TokenStreamFromTermPositionVector TokenStream created from a term vector field. WeightedSpanTerm Lightweight class to hold term, weight, and positions used for scoring this term. WeightedSpanTermExtractor Class used to extract WeightedSpanTerm s from a Query based on whether Term s from the Query are contained in a supplied TokenStream . WeightedSpanTermExtractor.PositionCheckingMap<K> This class makes sure that if both position sensitive and insensitive versions of the same term are added, the position insensitive one wins. WeightedTerm Lightweight class to hold term and a Weight value used for scoring this term Interfaces IEncoder Encodes original text. The IEncoder works with the IFormatter to generate the output. IFormatter Processes terms found in the original text, typically by applying some form of mark-up to highlight terms in HTML search results pages. IFragmenter Implements the policy for breaking text into multiple fragments for consideration by the Highlighter class. A sophisticated implementation may do this on the basis of detecting end of sentences in the text. IScorer A IScorer is responsible for scoring a stream of tokens. These token scores can then be used to compute TextFragment scores."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedTerm.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedTerm.html",
    "title": "Class WeightedTerm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedTerm Lightweight class to hold term and a Weight value used for scoring this term Inheritance System.Object WeightedTerm WeightedSpanTerm Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedTerm Constructors | Improve this Doc View Source WeightedTerm(Single, String) Declaration public WeightedTerm(float weight, string term) Parameters Type Name Description System.Single weight System.String term Properties | Improve this Doc View Source Term the term value (stemmed) Declaration public virtual string Term { get; set; } Property Value Type Description System.String | Improve this Doc View Source Weight the Weight associated with this term Declaration public virtual float Weight { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.html",
    "title": "Class WeightedSpanTermExtractor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedSpanTermExtractor Class used to extract WeightedSpanTerm s from a Query based on whether Term s from the Query are contained in a supplied TokenStream . Inheritance System.Object WeightedSpanTermExtractor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedSpanTermExtractor Constructors | Improve this Doc View Source WeightedSpanTermExtractor() Declaration public WeightedSpanTermExtractor() | Improve this Doc View Source WeightedSpanTermExtractor(String) Declaration public WeightedSpanTermExtractor(string defaultField) Parameters Type Name Description System.String defaultField Properties | Improve this Doc View Source ExpandMultiTermQuery Declaration public virtual bool ExpandMultiTermQuery { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsCachedTokenStream Declaration public virtual bool IsCachedTokenStream { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TokenStream Declaration public virtual TokenStream TokenStream { get; } Property Value Type Description TokenStream Methods | Improve this Doc View Source CollectSpanQueryFields(SpanQuery, ISet<String>) Declaration protected virtual void CollectSpanQueryFields(SpanQuery spanQuery, ISet<string> fieldNames) Parameters Type Name Description SpanQuery spanQuery System.Collections.Generic.ISet < System.String > fieldNames | Improve this Doc View Source Extract(Query, IDictionary<String, WeightedSpanTerm>) Fills a with WeightedSpanTerm s using the terms from the supplied query . Declaration protected virtual void Extract(Query query, IDictionary<string, WeightedSpanTerm> terms) Parameters Type Name Description Query query Query to extract Terms from System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > terms Map to place created WeightedSpanTerm s in Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source ExtractUnknownQuery(Query, IDictionary<String, WeightedSpanTerm>) Declaration protected virtual void ExtractUnknownQuery(Query query, IDictionary<string, WeightedSpanTerm> terms) Parameters Type Name Description Query query System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > terms | Improve this Doc View Source ExtractWeightedSpanTerms(IDictionary<String, WeightedSpanTerm>, SpanQuery) Fills a with WeightedSpanTerm s using the terms from the supplied SpanQuery . Declaration protected virtual void ExtractWeightedSpanTerms(IDictionary<string, WeightedSpanTerm> terms, SpanQuery spanQuery) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > terms to place created WeightedSpanTerm s in SpanQuery spanQuery SpanQuery to extract Terms from Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source ExtractWeightedTerms(IDictionary<String, WeightedSpanTerm>, Query) Fills a with WeightedSpanTerm s using the terms from the supplied SpanQuery . Declaration protected virtual void ExtractWeightedTerms(IDictionary<string, WeightedSpanTerm> terms, Query query) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > terms to place created WeightedSpanTerm s in Query query Query to extract Terms from Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source FieldNameComparer(String) Necessary to implement matches for queries against Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.defaultField Declaration protected virtual bool FieldNameComparer(string fieldNameToCheck) Parameters Type Name Description System.String fieldNameToCheck Returns Type Description System.Boolean | Improve this Doc View Source GetLeafContext() Declaration protected virtual AtomicReaderContext GetLeafContext() Returns Type Description AtomicReaderContext | Improve this Doc View Source GetWeightedSpanTerms(Query, TokenStream) Creates an from the given Query and TokenStream . Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTerms(Query query, TokenStream tokenStream) Parameters Type Name Description Query query Query that caused hit TokenStream tokenStream TokenStream of text to be highlighted Returns Type Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > Map containing WeightedSpanTerm s Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetWeightedSpanTerms(Query, TokenStream, String) Creates an from the given Query and TokenStream . Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTerms(Query query, TokenStream tokenStream, string fieldName) Parameters Type Name Description Query query Query that caused hit TokenStream tokenStream TokenStream of text to be highlighted System.String fieldName restricts Term's used based on field name Returns Type Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > Map containing WeightedSpanTerm s Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetWeightedSpanTermsWithScores(Query, TokenStream, String, IndexReader) Creates an from the given Query and TokenStream . Uses a supplied IndexReader to properly Weight terms (for gradient highlighting). Declaration public virtual IDictionary<string, WeightedSpanTerm> GetWeightedSpanTermsWithScores(Query query, TokenStream tokenStream, string fieldName, IndexReader reader) Parameters Type Name Description Query query Query that caused hit TokenStream tokenStream TokenStream of text to be highlighted System.String fieldName restricts Term's used based on field name IndexReader reader to use for scoring Returns Type Description System.Collections.Generic.IDictionary < System.String , WeightedSpanTerm > Map of WeightedSpanTerm s with quasi tf/idf scores Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source MustRewriteQuery(SpanQuery) Declaration protected virtual bool MustRewriteQuery(SpanQuery spanQuery) Parameters Type Name Description SpanQuery spanQuery Returns Type Description System.Boolean | Improve this Doc View Source SetMaxDocCharsToAnalyze(Int32) Declaration protected void SetMaxDocCharsToAnalyze(int maxDocCharsToAnalyze) Parameters Type Name Description System.Int32 maxDocCharsToAnalyze | Improve this Doc View Source SetWrapIfNotCachingTokenFilter(Boolean) By default, TokenStream s that are not of the type CachingTokenFilter are wrapped in a CachingTokenFilter to TokenStream impl and you don't want it to be wrapped, set this to false. Declaration public virtual void SetWrapIfNotCachingTokenFilter(bool wrap) Parameters Type Name Description System.Boolean wrap"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenSources.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenSources.html",
    "title": "Class TokenSources | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenSources Hides implementation issues associated with obtaining a TokenStream for use with the Highlighter - can obtain from term vectors with offsets and positions or from an Analyzer re-parsing the stored content. see TokenStreamFromTermVector Inheritance System.Object TokenSources Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TokenSources Methods | Improve this Doc View Source GetAnyTokenStream(IndexReader, Int32, String, Analyzer) A convenience method that tries a number of approaches to getting a token stream. The cost of finding there are no termVectors in the index is minimal (1000 invocations still registers 0 ms). So this \"lazy\" (flexible?) approach to coding is probably acceptable Declaration public static TokenStream GetAnyTokenStream(IndexReader reader, int docId, string field, Analyzer analyzer) Parameters Type Name Description IndexReader reader System.Int32 docId System.String field Analyzer analyzer Returns Type Description TokenStream null if field not stored correctly Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetAnyTokenStream(IndexReader, Int32, String, Document, Analyzer) A convenience method that tries to first get a TermPositionVector for the specified docId, then, falls back to using the passed in Document to retrieve the TokenStream . This is useful when you already have the document, but would prefer to use the vector first. Declaration public static TokenStream GetAnyTokenStream(IndexReader reader, int docId, string field, Document doc, Analyzer analyzer) Parameters Type Name Description IndexReader reader The IndexReader to use to try and get the vector from System.Int32 docId The docId to retrieve. System.String field The field to retrieve on the document Document doc The document to fall back on Analyzer analyzer The analyzer to use for creating the TokenStream if the vector doesn't exist Returns Type Description TokenStream The TokenStream for the IIndexableField on the Document Exceptions Type Condition System.IO.IOException if there was an error loading | Improve this Doc View Source GetTokenStream(Document, String, Analyzer) Declaration public static TokenStream GetTokenStream(Document doc, string field, Analyzer analyzer) Parameters Type Name Description Document doc System.String field Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(IndexReader, Int32, String, Analyzer) Declaration public static TokenStream GetTokenStream(IndexReader reader, int docId, string field, Analyzer analyzer) Parameters Type Name Description IndexReader reader System.Int32 docId System.String field Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(Terms) Declaration public static TokenStream GetTokenStream(Terms vector) Parameters Type Name Description Terms vector Returns Type Description TokenStream | Improve this Doc View Source GetTokenStream(Terms, Boolean) Low level api. Returns a token stream generated from a Terms . This can be used to feed the highlighter with a pre-parsed token stream. The Terms must have offsets available. In my tests the speeds to recreate 1000 token streams using this method are: with TermVector offset only data stored - 420 milliseconds with TermVector offset AND position data stored - 271 milliseconds (nb timings for TermVector with position data are based on a tokenizer with contiguous positions - no overlaps or gaps) The cost of not using TermPositionVector to store pre-parsed content and using an analyzer to re-parse the original content: reanalyzing the original content - 980 milliseconds The re-analyze timings will typically vary depending on - The complexity of the analyzer code (timings above were using a stemmer/lowercaser/stopword combo) The number of other fields (Lucene reads ALL fields off the disk when accessing just one document field - can cost dear!) Use of compression on field storage - could be faster due to compression (less disk IO) or slower (more CPU burn) depending on the content. Declaration public static TokenStream GetTokenStream(Terms tpv, bool tokenPositionsGuaranteedContiguous) Parameters Type Name Description Terms tpv System.Boolean tokenPositionsGuaranteedContiguous true if the token position numbers have no overlaps or gaps. If looking to eek out the last drops of performance, set to true. If in doubt, set to false. Returns Type Description TokenStream Exceptions Type Condition System.ArgumentException if no offsets are available | Improve this Doc View Source GetTokenStream(String, String, Analyzer) Declaration public static TokenStream GetTokenStream(string field, string contents, Analyzer analyzer) Parameters Type Name Description System.String field System.String contents Analyzer analyzer Returns Type Description TokenStream | Improve this Doc View Source GetTokenStreamWithOffsets(IndexReader, Int32, String) Returns a TokenStream with positions and offsets constructed from field termvectors. If the field has no termvectors or offsets are not included in the termvector, return null. See GetTokenStream(Terms) for an explanation of what happens when positions aren't present. Declaration public static TokenStream GetTokenStreamWithOffsets(IndexReader reader, int docId, string field) Parameters Type Name Description IndexReader reader the IndexReader to retrieve term vectors from System.Int32 docId the document to retrieve term vectors for System.String field the field to retrieve term vectors for Returns Type Description TokenStream a TokenStream , or null if offsets are not available Exceptions Type Condition System.IO.IOException If there is a low-level I/O error"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy Classes AssociationFacetField Add an instance of this to your Document to add a facet label associated with an arbitrary byte[] . This will require a custom Facets implementation at search time; see Int32AssociationFacetField and SingleAssociationFacetField to use existing Facets implementations. @lucene.experimental CachedOrdinalsReader A per-segment cache of documents' facet ordinals. Every CachedOrdinalsReader.CachedOrds holds the ordinals in a raw int[] , and therefore consumes as much RAM as the total number of ordinals found in the segment, but saves the CPU cost of decoding ordinals during facet counting. NOTE: every CachedOrdinalsReader.CachedOrds is limited to 2.1B total ordinals. If that is a limitation for you then consider limiting the segment size to fewer documents, or use an alternative cache which pages through the category ordinals. NOTE: when using this cache, it is advised to use a DocValuesFormat that does not cache the data in memory, at least for the category lists fields, or otherwise you'll be doing double-caching. NOTE: create one instance of this and re-use it for all facet implementations (the cache is per-instance, not static). CachedOrdinalsReader.CachedOrds Holds the cached ordinals in two parallel int[] arrays. CategoryPath Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesOrdinalsReader Decodes ordinals previously indexed into a BinaryDocValues field FacetLabel Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET INTERNAL API, use at your own risk FastTaxonomyFacetCounts Computes facets counts, assuming the default encoding into DocValues was used. @lucene.experimental Int32AssociationFacetField Add an instance of this to your Document to add a facet label associated with an System.Int32 . Use TaxonomyFacetSumInt32Associations to aggregate int values per facet label at search time. NOTE: This was IntAssociationFacetField in Lucene @lucene.experimental Int32TaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords int[] . NOTE: This was IntTaxonomyFacets in Lucene LRUHashMap<TKey, TValue> LRUHashMap<TKey, TValue> is similar to of Java's HashMap, which has a bounded Limit ; When it reaches that Limit , each time a new element is added, the least recently used (LRU) entry is removed. Unlike the Java Lucene implementation, this one is thread safe because it is backed by the LurchTable<TKey, TValue> . Do note that every time an element is read from LRUHashMap<TKey, TValue> , a write operation also takes place to update the element's last access time. This is because the LRU order needs to be remembered to determine which element to evict when the Limit is exceeded. @lucene.experimental OrdinalsReader Provides per-document ordinals. OrdinalsReader.OrdinalsSegmentReader Returns ordinals for documents in one segment. ParallelTaxonomyArrays Returns 3 arrays for traversing the taxonomy: Parents : Parents[i] denotes the parent of category ordinal i . Children : Children[i] denotes a child of category ordinal i . Siblings : Siblings[i] denotes the sibling of category ordinal i . To traverse the taxonomy tree, you typically start with Children[0] (ordinal 0 is reserved for ROOT), and then depends if you want to do DFS or BFS, you call Children[Children[0]] or Siblings[Children[0]] and so forth, respectively. NOTE: you are not expected to modify the values of the arrays, since the arrays are shared with other threads. @lucene.experimental PrintTaxonomyStats Prints how many ords are under each dimension. SearcherTaxonomyManager Manages near-real-time reopen of both an IndexSearcher and a TaxonomyReader . NOTE : If you call ReplaceTaxonomy(Directory) then you must open a new SearcherTaxonomyManager afterwards. SearcherTaxonomyManager.SearcherAndTaxonomy Holds a matched pair of IndexSearcher and TaxonomyReader SingleAssociationFacetField Add an instance of this to your Document to add a facet label associated with a System.Single . Use TaxonomyFacetSumSingleAssociations to aggregate System.Single values per facet label at search time. NOTE: This was FloatAssociationFacetField in Lucene @lucene.experimental SingleTaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords float[] . NOTE: This was FloatTaxonomyFacets in Lucene TaxonomyFacetCounts Reads from any OrdinalsReader ; use FastTaxonomyFacetCounts if you are using the default encoding from BinaryDocValues . @lucene.experimental TaxonomyFacets Base class for all taxonomy-based facets impls. TaxonomyFacetSumInt32Associations Aggregates sum of System.Int32 values previously indexed with Int32AssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumIntAssociations in Lucene @lucene.experimental TaxonomyFacetSumSingleAssociations Aggregates sum of System.Single values previously indexed with SingleAssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumFloatAssociations in Lucene @lucene.experimental TaxonomyFacetSumValueSource Aggregates sum of values from DoubleVal(Int32) and DoubleVal(Int32, Double[]) , for each facet label. @lucene.experimental TaxonomyFacetSumValueSource.ScoreValueSource ValueSource that returns the score for each hit; use this to aggregate the sum of all hit scores for each facet label. TaxonomyReader TaxonomyReader is the read-only interface with which the faceted-search library uses the taxonomy during search time. A TaxonomyReader holds a list of categories. Each category has a serial number which we call an \"ordinal\", and a hierarchical \"path\" name: The ordinal is an integer that starts at 0 for the first category (which is always the root category), and grows contiguously as more categories are added; Note that once a category is added, it can never be deleted. The path is a CategoryPath object specifying the category's position in the hierarchy. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers to be active concurrently with a single writer. Readers follow so-called \"point in time\" semantics, i.e., a TaxonomyReader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called. In faceted search, two separate indices are used: the main Lucene index, and the taxonomy. Because the main index refers to the categories listed in the taxonomy, it is important to open the taxonomy after opening the main index, and it is also necessary to Reopen() the taxonomy after Reopen()ing the main index. This order is important, otherwise it would be possible for the main index to refer to a category which is not yet visible in the old snapshot of the taxonomy. Note that it is indeed fine for the the taxonomy to be opened after the main index - even a long time after. The reason is that once a category is added to the taxonomy, it can never be changed or deleted, so there is no danger that a \"too new\" taxonomy not being consistent with an older index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaxonomyReader.ChildrenIterator An iterator over a category's children. Interfaces ITaxonomyWriter ITaxonomyWriter is the interface which the faceted-search library uses to dynamically build the taxonomy at indexing time. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers and a single writer to be active concurrently. Readers follow so-called \"point in time\" semantics, i.e., a reader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called. Faceted search keeps two indices - namely Lucene's main index, and this taxonomy index. When one or more readers are active concurrently with the writer, care must be taken to avoid an inconsistency between the state of these two indices: When writing to the indices, the taxonomy must always be committed to disk before the main index, because the main index refers to categories listed in the taxonomy. Such control can best be achieved by turning off the main index's \"autocommit\" feature, and explicitly calling Commit() for both indices (first for the taxonomy, then for the main index). In old versions of Lucene (2.2 or earlier), when autocommit could not be turned off, a more complicated solution needs to be used. E.g., use some sort of (possibly inter-process) locking to ensure that a reader is being opened only right after both indices have been flushed (and before anything else is written to them). This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy.WriterCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy.WriterCache Classes Cl2oTaxonomyWriterCache ITaxonomyWriterCache using CompactLabelToOrdinal . Although called cache, it maintains in memory all the mappings from category to ordinal, relying on that CompactLabelToOrdinal is an efficient mapping for this purpose. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollisionMap HashMap to store colliding labels. See CompactLabelToOrdinal for details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompactLabelToOrdinal This is a very efficient LabelToOrdinal implementation that uses a Lucene.Net.Facet.Taxonomy.WriterCache.CharBlockArray to store all labels and a configurable number of Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to reference the labels. Since the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s don't handle collisions, a CollisionMap is used to store the colliding labels. This data structure grows by adding a new HashArray whenever the number of collisions in the CollisionMap exceeds Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor GetMaxOrdinal(). Growing also includes reinserting all colliding labels into the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to possibly reduce the number of collisions. For setting the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor see CompactLabelToOrdinal(Int32, Single, Int32) . This data structure has a much lower memory footprint (~30%) compared to a Java HashMap<String, Integer>. It also only uses a small fraction of objects a HashMap would use, thus limiting the GC overhead. Ingestion speed was also ~50% faster compared to a HashMap for 3M unique labels. @lucene.experimental LabelToOrdinal Abstract class for storing Label->Ordinal mappings in a taxonomy. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LruTaxonomyWriterCache LRU ITaxonomyWriterCache - good choice for huge taxonomies. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NameHashInt32CacheLRU An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. It uses as key, hash of the path instead of the path. This way the cache takes less RAM, but correctness depends on assuming no collisions. NOTE: this was NameHashIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk NameInt32CacheLRU An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. NOTE: This was NameIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces ITaxonomyWriterCache ITaxonomyWriterCache is a relatively simple interface for a cache of category->ordinal mappings, used in ITaxonomyWriter implementations (such as DirectoryTaxonomyWriter ). It basically has Put(FacetLabel, Int32) methods for adding a mapping, and Get(FacetLabel) for looking a mapping up the cache. The cache does not guarantee to hold everything that has been put into it, and might in fact selectively delete some of the mappings (e.g., the ones least recently used). This means that if Get(FacetLabel) returns a negative response, it does not necessarily mean that the category doesn't exist - just that it is not in the cache. The caller can only infer that the category doesn't exist if it knows the cache to be complete (because all the categories were loaded into the cache, and since then no Put(FacetLabel, Int32) returned true). However, if it does so, it should clear out large parts of the cache at once, because the user will typically need to work hard to recover from every cache cleanup (see Put(FacetLabel, Int32) 's return value). NOTE: the cache may be accessed concurrently by multiple threads, therefore cache implementations should take this into consideration. @lucene.experimental Enums LruTaxonomyWriterCache.LRUType Determines cache type. For guaranteed correctness - not relying on no-collisions in the hash function, LRU_STRING should be used."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameInt32CacheLRU.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameInt32CacheLRU.html",
    "title": "Class NameInt32CacheLRU | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NameInt32CacheLRU An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. NOTE: This was NameIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NameInt32CacheLRU NameHashInt32CacheLRU Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class NameInt32CacheLRU Remarks Note: Nothing in this class is synchronized. The caller is assumed to be synchronized so that no two methods of this class are called concurrently. Properties | Improve this Doc View Source Count Number of entries currently in the cache. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Limit Maximum number of cache entries before eviction. Declaration public virtual int Limit { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.LRUType.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.LRUType.html",
    "title": "Enum LruTaxonomyWriterCache.LRUType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum LruTaxonomyWriterCache.LRUType Determines cache type. For guaranteed correctness - not relying on no-collisions in the hash function, LRU_STRING should be used. Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public enum LRUType Fields Name Description LRU_HASHED Use the label's hash as the key; this can lead to silent conflicts! LRU_STRING Use the label as the hash key; this is always correct but will usually use more RAM."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LabelToOrdinal.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LabelToOrdinal.html",
    "title": "Class LabelToOrdinal | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LabelToOrdinal Abstract class for storing Label->Ordinal mappings in a taxonomy. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LabelToOrdinal CompactLabelToOrdinal Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public abstract class LabelToOrdinal Constructors | Improve this Doc View Source LabelToOrdinal() Default constructor. Declaration public LabelToOrdinal() Fields | Improve this Doc View Source INVALID_ORDINAL Returned by GetOrdinal(FacetLabel) when the label isn't recognized. Declaration public const int INVALID_ORDINAL = -2 Field Value Type Description System.Int32 | Improve this Doc View Source m_counter How many ordinals we've seen. Declaration protected int m_counter Field Value Type Description System.Int32 Properties | Improve this Doc View Source MaxOrdinal return the maximal Ordinal assigned so far Declaration public virtual int MaxOrdinal { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32) Adds a new label if its not yet in the table. Throws an System.ArgumentException if the same label with a different ordinal was previoulsy added to this table. Declaration public abstract void AddLabel(FacetLabel label, int ordinal) Parameters Type Name Description FacetLabel label System.Int32 ordinal | Improve this Doc View Source GetNextOrdinal() Returns the next unassigned ordinal. The default behavior of this method is to simply increment a counter. Declaration public virtual int GetNextOrdinal() Returns Type Description System.Int32 | Improve this Doc View Source GetOrdinal(FacetLabel) Returns the ordinal assigned to the given label, or INVALID_ORDINAL if the label cannot be found in this table. Declaration public abstract int GetOrdinal(FacetLabel label) Parameters Type Name Description FacetLabel label Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CollisionMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CollisionMap.html",
    "title": "Class CollisionMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollisionMap HashMap to store colliding labels. See CompactLabelToOrdinal for details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CollisionMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class CollisionMap Properties | Improve this Doc View Source Capacity How many slots are allocated. Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Count How many mappings. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32, Int32) Add another mapping. Declaration public virtual int AddLabel(FacetLabel label, int hash, int cid) Parameters Type Name Description FacetLabel label System.Int32 hash System.Int32 cid Returns Type Description System.Int32 | Improve this Doc View Source AddLabelOffset(Int32, Int32, Int32) This method does not check if the same value is already in the map because we pass in an char-array offset, so so we now that we're in resize-mode here. Declaration public virtual void AddLabelOffset(int hash, int offset, int cid) Parameters Type Name Description System.Int32 hash System.Int32 offset System.Int32 cid | Improve this Doc View Source Get(FacetLabel, Int32) Return the mapping, or INVALID_ORDINAL if the label isn't recognized. Declaration public virtual int Get(FacetLabel label, int hash) Parameters Type Name Description FacetLabel label System.Int32 hash Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.ChildrenIterator.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.ChildrenIterator.html",
    "title": "Class TaxonomyReader.ChildrenIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyReader.ChildrenIterator An iterator over a category's children. Inheritance System.Object TaxonomyReader.ChildrenIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class ChildrenIterator Methods | Improve this Doc View Source Next() Return the next child ordinal, or INVALID_ORDINAL if no more children. Declaration public virtual int Next() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.html",
    "title": "Namespace Lucene.Net.Codecs.IntBlock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.IntBlock Classes FixedInt32BlockIndexInput Abstract base class that reads fixed-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was FixedIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedInt32BlockIndexOutput Abstract base class that writes fixed-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was FixedIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableInt32BlockIndexInput Abstract base class that reads variable-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was VariableIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableInt32BlockIndexOutput Abstract base class that writes variable-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was VariableIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces FixedInt32BlockIndexInput.IBlockReader Interface for fixed-size block decoders. Implementations should decode into the buffer in ReadBlock() . VariableInt32BlockIndexInput.IBlockReader Interface for variable-size block decoders. Implementations should decode into the buffer in ReadBlock() ."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.IBlockReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.IBlockReader.html",
    "title": "Interface VariableInt32BlockIndexInput.IBlockReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface VariableInt32BlockIndexInput.IBlockReader Interface for variable-size block decoders. Implementations should decode into the buffer in ReadBlock() . Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public interface IBlockReader Methods | Improve this Doc View Source ReadBlock() Declaration int ReadBlock() Returns Type Description System.Int32 | Improve this Doc View Source Seek(Int64) Declaration void Seek(long pos) Parameters Type Name Description System.Int64 pos"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.IBlockReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.IBlockReader.html",
    "title": "Interface FixedInt32BlockIndexInput.IBlockReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FixedInt32BlockIndexInput.IBlockReader Interface for fixed-size block decoders. Implementations should decode into the buffer in ReadBlock() . Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public interface IBlockReader Methods | Improve this Doc View Source ReadBlock() Declaration void ReadBlock()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.html",
    "title": "Namespace Lucene.Net.Codecs.DiskDV | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.DiskDV Classes DiskDocValuesFormat DocValues format that keeps most things on disk. Only things like disk offsets are loaded into ram. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DiskNormsFormat Norms format that keeps all norms on disk."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.html",
    "title": "Namespace Lucene.Net.Codecs.Bloom | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Bloom Classes BloomFilterFactory Class used to create index-time FuzzySet appropriately configured for each field. Also called to right-size bitsets for serialization. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BloomFilteringPostingsFormat A PostingsFormat useful for low doc-frequency fields such as primary keys. Bloom filters are maintained in a \".blm\" file which offers \"fast-fail\" for reads in segments known to have no record of the key. A choice of delegate PostingsFormat is used to record all other Postings data. A choice of BloomFilterFactory can be passed to tailor Bloom Filter settings on a per-field basis. The default configuration is DefaultBloomFilterFactory which allocates a ~8mb bitset and hashes values using MurmurHash2 . This should be suitable for most purposes. The format of the blm file is as follows: BloomFilter (.blm) --> Header, DelegatePostingsFormatName, NumFilteredFields, Filter NumFilteredFields , Footer Filter --> FieldNumber, FuzzySet FuzzySet -->See Serialize(DataOutput) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DelegatePostingsFormatName --> String ( WriteString(String) ) The name of a ServiceProvider registered PostingsFormat NumFilteredFields --> Uint32 ( WriteInt32(Int32) ) FieldNumber --> Uint32 ( WriteInt32(Int32) ) The number of the field in this segment Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultBloomFilterFactory Default policy is to allocate a bitset with 10% saturation given a unique term per document. Bits are set via MurmurHash2 hashing function. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FuzzySet A class used to represent a set of many, potentially large, values (e.g. many long strings such as URLs), using a significantly smaller amount of memory. The set is \"lossy\" in that it cannot definitively state that is does contain a value but it can definitively say if a value is not in the set. It can therefore be used as a Bloom Filter. Another application of the set is that it can be used to perform fuzzy counting because it can estimate reasonably accurately how many unique values are contained in the set. This class is NOT threadsafe. Internally a Bitset is used to record values and once a client has finished recording a stream of values the Downsize(Single) method can be used to create a suitably smaller set that is sized appropriately for the number of values recorded and desired saturation levels. This is a Lucene.NET EXPERIMENTAL API, use at your own risk HashFunction Base class for hashing functions that can be referred to by name. Subclasses are expected to provide threadsafe implementations of the hash function on the range of bytes referenced in the provided BytesRef . This is a Lucene.NET EXPERIMENTAL API, use at your own risk MurmurHash2 This is a very fast, non-cryptographic hash suitable for general hash-based lookup. See http://murmurhash.googlepages.com/ for more details. The C version of MurmurHash 2.0 found at that site was ported to Java by Andrzej Bialecki (ab at getopt org). The code from getopt.org was adapted by Mark Harwood in the form here as one of a pluggable choice of hashing functions as the core function had to be adapted to work with BytesRef s with offsets and lengths rather than raw byte arrays. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums FuzzySet.ContainsResult"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.HashFunction.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.HashFunction.html",
    "title": "Class HashFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HashFunction Base class for hashing functions that can be referred to by name. Subclasses are expected to provide threadsafe implementations of the hash function on the range of bytes referenced in the provided BytesRef . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HashFunction MurmurHash2 Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public abstract class HashFunction Methods | Improve this Doc View Source Hash(BytesRef) Hashes the contents of the referenced bytes. Declaration public abstract int Hash(BytesRef bytes) Parameters Type Name Description BytesRef bytes The data to be hashed. Returns Type Description System.Int32 The hash of the bytes referenced by bytes.offset and length bytes.Length."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.html",
    "title": "Class FuzzySet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzySet A class used to represent a set of many, potentially large, values (e.g. many long strings such as URLs), using a significantly smaller amount of memory. The set is \"lossy\" in that it cannot definitively state that is does contain a value but it can definitively say if a value is not in the set. It can therefore be used as a Bloom Filter. Another application of the set is that it can be used to perform fuzzy counting because it can estimate reasonably accurately how many unique values are contained in the set. This class is NOT threadsafe. Internally a Bitset is used to record values and once a client has finished recording a stream of values the Downsize(Single) method can be used to create a suitably smaller set that is sized appropriately for the number of values recorded and desired saturation levels. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FuzzySet Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public class FuzzySet Fields | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_SPI Declaration public static readonly int VERSION_SPI Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddValue(BytesRef) Records a value in the set. The referenced bytes are hashed and then modulo n'd where n is the chosen size of the internal bitset. Declaration public virtual void AddValue(BytesRef value) Parameters Type Name Description BytesRef value The Key value to be hashed. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source Contains(BytesRef) The main method required for a Bloom filter which, given a value determines set membership. Unlike a conventional set, the fuzzy set returns NO or MAYBE rather than true or false . Declaration public virtual FuzzySet.ContainsResult Contains(BytesRef value) Parameters Type Name Description BytesRef value Returns Type Description FuzzySet.ContainsResult NO or MAYBE | Improve this Doc View Source CreateSetBasedOnMaxMemory(Int32) Declaration public static FuzzySet CreateSetBasedOnMaxMemory(int maxNumBytes) Parameters Type Name Description System.Int32 maxNumBytes Returns Type Description FuzzySet | Improve this Doc View Source CreateSetBasedOnQuality(Int32, Single) Declaration public static FuzzySet CreateSetBasedOnQuality(int maxNumUniqueValues, float desiredMaxSaturation) Parameters Type Name Description System.Int32 maxNumUniqueValues System.Single desiredMaxSaturation Returns Type Description FuzzySet | Improve this Doc View Source Deserialize(DataInput) Declaration public static FuzzySet Deserialize(DataInput input) Parameters Type Name Description DataInput input Returns Type Description FuzzySet | Improve this Doc View Source Downsize(Single) Declaration public virtual FuzzySet Downsize(float targetMaxSaturation) Parameters Type Name Description System.Single targetMaxSaturation A number between 0 and 1 describing the % of bits that would ideally be set in the result. Lower values have better accuracy but require more space. Returns Type Description FuzzySet | Improve this Doc View Source GetEstimatedNumberUniqueValuesAllowingForCollisions(Int32, Int32) Given a setSize and a the number of set bits, produces an estimate of the number of unique values recorded. Declaration public static int GetEstimatedNumberUniqueValuesAllowingForCollisions(int setSize, int numRecordedBits) Parameters Type Name Description System.Int32 setSize System.Int32 numRecordedBits Returns Type Description System.Int32 | Improve this Doc View Source GetEstimatedUniqueValues() Declaration public virtual int GetEstimatedUniqueValues() Returns Type Description System.Int32 | Improve this Doc View Source GetNearestSetSize(Int32) Rounds down required maxNumberOfBits to the nearest number that is made up of all ones as a binary number. Use this method where controlling memory use is paramount. Declaration public static int GetNearestSetSize(int maxNumberOfBits) Parameters Type Name Description System.Int32 maxNumberOfBits Returns Type Description System.Int32 | Improve this Doc View Source GetNearestSetSize(Int32, Single) Use this method to choose a set size where accuracy (low content saturation) is more important than deciding how much memory to throw at the problem. Declaration public static int GetNearestSetSize(int maxNumberOfValuesExpected, float desiredSaturation) Parameters Type Name Description System.Int32 maxNumberOfValuesExpected System.Single desiredSaturation A number between 0 and 1 expressing the % of bits set once all values have been recorded. Returns Type Description System.Int32 The size of the set nearest to the required size. | Improve this Doc View Source GetSaturation() Declaration public virtual float GetSaturation() Returns Type Description System.Single | Improve this Doc View Source HashFunctionForVersion(Int32) Declaration public static HashFunction HashFunctionForVersion(int version) Parameters Type Name Description System.Int32 version Returns Type Description HashFunction | Improve this Doc View Source RamBytesUsed() Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Serialize(DataOutput) Serializes the data set to file using the following format: FuzzySet -->FuzzySetVersion,HashFunctionName,BloomSize, NumBitSetWords,BitSetWord NumBitSetWords HashFunctionName --> String ( WriteString(String) ) The name of a ServiceProvider registered HashFunction FuzzySetVersion --> Uint32 ( WriteInt32(Int32) ) The version number of the FuzzySet class BloomSize --> Uint32 ( WriteInt32(Int32) ) The modulo value used to project hashes into the field's Bitset NumBitSetWords --> Uint32 ( WriteInt32(Int32) ) The number of longs (as returned from GetBits() ) BitSetWord --> Long ( WriteInt64(Int64) ) A long from the array returned by GetBits() Declaration public virtual void Serialize(DataOutput output) Parameters Type Name Description DataOutput output Data output stream. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.ContainsResult.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.FuzzySet.ContainsResult.html",
    "title": "Enum FuzzySet.ContainsResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum FuzzySet.ContainsResult Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public enum ContainsResult Remarks Result from Contains(BytesRef) : can never return definitively YES (always MAYBE), but can sometimes definitely return NO. Fields Name Description MAYBE NO"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilterFactory.html",
    "title": "Class JapaneseIterationMarkCharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseIterationMarkCharFilterFactory Factory for JapaneseIterationMarkCharFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"false\"> <analyzer> <charFilter class=\"solr.JapaneseIterationMarkCharFilterFactory normalizeKanji=\"true\" normalizeKana=\"true\"/> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory CharFilterFactory JapaneseIterationMarkCharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseIterationMarkCharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source JapaneseIterationMarkCharFilterFactory(IDictionary<String, String>) Creates a new JapaneseIterationMarkCharFilterFactory Declaration public JapaneseIterationMarkCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseIterationMarkCharFilter.html",
    "title": "Class JapaneseIterationMarkCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseIterationMarkCharFilter Normalizes Japanese horizontal iteration marks (odoriji) to their expanded form. Inheritance System.Object System.IO.TextReader CharFilter JapaneseIterationMarkCharFilter Implements System.IDisposable Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseIterationMarkCharFilter : CharFilter, IDisposable Remarks Sequences of iteration marks are supported. In case an illegal sequence of iteration marks is encountered, the implementation emits the illegal source character as-is without considering its script. For example, with input \"?ゝ\", we get \"??\" even though \"?\" isn't hiragana. Note that a full stop punctuation character \"。\" (U+3002) can not be iterated (see below). Iteration marks themselves can be emitted in case they are illegal, i.e. if they go back past the beginning of the character stream. The implementation buffers input until a full stop punctuation character (U+3002) or EOF is reached in order to not keep a copy of the character stream in memory. Vertical iteration marks, which are even rarer than horizontal iteration marks in contemporary Japanese, are unsupported. Constructors | Improve this Doc View Source JapaneseIterationMarkCharFilter(TextReader) Constructor. Normalizes both kanji and kana iteration marks by default. Declaration public JapaneseIterationMarkCharFilter(TextReader input) Parameters Type Name Description System.IO.TextReader input Char stream. | Improve this Doc View Source JapaneseIterationMarkCharFilter(TextReader, Boolean, Boolean) Constructor Declaration public JapaneseIterationMarkCharFilter(TextReader input, bool normalizeKanji, bool normalizeKana) Parameters Type Name Description System.IO.TextReader input Char stream. System.Boolean normalizeKanji Indicates whether kanji iteration marks should be normalized. System.Boolean normalizeKana Indicates whether kana iteration marks should be normalized. Fields | Improve this Doc View Source NORMALIZE_KANA_DEFAULT Normalize kana iteration marks by default Declaration public static readonly bool NORMALIZE_KANA_DEFAULT Field Value Type Description System.Boolean | Improve this Doc View Source NORMALIZE_KANJI_DEFAULT Normalize kanji iteration marks by default Declaration public static readonly bool NORMALIZE_KANJI_DEFAULT Field Value Type Description System.Boolean Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides CharFilter.Correct(Int32) | Improve this Doc View Source Read() Reads the next character from the text reader and advances the character position by one character. Declaration public override int Read() Returns Type Description System.Int32 The next character from the text reader, or -1 if no more characters are available. Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Reads a specified maximum number of characters from the current reader and writes the data to a buffer, beginning at the specified index. Declaration public override int Read(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer When this method returns, contains the specified character array with the values between index and (index + count - 1) replaced by the characters read from the current source. System.Int32 offset The position in buffer at which to begin writing. System.Int32 length The maximum number of characters to read. If the end of the reader is reached before the specified number of characters is read into the buffer, the method returns. Returns Type Description System.Int32 The number of characters that have been read. The number will be less than or equal to count, depending on whether the data is available within the reader. This method returns 0 (zero) if it is called when no more characters are left to read. Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilterFactory.html",
    "title": "Class JapaneseBaseFormFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseBaseFormFilterFactory Factory for JapaneseBaseFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseBaseFormFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseBaseFormFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseBaseFormFilterFactory(IDictionary<String, String>) Creates a new JapaneseBaseFormFilterFactory Declaration public JapaneseBaseFormFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilter.html",
    "title": "Class JapaneseBaseFormFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseBaseFormFilter Replaces term text with the IBaseFormAttribute . This acts as a lemmatizer for verbs and adjectives. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseBaseFormFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseBaseFormFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source JapaneseBaseFormFilter(TokenStream) Declaration public JapaneseBaseFormFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseAnalyzer.html",
    "title": "Class JapaneseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseAnalyzer Analyzer for Japanese that uses morphological analysis. Inheritance System.Object Analyzer StopwordAnalyzerBase JapaneseAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source JapaneseAnalyzer(LuceneVersion) Declaration public JapaneseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source JapaneseAnalyzer(LuceneVersion, UserDictionary, JapaneseTokenizerMode, CharArraySet, ISet<String>) Declaration public JapaneseAnalyzer(LuceneVersion matchVersion, UserDictionary userDict, JapaneseTokenizerMode mode, CharArraySet stopwords, ISet<string> stoptags) Parameters Type Name Description LuceneVersion matchVersion UserDictionary userDict JapaneseTokenizerMode mode CharArraySet stopwords System.Collections.Generic.ISet < System.String > stoptags Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetDefaultStopSet() Declaration public static CharArraySet GetDefaultStopSet() Returns Type Description CharArraySet | Improve this Doc View Source GetDefaultStopTags() Declaration public static ISet<string> GetDefaultStopTags() Returns Type Description System.Collections.Generic.ISet < System.String > Implements System.IDisposable See Also JapaneseTokenizer"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.GraphvizFormatter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.GraphvizFormatter.html",
    "title": "Class GraphvizFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GraphvizFormatter Outputs the dot (graphviz) string for the viterbi lattice. Inheritance System.Object GraphvizFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class GraphvizFormatter Constructors | Improve this Doc View Source GraphvizFormatter(ConnectionCosts) Declaration public GraphvizFormatter(ConnectionCosts costs) Parameters Type Name Description ConnectionCosts costs Methods | Improve this Doc View Source Finish() Declaration public virtual string Finish() Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.Dict | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.Dict Classes BinaryDictionary Base class for a binary-encoded in-memory dictionary. CharacterDefinition Character category data. ConnectionCosts n-gram connection cost data Dictionary TokenInfoDictionary Binary dictionary implementation for a known-word dictionary model: Words are encoded into an FST mapping to a list of wordIDs. TokenInfoFST Thin wrapper around an FST with root-arc caching for Japanese. Depending upon fasterButMoreRam, either just kana (191 arcs), or kana and han (28,607 arcs) are cached. The latter offers additional performance at the cost of more RAM. UnknownDictionary Dictionary for unknown-word handling. UserDictionary Class for building a User Dictionary. This class allows for custom segmentation of phrases. Interfaces IDictionary Dictionary interface for retrieving morphological data by id."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UserDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UserDictionary.html",
    "title": "Class UserDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UserDictionary Class for building a User Dictionary. This class allows for custom segmentation of phrases. Inheritance System.Object UserDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class UserDictionary : IDictionary Constructors | Improve this Doc View Source UserDictionary(TextReader) Declaration public UserDictionary(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Fields | Improve this Doc View Source LEFT_ID Declaration public static readonly int LEFT_ID Field Value Type Description System.Int32 | Improve this Doc View Source RIGHT_ID Declaration public static readonly int RIGHT_ID Field Value Type Description System.Int32 | Improve this Doc View Source WORD_COST Declaration public static readonly int WORD_COST Field Value Type Description System.Int32 Properties | Improve this Doc View Source FST Declaration public TokenInfoFST FST { get; } Property Value Type Description TokenInfoFST Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Declaration public string GetBaseForm(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetInflectionForm(Int32) Declaration public string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetInflectionType(Int32) Declaration public string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetLeftId(Int32) Declaration public int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetPartOfSpeech(Int32) Declaration public string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Declaration public string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetRightId(Int32) Declaration public int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetWordCost(Int32) Declaration public int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source Lookup(Char[], Int32, Int32) Lookup words in text. Declaration public int[][] Lookup(char[] chars, int off, int len) Parameters Type Name Description System.Char [] chars Text. System.Int32 off Offset into text. System.Int32 len Length of text. Returns Type Description System.Int32 [][] Array of {wordId, position, length}. | Improve this Doc View Source LookupSegmentation(Int32) Declaration public int[] LookupSegmentation(int phraseID) Parameters Type Name Description System.Int32 phraseID Returns Type Description System.Int32 [] Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UnknownDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.UnknownDictionary.html",
    "title": "Class UnknownDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionary Dictionary for unknown-word handling. Inheritance System.Object BinaryDictionary UnknownDictionary Implements IDictionary Inherited Members BinaryDictionary.DICT_FILENAME_SUFFIX BinaryDictionary.TARGETMAP_FILENAME_SUFFIX BinaryDictionary.POSDICT_FILENAME_SUFFIX BinaryDictionary.DICT_HEADER BinaryDictionary.TARGETMAP_HEADER BinaryDictionary.POSDICT_HEADER BinaryDictionary.VERSION BinaryDictionary.GetResource(String) BinaryDictionary.GetTypeResource(Type, String) BinaryDictionary.LookupWordIds(Int32, Int32sRef) BinaryDictionary.GetLeftId(Int32) BinaryDictionary.GetRightId(Int32) BinaryDictionary.GetWordCost(Int32) BinaryDictionary.GetBaseForm(Int32, Char[], Int32, Int32) BinaryDictionary.GetPartOfSpeech(Int32) BinaryDictionary.GetPronunciation(Int32, Char[], Int32, Int32) BinaryDictionary.HAS_BASEFORM BinaryDictionary.HAS_READING BinaryDictionary.HAS_PRONUNCIATION System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionary : BinaryDictionary, IDictionary Properties | Improve this Doc View Source CharacterDefinition Declaration public virtual CharacterDefinition CharacterDefinition { get; } Property Value Type Description CharacterDefinition Methods | Improve this Doc View Source GetInflectionForm(Int32) Declaration public override string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String Overrides BinaryDictionary.GetInflectionForm(Int32) | Improve this Doc View Source GetInflectionType(Int32) Declaration public override string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String Overrides BinaryDictionary.GetInflectionType(Int32) | Improve this Doc View Source GetInstance() Declaration public static UnknownDictionary GetInstance() Returns Type Description UnknownDictionary | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public override string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Overrides BinaryDictionary.GetReading(Int32, Char[], Int32, Int32) | Improve this Doc View Source Lookup(Char[], Int32, Int32) Declaration public virtual int Lookup(char[] text, int offset, int len) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 len Returns Type Description System.Int32 Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoFST.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoFST.html",
    "title": "Class TokenInfoFST | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoFST Thin wrapper around an FST with root-arc caching for Japanese. Depending upon fasterButMoreRam, either just kana (191 arcs), or kana and han (28,607 arcs) are cached. The latter offers additional performance at the cost of more RAM. Inheritance System.Object TokenInfoFST Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class TokenInfoFST Constructors | Improve this Doc View Source TokenInfoFST(FST<Nullable<Int64>>, Boolean) Declaration public TokenInfoFST(FST<long?> fst, bool fasterButMoreRam) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Boolean fasterButMoreRam Properties | Improve this Doc View Source NoOutput Declaration public long? NoOutput { get; } Property Value Type Description System.Nullable < System.Int64 > Methods | Improve this Doc View Source FindTargetArc(Int32, FST.Arc<Nullable<Int64>>, FST.Arc<Nullable<Int64>>, Boolean, FST.BytesReader) Declaration public FST.Arc<long?> FindTargetArc(int ch, FST.Arc<long?> follow, FST.Arc<long?> arc, bool useCache, FST.BytesReader fstReader) Parameters Type Name Description System.Int32 ch FST.Arc < System.Nullable < System.Int64 >> follow FST.Arc < System.Nullable < System.Int64 >> arc System.Boolean useCache FST.BytesReader fstReader Returns Type Description FST.Arc < System.Nullable < System.Int64 >> | Improve this Doc View Source GetBytesReader() Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader | Improve this Doc View Source GetFirstArc(FST.Arc<Nullable<Int64>>) Declaration public FST.Arc<long?> GetFirstArc(FST.Arc<long?> arc) Parameters Type Name Description FST.Arc < System.Nullable < System.Int64 >> arc Returns Type Description FST.Arc < System.Nullable < System.Int64 >>"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.TokenInfoDictionary.html",
    "title": "Class TokenInfoDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionary Binary dictionary implementation for a known-word dictionary model: Words are encoded into an FST mapping to a list of wordIDs. Inheritance System.Object BinaryDictionary TokenInfoDictionary Implements IDictionary Inherited Members BinaryDictionary.DICT_FILENAME_SUFFIX BinaryDictionary.TARGETMAP_FILENAME_SUFFIX BinaryDictionary.POSDICT_FILENAME_SUFFIX BinaryDictionary.DICT_HEADER BinaryDictionary.TARGETMAP_HEADER BinaryDictionary.POSDICT_HEADER BinaryDictionary.VERSION BinaryDictionary.GetResource(String) BinaryDictionary.GetTypeResource(Type, String) BinaryDictionary.LookupWordIds(Int32, Int32sRef) BinaryDictionary.GetLeftId(Int32) BinaryDictionary.GetRightId(Int32) BinaryDictionary.GetWordCost(Int32) BinaryDictionary.GetBaseForm(Int32, Char[], Int32, Int32) BinaryDictionary.GetReading(Int32, Char[], Int32, Int32) BinaryDictionary.GetPartOfSpeech(Int32) BinaryDictionary.GetPronunciation(Int32, Char[], Int32, Int32) BinaryDictionary.GetInflectionType(Int32) BinaryDictionary.GetInflectionForm(Int32) BinaryDictionary.HAS_BASEFORM BinaryDictionary.HAS_READING BinaryDictionary.HAS_PRONUNCIATION System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class TokenInfoDictionary : BinaryDictionary, IDictionary Fields | Improve this Doc View Source FST_FILENAME_SUFFIX Declaration public static readonly string FST_FILENAME_SUFFIX Field Value Type Description System.String Properties | Improve this Doc View Source FST Declaration public TokenInfoFST FST { get; } Property Value Type Description TokenInfoFST Methods | Improve this Doc View Source GetInstance() Declaration public static TokenInfoDictionary GetInstance() Returns Type Description TokenInfoDictionary Implements IDictionary"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.IDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.IDictionary.html",
    "title": "Interface IDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDictionary Dictionary interface for retrieving morphological data by id. Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IDictionary Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Get base form of word. Declaration string GetBaseForm(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Base form (only different for inflected words, otherwise null). | Improve this Doc View Source GetInflectionForm(Int32) Get inflection form of tokens. Declaration string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Inflection form, or null. | Improve this Doc View Source GetInflectionType(Int32) Get inflection type of tokens. Declaration string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Inflection type, or null. | Improve this Doc View Source GetLeftId(Int32) Get left id of specified word. Declaration int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Left id. | Improve this Doc View Source GetPartOfSpeech(Int32) Get Part-Of-Speech of tokens Declaration string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Part-Of-Speech of the token. | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Get pronunciation of tokens Declaration string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Pronunciation of the token. | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Get reading of tokens. Declaration string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Reading of the token. | Improve this Doc View Source GetRightId(Int32) Get right id of specified word. Declaration int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Right id. | Improve this Doc View Source GetWordCost(Int32) Get word cost of specified word Declaration int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Word's cost."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.Dictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.Dictionary.html",
    "title": "Class Dictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Dictionary Inheritance System.Object Dictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class Dictionary Fields | Improve this Doc View Source INTERNAL_SEPARATOR Declaration public static readonly string INTERNAL_SEPARATOR Field Value Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.ConnectionCosts.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.ConnectionCosts.html",
    "title": "Class ConnectionCosts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCosts n-gram connection cost data Inheritance System.Object ConnectionCosts Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class ConnectionCosts Fields | Improve this Doc View Source FILENAME_SUFFIX Declaration public static readonly string FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source HEADER Declaration public static readonly string HEADER Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32, Int32) Declaration public int Get(int forwardId, int backwardId) Parameters Type Name Description System.Int32 forwardId System.Int32 backwardId Returns Type Description System.Int32 | Improve this Doc View Source GetInstance() Declaration public static ConnectionCosts GetInstance() Returns Type Description ConnectionCosts"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.CharacterDefinition.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.CharacterDefinition.html",
    "title": "Class CharacterDefinition | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterDefinition Character category data. Inheritance System.Object CharacterDefinition Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CharacterDefinition Fields | Improve this Doc View Source ALPHA Declaration public static readonly byte ALPHA Field Value Type Description System.Byte | Improve this Doc View Source CLASS_COUNT Declaration public static readonly int CLASS_COUNT Field Value Type Description System.Int32 | Improve this Doc View Source CYRILLIC Declaration public static readonly byte CYRILLIC Field Value Type Description System.Byte | Improve this Doc View Source DEFAULT Declaration public static readonly byte DEFAULT Field Value Type Description System.Byte | Improve this Doc View Source FILENAME_SUFFIX Declaration public static readonly string FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source GREEK Declaration public static readonly byte GREEK Field Value Type Description System.Byte | Improve this Doc View Source HEADER Declaration public static readonly string HEADER Field Value Type Description System.String | Improve this Doc View Source HIRAGANA Declaration public static readonly byte HIRAGANA Field Value Type Description System.Byte | Improve this Doc View Source KANJI Declaration public static readonly byte KANJI Field Value Type Description System.Byte | Improve this Doc View Source KANJINUMERIC Declaration public static readonly byte KANJINUMERIC Field Value Type Description System.Byte | Improve this Doc View Source KATAKANA Declaration public static readonly byte KATAKANA Field Value Type Description System.Byte | Improve this Doc View Source NGRAM Declaration public static readonly byte NGRAM Field Value Type Description System.Byte | Improve this Doc View Source NUMERIC Declaration public static readonly byte NUMERIC Field Value Type Description System.Byte | Improve this Doc View Source SPACE Declaration public static readonly byte SPACE Field Value Type Description System.Byte | Improve this Doc View Source SYMBOL Declaration public static readonly byte SYMBOL Field Value Type Description System.Byte | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetCharacterClass(Char) Declaration public byte GetCharacterClass(char c) Parameters Type Name Description System.Char c Returns Type Description System.Byte | Improve this Doc View Source GetInstance() Declaration public static CharacterDefinition GetInstance() Returns Type Description CharacterDefinition | Improve this Doc View Source IsGroup(Char) Declaration public bool IsGroup(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source IsInvoke(Char) Declaration public bool IsInvoke(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source IsKanji(Char) Declaration public bool IsKanji(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source LookupCharacterClass(String) Declaration public static byte LookupCharacterClass(string characterClassName) Parameters Type Name Description System.String characterClassName Returns Type Description System.Byte"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.BinaryDictionary.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Dict.BinaryDictionary.html",
    "title": "Class BinaryDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDictionary Base class for a binary-encoded in-memory dictionary. Inheritance System.Object BinaryDictionary TokenInfoDictionary TokenInfoDictionary UnknownDictionary UnknownDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public abstract class BinaryDictionary : IDictionary Constructors | Improve this Doc View Source BinaryDictionary() Declaration protected BinaryDictionary() Fields | Improve this Doc View Source DICT_FILENAME_SUFFIX Declaration public static readonly string DICT_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source DICT_HEADER Declaration public static readonly string DICT_HEADER Field Value Type Description System.String | Improve this Doc View Source HAS_BASEFORM flag that the entry has baseform data. otherwise its not inflected (same as surface form) Declaration public static readonly int HAS_BASEFORM Field Value Type Description System.Int32 | Improve this Doc View Source HAS_PRONUNCIATION flag that the entry has pronunciation data. otherwise pronunciation is the reading Declaration public static readonly int HAS_PRONUNCIATION Field Value Type Description System.Int32 | Improve this Doc View Source HAS_READING flag that the entry has reading data. otherwise reading is surface form converted to katakana Declaration public static readonly int HAS_READING Field Value Type Description System.Int32 | Improve this Doc View Source POSDICT_FILENAME_SUFFIX Declaration public static readonly string POSDICT_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source POSDICT_HEADER Declaration public static readonly string POSDICT_HEADER Field Value Type Description System.String | Improve this Doc View Source TARGETMAP_FILENAME_SUFFIX Declaration public static readonly string TARGETMAP_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source TARGETMAP_HEADER Declaration public static readonly string TARGETMAP_HEADER Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Declaration public virtual string GetBaseForm(int wordId, char[] surfaceForm, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surfaceForm System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetInflectionForm(Int32) Declaration public virtual string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetInflectionType(Int32) Declaration public virtual string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetLeftId(Int32) Declaration public virtual int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetPartOfSpeech(Int32) Declaration public virtual string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Declaration public virtual string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public virtual string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetResource(String) Declaration protected Stream GetResource(string suffix) Parameters Type Name Description System.String suffix Returns Type Description System.IO.Stream | Improve this Doc View Source GetRightId(Int32) Declaration public virtual int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetTypeResource(Type, String) Declaration public static Stream GetTypeResource(Type clazz, string suffix) Parameters Type Name Description System.Type clazz System.String suffix Returns Type Description System.IO.Stream | Improve this Doc View Source GetWordCost(Int32) Declaration public virtual int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source LookupWordIds(Int32, Int32sRef) Declaration public virtual void LookupWordIds(int sourceId, Int32sRef ref) Parameters Type Name Description System.Int32 sourceId Int32sRef ref Implements IDictionary"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic.Language.Bm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic.Language.Bm Classes BeiderMorseEncoder Encodes strings into their Beider-Morse phonetic encoding. Lang Language guessing utility. Languages Language codes. LanguageSet A set of languages. NameTypeExtensions Phoneme PhonemeList PhoneticEngine Converts words into potential phonetic representations. Rule A phoneme rule. RuleTypeExtensions SomeLanguages Some languages, explicitly enumerated. Interfaces IPhonemeExpr IRPattern A minimal wrapper around the functionality of Rule Pattern that we use, to allow for alternate implementations. Enums NameType Supported types of names. Unless you are matching particular family names, use GENERIC . The GENERIC NameType should work reasonably well for non-name words. The other encodings are specifically tuned to family names, and may not work well at all for general text. since 1.6 RuleType Types of rule. since 1.6"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleTypeExtensions.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleTypeExtensions.html",
    "title": "Class RuleTypeExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RuleTypeExtensions Inheritance System.Object RuleTypeExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public static class RuleTypeExtensions Methods | Improve this Doc View Source GetName(RuleType) Gets the rule name. Declaration public static string GetName(this RuleType ruleType) Parameters Type Name Description RuleType ruleType The RuleType . Returns Type Description System.String The rule name."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleType.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.RuleType.html",
    "title": "Enum RuleType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum RuleType Types of rule. since 1.6 Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public enum RuleType Fields Name Description APPROX Approximate rules, which will lead to the largest number of phonetic interpretations. EXACT Exact rules, which will lead to a minimum number of phonetic interpretations. RULES For internal use only. Please use APPROX or EXACT . Extension Methods RuleTypeExtensions.GetName()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.Rule.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.Rule.html",
    "title": "Class Rule | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Rule A phoneme rule. Inheritance System.Object Rule Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.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 static readonly string ALL Field Value Type Description System.String | Improve this Doc View Source ALL_STRINGS_RMATCHER Declaration public static readonly IRPattern ALL_STRINGS_RMATCHER Field Value Type Description IRPattern Properties | Improve this Doc View Source LContext Gets the left context pattern. This is a regular expression that must match to the left of the pattern. Declaration public virtual IRPattern LContext { get; } Property Value Type Description IRPattern | Improve this Doc View Source Pattern Gets the pattern. This is a string-literal that must exactly match. Declaration public virtual string Pattern { get; } Property Value Type Description System.String | Improve this Doc View Source Phoneme Gets the phoneme. If the rule matches, this is the phoneme associated with the pattern match. Declaration public virtual IPhonemeExpr Phoneme { get; } Property Value Type Description IPhonemeExpr | Improve this Doc View Source RContext Gets the right context pattern. This is a regular expression that must match to the right of the pattern. Declaration public virtual IRPattern RContext { get; } Property Value Type Description IRPattern Methods | Improve this Doc View Source GetInstance(NameType, RuleType, LanguageSet) Gets rules for a combination of name type, rule type and languages. Declaration public static IList<Rule> GetInstance(NameType nameType, RuleType rt, LanguageSet langs) Parameters Type Name Description NameType nameType The NameType to consider. RuleType rt The RuleType to consider. LanguageSet langs The set of languages to consider. Returns Type Description 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 ICharSequence input The input ICharSequence . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise. | Improve this Doc View Source PatternAndContextMatches(String, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(string input, int i) Parameters Type Name Description System.String input The input System.String . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise. | Improve this Doc View Source PatternAndContextMatches(StringBuilder, Int32) Decides if the pattern and context match the input starting at a position. It is a match if the LContext matches input up to i , Pattern matches at i and RContext matches from the end of the match of Pattern to the end of input . Declaration public virtual bool PatternAndContextMatches(StringBuilder input, int i) Parameters Type Name Description System.Text.StringBuilder input The input System.Text.StringBuilder . System.Int32 i The int position within the input. Returns Type Description System.Boolean true if the pattern and left/right context match, false otherwise."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.PhoneticEngine.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.PhoneticEngine.html",
    "title": "Class PhoneticEngine | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhoneticEngine Converts words into potential phonetic representations. Inheritance System.Object PhoneticEngine Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class PhoneticEngine Remarks This is a two-stage process. Firstly, the word is converted into a phonetic representation that takes into account the likely source language. Next, this phonetic representation is converted into a pan-European 'average' representation, allowing comparison between different versions of essentially the same word from different languages. This class is intentionally immutable and thread-safe. If you wish to alter the settings for a PhoneticEngine, you must make a new one with the updated settings. Ported from phoneticengine.php since 1.6 Constructors | Improve this Doc View Source PhoneticEngine(NameType, RuleType, Boolean) Generates a new, fully-configured phonetic engine. Declaration public PhoneticEngine(NameType nameType, RuleType ruleType, bool concat) Parameters Type Name Description NameType nameType The type of names it will use. RuleType ruleType The type of rules it will apply. System.Boolean concat If it will concatenate multiple encodings. | Improve this Doc View Source PhoneticEngine(NameType, RuleType, Boolean, Int32) Generates a new, fully-configured phonetic engine. since 1.7 Declaration public PhoneticEngine(NameType nameType, RuleType ruleType, bool concat, int maxPhonemes) Parameters Type Name Description NameType nameType The type of names it will use. RuleType ruleType The type of rules it will apply. System.Boolean concat If it will concatenate multiple encodings. System.Int32 maxPhonemes The maximum number of phonemes that will be handled. Properties | Improve this Doc View Source IsConcat Gets if multiple phonetic encodings are concatenated or if just the first one is kept. Returns true if multiple phonetic encodings are returned, false if just the first is. Declaration public virtual bool IsConcat { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Lang Gets the Lang language guessing rules being used. Declaration public virtual Lang Lang { get; } Property Value Type Description Lang | Improve this Doc View Source MaxPhonemes Gets the maximum number of phonemes the engine will calculate for a given input. since 1.7 Declaration public virtual int MaxPhonemes { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NameType Gets the NameType being used. Declaration public virtual NameType NameType { get; } Property Value Type Description NameType | Improve this Doc View Source RuleType Gets the RuleType being used. Declaration public virtual RuleType RuleType { get; } Property Value Type Description RuleType Methods | Improve this Doc View Source Encode(String) Encodes a string to its phonetic representation. Declaration public virtual string Encode(string input) Parameters Type Name Description System.String input The string to encode. Returns Type Description System.String The encoding of the input. | Improve this Doc View Source Encode(String, LanguageSet) Encodes an input string into an output phonetic representation, given a set of possible origin languages. Declaration public virtual string Encode(string input, LanguageSet languageSet) Parameters Type Name Description System.String input String to phoneticise; a string with dashes or spaces separating each word. LanguageSet languageSet Returns Type Description System.String A phonetic representation of the input; a string containing '-'-separated phonetic representations of the input."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.NameTypeExtensions.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.NameTypeExtensions.html",
    "title": "Class NameTypeExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NameTypeExtensions Inheritance System.Object NameTypeExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public static class NameTypeExtensions Methods | Improve this Doc View Source GetName(NameType) Gets the short version of the name type. Declaration public static string GetName(this NameType nameType) Parameters Type Name Description NameType nameType the NameType Returns Type Description System.String the NameType short string"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.NameType.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.NameType.html",
    "title": "Enum NameType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NameType Supported types of names. Unless you are matching particular family names, use GENERIC . The GENERIC NameType should work reasonably well for non-name words. The other encodings are specifically tuned to family names, and may not work well at all for general text. since 1.6 Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public enum NameType Fields Name Description ASHKENAZI Ashkenazi family names GENERIC Generic names and words SEPHARDIC Sephardic family names Extension Methods NameTypeExtensions.GetName()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.LanguageSet.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.LanguageSet.html",
    "title": "Class LanguageSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LanguageSet A set of languages. Inheritance System.Object LanguageSet SomeLanguages Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public abstract class LanguageSet Properties | Improve this Doc View Source IsEmpty Declaration public abstract bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsSingleton Declaration public abstract bool IsSingleton { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Contains(String) Declaration public abstract bool Contains(string language) Parameters Type Name Description System.String language Returns Type Description System.Boolean | Improve this Doc View Source From(ISet<String>) Declaration public static LanguageSet From(ISet<string> langs) Parameters Type Name Description System.Collections.Generic.ISet < System.String > langs Returns Type Description LanguageSet | Improve this Doc View Source GetAny() Declaration public abstract string GetAny() Returns Type Description System.String | Improve this Doc View Source RestrictTo(LanguageSet) Declaration public abstract LanguageSet RestrictTo(LanguageSet other) Parameters Type Name Description LanguageSet other Returns Type Description LanguageSet"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.Languages.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.Languages.html",
    "title": "Class Languages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Languages Language codes. Inheritance System.Object Languages Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Languages Remarks Language codes are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm. NameType _languages.txt The format of these resources is the following: Language:A single string containing no whitespace. End-of-line comments:Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments:Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines:All blank lines will be skipped. Ported from language.php This class is immutable and thread-safe. since 1.6 Fields | Improve this Doc View Source ANY Declaration public static readonly string ANY Field Value Type Description System.String | Improve this Doc View Source ANY_LANGUAGE Any/all languages. Declaration public static readonly LanguageSet ANY_LANGUAGE Field Value Type Description LanguageSet | Improve this Doc View Source NO_LANGUAGES No languages at all. Declaration public static readonly LanguageSet NO_LANGUAGES Field Value Type Description LanguageSet Methods | Improve this Doc View Source GetInstance(NameType) Declaration public static Languages GetInstance(NameType nameType) Parameters Type Name Description NameType nameType Returns Type Description Languages | Improve this Doc View Source GetInstance(String) Declaration public static Languages GetInstance(string languagesResourceName) Parameters Type Name Description System.String languagesResourceName Returns Type Description Languages | Improve this Doc View Source GetLanguages() Declaration public virtual ISet<string> GetLanguages() Returns Type Description System.Collections.Generic.ISet < System.String >"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.Lang.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.Lang.html",
    "title": "Class Lang | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lang Language guessing utility. Inheritance System.Object Lang Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Lang Remarks This class encapsulates rules used to guess the possible languages that a word originates from. This is done by reference to a whole series of rules distributed in resource files. Instances of this class are typically managed through the static factory method GetInstance(NameType) . Unless you are developing your own language guessing rules, you will not need to interact with this class directly. This class is intended to be immutable and thread-safe. Lang resources Language guessing rules are typically loaded from resource files. These are UTF-8 encoded text files. They are systematically named following the pattern: Lucene.Net.Analysis.Phonetic.Language.Bm.lang.txt The format of these resources is the following: Rules: Whitespace separated strings. There should be 3 columns to each row, and these will be interpreted as: pattern:a regular expression. languages:a '+'-separated list of languages. acceptOnMatch:'true' or 'false' indicating if a match rules in or rules out the language. End-of-line comments: Any occurrence of '//' will cause all text following on that line to be discarded as a comment. Multi-line comments: Any line starting with '/ ' will start multi-line commenting mode. This will skip all content until a line ending in ' ' and '/' is found. Blank lines: All blank lines will be skipped. Port of lang.php since 1.6 Methods | Improve this Doc View Source GetInstance(NameType) Gets a Lang instance for one of the supported NameType s. Declaration public static Lang GetInstance(NameType nameType) Parameters Type Name Description NameType nameType The NameType to look up. Returns Type Description Lang A Lang encapsulating the language guessing rules for that name type. | Improve this Doc View Source GuessLanguage(String) Guesses the language of a word. Declaration public virtual string GuessLanguage(string text) Parameters Type Name Description System.String text The word. Returns Type Description System.String The language that the word originates from or ANY if there was no unique match. | Improve this Doc View Source GuessLanguages(String) Guesses the languages of a word. Declaration public virtual LanguageSet GuessLanguages(string input) Parameters Type Name Description System.String input The word. Returns Type Description LanguageSet A Set of Strings of language names that are potential matches for the input word. | Improve this Doc View Source LoadFromResource(String, Languages) Loads language rules from a resource. In normal use, you will obtain instances of Lang through the GetInstance(NameType) method. You will only need to call this yourself if you are developing custom language mapping rules. Declaration public static Lang LoadFromResource(string languageRulesResourceName, Languages languages) Parameters Type Name Description System.String languageRulesResourceName The fully-qualified or partially-qualified resource name to load. Languages languages The languages that these rules will support. Returns Type Description Lang A Lang encapsulating the loaded language-guessing rules."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.IRPattern.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.IRPattern.html",
    "title": "Interface IRPattern | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRPattern A minimal wrapper around the functionality of Rule Pattern that we use, to allow for alternate implementations. Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IRPattern Methods | Improve this Doc View Source IsMatch(ICharSequence) Declaration bool IsMatch(ICharSequence input) Parameters Type Name Description ICharSequence input Returns Type Description System.Boolean | Improve this Doc View Source IsMatch(String) Declaration bool IsMatch(string input) Parameters Type Name Description System.String input Returns Type Description System.Boolean | Improve this Doc View Source IsMatch(StringBuilder) Declaration bool IsMatch(StringBuilder input) Parameters Type Name Description System.Text.StringBuilder input Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanMinimalStemmer.html",
    "title": "Class GermanMinimalStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanMinimalStemmer Minimal Stemmer for German. This stemmer implements the following algorithm: Morphologie et recherche d'information Jacques Savoy. Inheritance System.Object GermanMinimalStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanMinimalStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanLightStemmer.html",
    "title": "Class GermanLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanLightStemmer Light Stemmer for German. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy Inheritance System.Object GermanLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Da.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Da.html",
    "title": "Namespace Lucene.Net.Analysis.Da | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Da Classes DanishAnalyzer Analyzer for Danish."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.html",
    "title": "Namespace Lucene.Net.Analysis.Cz | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cz Classes CzechAnalyzer Analyzer for Czech language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating CzechAnalyzer : As of 3.1, words are stemmed with CzechStemFilter As of 2.9, StopFilter preserves position increments As of 2.4, Tokens incorrectly identified as acronyms are corrected (see LUCENE-1068 ) CzechStemFilter A TokenFilter that applies CzechStemmer to stem Czech words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE : Input is expected to be in lowercase, but with diacritical marks CzechStemFilterFactory Factory for CzechStemFilter . <fieldType name=\"text_czstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CzechStemFilterFactory\"/> </analyzer> </fieldType> CzechStemmer Light Stemmer for Czech. Implements the algorithm described in: Indexing and stemming approaches for the Czech language http://portal.acm.org/citation.cfm?id=1598600"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.CzechStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.CzechStemmer.html",
    "title": "Class CzechStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CzechStemmer Light Stemmer for Czech. Implements the algorithm described in: Indexing and stemming approaches for the Czech language http://portal.acm.org/citation.cfm?id=1598600 Inheritance System.Object CzechStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CzechStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Czech text. NOTE : Input is expected to be in lowercase, but with diacritical marks Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.html",
    "title": "Namespace Lucene.Net.Analysis.Core | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Core Classes KeywordAnalyzer \"Tokenizes\" the entire stream as a single token. This is useful for data like zip codes, ids, and some product names. KeywordTokenizer Emits the entire input as a single token. KeywordTokenizerFactory Factory for KeywordTokenizer . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> LetterTokenizer A LetterTokenizer is a tokenizer that divides text at non-letters. That's to say, it defines tokens as maximal strings of adjacent letters, as defined by System.Char.IsLetter(System.Char) predicate. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LetterTokenizer : As of 3.1, CharTokenizer uses an System.Int32 based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. LetterTokenizerFactory Factory for LetterTokenizer . <fieldType name=\"text_letter\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LetterTokenizerFactory\"/> </analyzer> </fieldType> LowerCaseFilter Normalizes token text to lower case. You must specify the required LuceneVersion compatibility when creating LowerCaseFilter: As of 3.1, supplementary characters are properly lowercased. LowerCaseFilterFactory Factory for LowerCaseFilter . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> </analyzer> </fieldType> LowerCaseTokenizer LowerCaseTokenizer performs the function of LetterTokenizer and LowerCaseFilter together. It divides text at non-letters and converts them to lower case. While it is functionally equivalent to the combination of LetterTokenizer and LowerCaseFilter , there is a performance advantage to doing the two tasks at once, hence this (redundant) implementation. Note: this does a decent job for most European languages, but does a terrible job for some Asian languages, where words are not separated by spaces. You must specify the required LuceneVersion compatibility when creating LowerCaseTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. LowerCaseTokenizerFactory Factory for LowerCaseTokenizer . <fieldType name=\"text_lwrcase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.LowerCaseTokenizerFactory\"/> </analyzer> </fieldType> SimpleAnalyzer An Analyzer that filters LetterTokenizer with LowerCaseFilter You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, LowerCaseTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. StopAnalyzer Filters LetterTokenizer with LowerCaseFilter and StopFilter . You must specify the required LuceneVersion compatibility when creating StopAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, position increments are preserved StopFilter Removes stop words from a token stream. You must specify the required LuceneVersion compatibility when creating StopFilter : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords and position increments are preserved StopFilterFactory Factory for StopFilter . <fieldType name=\"text_stop\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"true\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\" words=\"stopwords.txt\" format=\"wordset\" /> </analyzer> </fieldType> All attributes are optional: ignoreCase defaults to false words should be the name of a stopwords file to parse, if not specified the factory will use ENGLISH_STOP_WORDS_SET format defines how the words file will be parsed, and defaults to wordset . If words is not specified, then format must not be specified. The valid values for the format option are: wordset - This is the default format, which supports one word per line (including any intra-word whitespace) and allows whole line comments begining with the \"#\" character. Blank lines are ignored. See GetLines(Stream, Encoding) for details. snowball - This format allows for multiple words specified on each line, and trailing comments may be specified using the vertical line (\"|\"). Blank lines are ignored. See GetSnowballWordSet(TextReader, LuceneVersion) for details. TypeTokenFilter Removes tokens whose types appear in a set of blocked types from a token stream. TypeTokenFilterFactory Factory class for TypeTokenFilter . <fieldType name=\"chars\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TypeTokenFilterFactory\" types=\"stoptypes.txt\" useWhitelist=\"false\"/> </analyzer> </fieldType> UpperCaseFilter Normalizes token text to UPPER CASE. You must specify the required LuceneVersion compatibility when creating UpperCaseFilter NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you Require uppercase tokens. Use the LowerCaseFilter for general search matching UpperCaseFilterFactory Factory for UpperCaseFilter . <fieldType name=\"text_uppercase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.UpperCaseFilterFactory\"/> </analyzer> </fieldType> NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you require uppercase tokens. Use the LowerCaseFilterFactory for general search matching WhitespaceAnalyzer An Analyzer that uses WhitespaceTokenizer . You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, WhitespaceTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. WhitespaceTokenizer A WhitespaceTokenizer is a tokenizer that divides text at whitespace. Adjacent sequences of non-Whitespace characters form tokens. You must specify the required LuceneVersion compatibility when creating WhitespaceTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. WhitespaceTokenizerFactory Factory for WhitespaceTokenizer . <fieldType name=\"text_ws\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.DiffIt.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.DiffIt.html",
    "title": "Class DiffIt | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DiffIt The DiffIt class is a means generate patch commands from an already prepared stemmer table. Inheritance System.Object DiffIt Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class DiffIt Methods | Improve this Doc View Source Main(String[]) Entry point to the DiffIt application. This application takes one argument, the path to a file containing a stemmer table. The program reads the file and generates the patch commands for the stems. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args the path to a file containing a stemmer table"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Diff.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Diff.html",
    "title": "Class Diff | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Diff The Diff object generates a patch string. A patch string is actually a command to a stemmer telling it how to reduce a word to its root. For example, to reduce the word teacher to its root teach the patch string Db would be generated. This command tells the stemmer to delete the last 2 characters from the word teacher to reach the stem (the patch commands are applied starting from the last character in order to save Inheritance System.Object Diff Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Diff Constructors | Improve this Doc View Source Diff() Constructor for the Diff object. Declaration public Diff() | Improve this Doc View Source Diff(Int32, Int32, Int32, Int32) Constructor for the Diff object Declaration public Diff(int ins, int del, int rep, int noop) Parameters Type Name Description System.Int32 ins Description of the Parameter System.Int32 del Description of the Parameter System.Int32 rep Description of the Parameter System.Int32 noop Description of the Parameter Methods | Improve this Doc View Source Apply(StringBuilder, String) Apply the given patch string diff to the given string dest Declaration public static void Apply(StringBuilder dest, string diff) Parameters Type Name Description System.Text.StringBuilder dest Destination string System.String diff Patch string | Improve this Doc View Source Exec(String, String) Construct a patch string that transforms a to b. Declaration public string Exec(string a, string b) Parameters Type Name Description System.String a 1st string System.String b 2nd string Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Compile.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Compile.html",
    "title": "Class Compile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Compile The Compile class is used to compile a stemmer table. Inheritance System.Object Compile Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Compile Methods | Improve this Doc View Source Main(String[]) Entry point to the Compile application. This program takes any number of arguments: the first is the name of the desired stemming algorithm to use (a list is available in the package description) , all of the rest should be the path or paths to a file or files containing a stemmer table to compile. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args the command line arguments"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Cell.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Cell.html",
    "title": "Class Cell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Cell A Cell is a portion of a Trie . Inheritance System.Object Cell Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Cell Methods | Improve this Doc View Source ToString() Return a string containing this Cell 's attributes. Declaration public override string ToString() Returns Type Description System.String a string representation of this Cell Overrides System.Object.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Util.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.html",
    "title": "Namespace Lucene.Net.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Some utility classes. Classes AlreadySetException Thrown when Set(T) is called more than once. ArrayUtil Methods for manipulating arrays. This is a Lucene.NET INTERNAL API, use at your own risk Attribute Base class for Attributes that can be added to a AttributeSource . Attributes are used to add data in a dynamic, yet type-safe way to a source of usually streamed objects, e. g. a TokenStream . AttributeSource An AttributeSource contains a list of different Attribute s, and methods to add and get them. There can only be a single instance of an attribute in the same AttributeSource instance. This is ensured by passing in the actual type of the IAttribute to the AddAttribute<T>() , which then checks if an instance of that type is already present. If yes, it returns the instance, otherwise it creates a new instance and returns it. AttributeSource.AttributeFactory An AttributeSource.AttributeFactory creates instances of Attribute s. AttributeSource.State This class holds the state of an AttributeSource . Bits Bits.MatchAllBits Bits impl of the specified length with all bits set. Bits.MatchNoBits Bits impl of the specified length with no bits set. BitUtil A variety of high efficiency bit twiddling routines. This is a Lucene.NET INTERNAL API, use at your own risk BroadWord Methods and constants inspired by the article \"Broadword Implementation of Rank/Select Queries\" by Sebastiano Vigna, January 30, 2012: algorithm 1: Lucene.Net.Util.BroadWord.BitCount(System.Int64) , count of set bits in a System.Int64 algorithm 2: Select(Int64, Int32) , selection of a set bit in a System.Int64 , bytewise signed smaller < 8 operator: SmallerUpTo7_8(Int64, Int64) . shortwise signed smaller < 16 operator: SmallerUpto15_16(Int64, Int64) . some of the Lk and Hk constants that are used by the above: L8 L8_L , H8 H8_L , L9 L9_L , L16 L16_L and H16 H8_L . This is a Lucene.NET INTERNAL API, use at your own risk ByteBlockPool Class that Posting and PostingVector use to write byte streams into shared fixed-size byte[] arrays. The idea is to allocate slices of increasing lengths. For example, the first slice is 5 bytes, the next slice is 14, etc. We start by writing our bytes into the first 5 bytes. When we hit the end of the slice, we allocate the next slice and then write the address of the new slice into the last 4 bytes of the previous slice (the \"forwarding address\"). Each slice is filled with 0's initially, and we mark the end with a non-zero byte. This way the methods that are writing into the slice don't need to record its length and instead allocate a new slice once they hit a non-zero byte. This is a Lucene.NET INTERNAL API, use at your own risk ByteBlockPool.Allocator Abstract class for allocating and freeing byte blocks. ByteBlockPool.DirectAllocator A simple ByteBlockPool.Allocator that never recycles. ByteBlockPool.DirectTrackingAllocator A simple ByteBlockPool.Allocator that never recycles, but tracks how much total RAM is in use. BytesRef Represents byte[] , as a slice (offset + length) into an existing byte[] . The Bytes property should never be null ; use EMPTY_BYTES if necessary. Important note: Unless otherwise noted, Lucene uses this class to represent terms that are encoded as UTF8 bytes in the index. To convert them to a .NET System.String (which is UTF16), use Utf8ToString() . Using code like new String(bytes, offset, length) to do this is wrong , as it does not respect the correct character set and may return wrong results (depending on the platform's defaults)! BytesRefArray A simple append only random-access BytesRef array that stores full copies of the appended bytes in a ByteBlockPool . Note: this class is not Thread-Safe! @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk BytesRefHash BytesRefHash is a special purpose hash-map like data-structure optimized for BytesRef instances. BytesRefHash maintains mappings of byte arrays to ids (Map<BytesRef,int>) storing the hashed bytes efficiently in continuous storage. The mapping to the id is encapsulated inside BytesRefHash and is guaranteed to be increased for each added BytesRef . Note: The maximum capacity BytesRef instance passed to Add(BytesRef) must not be longer than BYTE_BLOCK_SIZE -2. The internal storage is limited to 2GB total byte storage. This is a Lucene.NET INTERNAL API, use at your own risk BytesRefHash.BytesStartArray Manages allocation of the per-term addresses. BytesRefHash.DirectBytesStartArray A simple BytesRefHash.BytesStartArray that tracks memory allocation using a private Counter instance. BytesRefHash.MaxBytesLengthExceededException Thrown if a BytesRef exceeds the BytesRefHash limit of BYTE_BLOCK_SIZE -2. BytesRefIterator LUCENENET specific class to make the syntax of creating an empty IBytesRefIterator the same as it was in Lucene. Example: var iter = BytesRefIterator.Empty; CharsRef Represents char[] , as a slice (offset + Length) into an existing char[] . The Chars property should never be null ; use EMPTY_CHARS if necessary. This is a Lucene.NET INTERNAL API, use at your own risk CollectionUtil Methods for manipulating (sorting) collections. Sort methods work directly on the supplied lists and don't copy to/from arrays before/after. For medium size collections as used in the Lucene indexer that is much more efficient. This is a Lucene.NET INTERNAL API, use at your own risk CommandLineUtil Class containing some useful methods used by command line tools Constants Some useful constants. Counter Simple counter class @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk DisposableThreadLocal<T> Java's builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dereference the things you had stored in it, even once the ThreadLocal instance itself is no longer referenced. This is because there is single, master map stored for each thread, which all ThreadLocals share, and that master map only periodically purges \"stale\" entries. While not technically a memory leak, because eventually the memory will be reclaimed, it can take a long time and you can easily hit System.OutOfMemoryException because from the GC's standpoint the stale entries are not reclaimable. This class works around that, by only enrolling WeakReference values into the ThreadLocal, and separately holding a hard reference to each stored value. When you call Dispose() , these hard references are cleared and then GC is freely able to reclaim space by objects stored in it. You should not call Dispose() until all threads are done using the instance. This is a Lucene.NET INTERNAL API, use at your own risk DocIdBitSet Simple DocIdSet and DocIdSetIterator backed by a System.Collections.BitArray DoubleBarrelLRUCache LUCENENET specific class to nest the DoubleBarrelLRUCache.CloneableKey so it can be accessed without referencing the generic closing types of DoubleBarrelLRUCache<TKey, TValue> . DoubleBarrelLRUCache.CloneableKey Object providing clone(); the key class must subclass this. DoubleBarrelLRUCache<TKey, TValue> Simple concurrent LRU cache, using a \"double barrel\" approach where two ConcurrentHashMaps record entries. At any given time, one hash is primary and the other is secondary. Get(TKey) first checks primary, and if that's a miss, checks secondary. If secondary has the entry, it's promoted to primary ( NOTE : the key is cloned at this point). Once primary is full, the secondary is cleared and the two are swapped. This is not as space efficient as other possible concurrent approaches (see LUCENE-2075): to achieve perfect LRU(N) it requires 2*N storage. But, this approach is relatively simple and seems in practice to not grow unbounded in size when under hideously high load. This is a Lucene.NET INTERNAL API, use at your own risk ExcludeServiceAttribute Base class for Attribute types that exclude services from Reflection scanning. FieldCacheSanityChecker Provides methods for sanity checking that entries in the FieldCache are not wasteful or inconsistent. Lucene 2.9 Introduced numerous enhancements into how the FieldCache is used by the low levels of Lucene searching (for Sorting and ValueSourceQueries) to improve both the speed for Sorting, as well as reopening of IndexReaders. But these changes have shifted the usage of FieldCache from \"top level\" IndexReaders (frequently a MultiReader or DirectoryReader) down to the leaf level SegmentReaders. As a result, existing applications that directly access the FieldCache may find RAM usage increase significantly when upgrading to 2.9 or Later. This class provides an API for these applications (or their Unit tests) to check at run time if the FieldCache contains \"insane\" usages of the FieldCache. @lucene.experimental FieldCacheSanityChecker.Insanity Simple container for a collection of related FieldCache.CacheEntry objects that in conjunction with each other represent some \"insane\" usage of the IFieldCache . FieldCacheSanityChecker.InsanityType An Enumeration of the different types of \"insane\" behavior that may be detected in a IFieldCache . FilterIterator<T> An System.Collections.Generic.IEnumerator<T> implementation that filters elements with a boolean predicate. FixedBitSet BitSet of fixed length (numBits), backed by accessible ( GetBits() ) long[], accessed with an int index, implementing GetBits() and DocIdSet . If you need to manage more than 2.1B bits, use Int64BitSet . This is a Lucene.NET INTERNAL API, use at your own risk FixedBitSet.FixedBitSetIterator A DocIdSetIterator which iterates over set bits in a FixedBitSet . GrowableByteArrayDataOutput A DataOutput that can be used to build a byte[] . This is a Lucene.NET INTERNAL API, use at your own risk IndexableBinaryStringTools Provides support for converting byte sequences to System.String s and back again. The resulting System.String s preserve the original byte sequences' sort order. The System.String s are constructed using a Base 8000h encoding of the original binary data - each char of an encoded System.String represents a 15-bit chunk from the byte sequence. Base 8000h was chosen because it allows for all lower 15 bits of char to be used without restriction; the surrogate range [U+D8000-U+DFFF] does not represent valid chars, and would require complicated handling to avoid them and allow use of char's high bit. Although unset bits are used as padding in the final char, the original byte sequence could contain trailing bytes with no set bits (null bytes): padding is indistinguishable from valid information. To overcome this problem, a char is appended, indicating the number of encoded bytes in the final content char. @lucene.experimental InfoStream Debugging API for Lucene classes such as IndexWriter and SegmentInfos . NOTE: Enabling infostreams may cause performance degradation in some components. This is a Lucene.NET INTERNAL API, use at your own risk InPlaceMergeSorter Sorter implementation based on the merge-sort algorithm that merges in place (no extra memory will be allocated). Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool A pool for System.Int32 blocks similar to ByteBlockPool . NOTE: This was IntBlockPool in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool.Allocator Abstract class for allocating and freeing System.Int32 blocks. Int32BlockPool.DirectAllocator A simple Int32BlockPool.Allocator that never recycles. Int32BlockPool.SliceReader A Int32BlockPool.SliceReader that can read System.Int32 slices written by a Int32BlockPool.SliceWriter . This is a Lucene.NET INTERNAL API, use at your own risk Int32BlockPool.SliceWriter A Int32BlockPool.SliceWriter that allows to write multiple integer slices into a given Int32BlockPool . This is a Lucene.NET INTERNAL API, use at your own risk Int32sRef Represents int[] , as a slice (offset + length) into an existing int[] . The Int32s member should never be null ; use EMPTY_INT32S if necessary. NOTE: This was IntsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64BitSet BitSet of fixed length ( Lucene.Net.Util.Int64BitSet.numBits ), backed by accessible ( GetBits() ) long[] , accessed with a System.Int64 index. Use it only if you intend to store more than 2.1B bits, otherwise you should use FixedBitSet . NOTE: This was LongBitSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64sRef Represents long[] , as a slice (offset + length) into an existing long[] . The Int64s member should never be null ; use EMPTY_INT64S if necessary. NOTE: This was LongsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Int64Values Abstraction over an array of System.Int64 s. This class extends NumericDocValues so that we don't need to add another level of abstraction every time we want eg. to use the PackedInt32s utility classes to represent a NumericDocValues instance. NOTE: This was LongValues in Lucene This is a Lucene.NET INTERNAL API, use at your own risk IntroSorter Sorter implementation based on a variant of the quicksort algorithm called introsort : when the recursion level exceeds the log of the length of the array to sort, it falls back to heapsort. This prevents quicksort from running into its worst-case quadratic runtime. Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk IOUtils This class emulates the new Java 7 \"Try-With-Resources\" statement. Remove once Lucene is on Java 7. This is a Lucene.NET INTERNAL API, use at your own risk LuceneVersionExtensions Extension methods to the LuceneVersion enumeration to provide version comparison and parsing functionality. MapOfSets<TKey, TValue> Helper class for keeping Lists of Objects associated with keys. WARNING: this CLASS IS NOT THREAD SAFE This is a Lucene.NET INTERNAL API, use at your own risk MathUtil Math static utility methods. MergedIterator<T> Provides a merged sorted view from several sorted iterators. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to true and an element appears in multiple iterators then it is deduplicated, that is this iterator returns the sorted union of elements. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to false then all elements in all iterators are returned. Caveats: The behavior is undefined if the iterators are not actually sorted. Null elements are unsupported. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to true and if a single iterator contains duplicates then they will not be deduplicated. When elements are deduplicated it is not defined which one is returned. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to false then the order in which duplicates are returned isn't defined. The caller is responsible for disposing the System.Collections.Generic.IEnumerator<T> instances that are passed into the constructor, MergedIterator<T> doesn't do it automatically. This is a Lucene.NET INTERNAL API, use at your own risk NamedServiceFactory<TService> LUCENENET specific abstract class containing common fuctionality for named service factories. NumericUtils This is a helper class to generate prefix-encoded representations for numerical values and supplies converters to represent float/double values as sortable integers/longs. To quickly execute range queries in Apache Lucene, a range is divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie, while the boundaries are matched more exactly. this reduces the number of terms dramatically. This class generates terms to achieve this: First the numerical integer values need to be converted to bytes. For that integer values (32 bit or 64 bit) are made unsigned and the bits are converted to ASCII chars with each 7 bit. The resulting byte[] is sortable like the original integer value (even using UTF-8 sort order). Each value is also prefixed (in the first char) by the shift value (number of bits removed) used during encoding. To also index floating point numbers, this class supplies two methods to convert them to integer values by changing their bit layout: DoubleToSortableInt64(Double) , SingleToSortableInt32(Single) . You will have no precision loss by converting floating point numbers to integers and back (only that the integer form is not usable). Other data types like dates can easily converted to System.Int64 s or System.Int32 s (e.g. date to long: System.DateTime.Ticks ). For easy usage, the trie algorithm is implemented for indexing inside NumericTokenStream that can index System.Int32 , System.Int64 , System.Single , and System.Double . For querying, NumericRangeQuery and NumericRangeFilter implement the query part for the same data types. This class can also be used, to generate lexicographically sortable (according to UTF8SortedAsUTF16Comparer ) representations of numeric data types for other usages (e.g. sorting). @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 NumericUtils.Int32RangeBuilder Callback for SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) . You need to override only one of the methods. NOTE: This was IntRangeBuilder in Lucene @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 NumericUtils.Int64RangeBuilder Callback for SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) . You need to override only one of the methods. NOTE: This was LongRangeBuilder in Lucene @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 OfflineSorter On-disk sorting of byte arrays. Each byte array (entry) is a composed of the following fields: (two bytes) length of the following byte array, exactly the above count of bytes for the sequence to be sorted. OfflineSorter.BufferSize A bit more descriptive unit for constructors. OfflineSorter.ByteSequencesReader Utility class to read length-prefixed byte[] entries from an input. Complementary to OfflineSorter.ByteSequencesWriter . OfflineSorter.ByteSequencesWriter Utility class to emit length-prefixed byte[] entries to an output stream for sorting. Complementary to OfflineSorter.ByteSequencesReader . OfflineSorter.SortInfo Sort info (debugging mostly). OpenBitSet An \"open\" BitSet implementation that allows direct access to the array of words storing the bits. NOTE: This can be used in .NET any place where a java.util.BitSet is used in Java. Unlike java.util.BitSet , the fact that bits are packed into an array of longs is part of the interface. This allows efficient implementation of other algorithms by someone other than the author. It also allows one to efficiently implement alternate serialization or interchange formats. OpenBitSet is faster than java.util.BitSet in most operations and much faster at calculating cardinality of sets and results of set operations. It can also handle sets of larger cardinality (up to 64 * 2**32-1) The goals of OpenBitSet are the fastest implementation possible, and maximum code reuse. Extra safety and encapsulation may always be built on top, but if that's built in, the cost can never be removed (and hence people re-implement their own version in order to get better performance). Performance Results Test system: Pentium 4, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 3.363.961.441.461.991.58 1% full 3.313.90 1.04 0.99 Test system: AMD Opteron, 64 bit linux, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 2.503.501.001.031.121.25 1% full 2.513.49 1.00 1.02 OpenBitSetDISI OpenBitSet with added methods to bulk-update the bits from a DocIdSetIterator . (DISI stands for DocIdSetIterator ). OpenBitSetIterator An iterator to iterate over set bits in an OpenBitSet . this is faster than NextSetBit(Int64) for iterating over the complete set of bits, especially when the density of the bits set is high. PagedBytes Represents a logical byte[] as a series of pages. You can write-once into the logical byte[] (append only), using copy, and then retrieve slices ( BytesRef ) into it using fill. This is a Lucene.NET INTERNAL API, use at your own risk PagedBytes.PagedBytesDataInput PagedBytes.PagedBytesDataOutput PagedBytes.Reader Provides methods to read BytesRef s from a frozen PagedBytes . PForDeltaDocIdSet DocIdSet implementation based on pfor-delta encoding. This implementation is inspired from LinkedIn's Kamikaze ( http://data.linkedin.com/opensource/kamikaze ) and Daniel Lemire's JavaFastPFOR ( https://github.com/lemire/JavaFastPFOR ). On the contrary to the original PFOR paper, exceptions are encoded with FOR instead of Simple16. PForDeltaDocIdSet.Builder A builder for PForDeltaDocIdSet . PrintStreamInfoStream LUCENENET specific stub to assist with migration to TextWriterInfoStream . PriorityQueue<T> A PriorityQueue<T> maintains a partial ordering of its elements such that the element with least priority can always be found in constant time. Put()'s and Pop()'s require log(size) time. NOTE : this class will pre-allocate a full array of length maxSize+1 if instantiated via the PriorityQueue(Int32, Boolean) constructor with prepopulate set to true . That maximum size can grow as we insert elements over the time. This is a Lucene.NET INTERNAL API, use at your own risk QueryBuilder Creates queries from the Analyzer chain. Example usage: QueryBuilder builder = new QueryBuilder(analyzer); Query a = builder.CreateBooleanQuery(\"body\", \"just a test\"); Query b = builder.CreatePhraseQuery(\"body\", \"another test\"); Query c = builder.CreateMinShouldMatchQuery(\"body\", \"another test\", 0.5f); This can also be used as a subclass for query parsers to make it easier to interact with the analysis chain. Factory methods such as NewTermQuery(Term) are provided so that the generated queries can be customized. RamUsageEstimator Estimates the size (memory representation) of .NET objects. This is a Lucene.NET INTERNAL API, use at your own risk RecyclingByteBlockAllocator A ByteBlockPool.Allocator implementation that recycles unused byte blocks in a buffer and reuses them in subsequent calls to GetByteBlock() . Note: this class is not thread-safe. This is a Lucene.NET INTERNAL API, use at your own risk RecyclingInt32BlockAllocator A Int32BlockPool.Allocator implementation that recycles unused System.Int32 blocks in a buffer and reuses them in subsequent calls to GetInt32Block() . Note: this class is not thread-safe. NOTE: This was RecyclingIntBlockAllocator in Lucene This is a Lucene.NET INTERNAL API, use at your own risk RefCount<T> Manages reference counting for a given object. Extensions can override Release() to do custom logic when reference counting hits 0. RollingBuffer LUCENENET specific class to allow referencing static members of RollingBuffer<T> without referencing its generic closing type. RollingBuffer<T> Acts like forever growing T[] , but internally uses a circular buffer to reuse instances of . This is a Lucene.NET INTERNAL API, use at your own risk SentinelInt32Set A native System.Int32 hash-based set where one value is reserved to mean \"EMPTY\" internally. The space overhead is fairly low as there is only one power-of-two sized int[] to hold the values. The set is re-hashed when adding a value that would make it >= 75% full. Consider extending and over-riding Hash(Int32) if the values might be poor hash keys; Lucene docids should be fine. The internal fields are exposed publicly to enable more efficient use at the expense of better O-O principles. To iterate over the integers held in this set, simply use code like this: SentinelIntSet set = ... foreach (int v in set.keys) { if (v == set.EmptyVal) continue; //use v... } NOTE: This was SentinelIntSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk ServiceNameAttribute LUCENENET specific abstract class for System.Attribute s that can be used to override the default convention-based names of services. For example, \"Lucene40Codec\" will by convention be named \"Lucene40\". Using the CodecNameAttribute , the name can be overridden with a custom value. SetOnce<T> A convenient class which offers a semi-immutable object wrapper implementation which allows one to set the value of an object exactly once, and retrieve it many times. If Set(T) is called more than once, AlreadySetException is thrown and the operation will fail. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SloppyMath Math functions that trade off accuracy for speed. SmallSingle Floating point numbers smaller than 32 bits. NOTE: This was SmallFloat in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Sorter Base class for sorting algorithms implementations. This is a Lucene.NET INTERNAL API, use at your own risk SPIClassIterator<S> Helper class for loading SPI classes from classpath (META-INF files). This is a light impl of java.util.ServiceLoader but is guaranteed to be bug-free regarding classpath order and does not instantiate or initialize the classes found. This is a Lucene.NET INTERNAL API, use at your own risk StringHelper Methods for manipulating strings. This is a Lucene.NET INTERNAL API, use at your own risk TextWriterInfoStream InfoStream implementation over a System.IO.TextWriter such as System.Console.Out . NOTE: This is analogous to PrintStreamInfoStream in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk TimSorter Sorter implementation based on the TimSort algorithm. This implementation is especially good at sorting partially-sorted arrays and sorts small arrays with binary sort. NOTE :There are a few differences with the original implementation: The extra amount of memory to perform merges is configurable. This allows small merges to be very fast while large merges will be performed in-place (slightly slower). You can make sure that the fast merge routine will always be used by having maxTempSlots equal to half of the length of the slice of data to sort. Only the fast merge routine can gallop (the one that doesn't run in-place) and it only gallops on the longest slice. This is a Lucene.NET INTERNAL API, use at your own risk ToStringUtils Helper methods to ease implementing System.Object.ToString() . UnicodeUtil Class to encode .NET's UTF16 char[] into UTF8 byte[] without always allocating a new byte[] as System.Text.Encoding.GetBytes(System.String) of System.Text.Encoding.UTF8 does. This is a Lucene.NET INTERNAL API, use at your own risk VirtualMethod A utility for keeping backwards compatibility on previously abstract methods (or similar replacements). Before the replacement method can be made abstract, the old method must kept deprecated. If somebody still overrides the deprecated method in a non-sealed class, you must keep track, of this and maybe delegate to the old method in the subclass. The cost of reflection is minimized by the following usage of this class: Define static readonly fields in the base class ( BaseClass ), where the old and new method are declared: internal static readonly VirtualMethod newMethod = new VirtualMethod(typeof(BaseClass), \"newName\", parameters...); internal static readonly VirtualMethod oldMethod = new VirtualMethod(typeof(BaseClass), \"oldName\", parameters...); this enforces the singleton status of these objects, as the maintenance of the cache would be too costly else. If you try to create a second instance of for the same method/ baseClass combination, an exception is thrown. To detect if e.g. the old method was overridden by a more far subclass on the inheritance path to the current instance's class, use a non-static field: bool isDeprecatedMethodOverridden = oldMethod.GetImplementationDistance(this.GetType()) > newMethod.GetImplementationDistance(this.GetType()); // alternatively (more readable): bool isDeprecatedMethodOverridden = VirtualMethod.CompareImplementationDistance(this.GetType(), oldMethod, newMethod) > 0 GetImplementationDistance(Type) returns the distance of the subclass that overrides this method. The one with the larger distance should be used preferable. this way also more complicated method rename scenarios can be handled (think of 2.9 TokenStream deprecations). This is a Lucene.NET INTERNAL API, use at your own risk WAH8DocIdSet DocIdSet implementation based on word-aligned hybrid encoding on words of 8 bits. This implementation doesn't support random-access but has a fast DocIdSetIterator which can advance in logarithmic time thanks to an index. The compression scheme is simplistic and should work well with sparse and very dense doc id sets while being only slightly larger than a FixedBitSet for incompressible sets (overhead<2% in the worst case) in spite of the index. Format : The format is byte-aligned. An 8-bits word is either clean, meaning composed only of zeros or ones, or dirty, meaning that it contains between 1 and 7 bits set. The idea is to encode sequences of clean words using run-length encoding and to leave sequences of dirty words as-is. TokenClean length+Dirty length+Dirty words 1 byte0-n bytes0-n bytes0-n bytes Token encodes whether clean means full of zeros or ones in the first bit, the number of clean words minus 2 on the next 3 bits and the number of dirty words on the last 4 bits. The higher-order bit is a continuation bit, meaning that the number is incomplete and needs additional bytes to be read. Clean length+ : If clean length has its higher-order bit set, you need to read a vint ( ReadVInt32() ), shift it by 3 bits on the left side and add it to the 3 bits which have been read in the token. Dirty length+ works the same way as Clean length+ but on 4 bits and for the length of dirty words. Dirty words are the dirty words, there are Dirty length of them. This format cannot encode sequences of less than 2 clean words and 0 dirty word. The reason is that if you find a single clean word, you should rather encode it as a dirty word. This takes the same space as starting a new sequence (since you need one byte for the token) but will be lighter to decode. There is however an exception for the first sequence. Since the first sequence may start directly with a dirty word, the clean length is encoded directly, without subtracting 2. There is an additional restriction on the format: the sequence of dirty words is not allowed to contain two consecutive clean words. This restriction exists to make sure no space is wasted and to make sure iterators can read the next doc ID by reading at most 2 dirty words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WAH8DocIdSet.Builder A builder for WAH8DocIdSet s. WAH8DocIdSet.WordBuilder Word-based builder. WeakIdentityMap<TKey, TValue> Implements a combination of java.util.WeakHashMap and java.util.IdentityHashMap . Useful for caches that need to key off of a == comparison instead of a .Equals(object) . This class is not a general-purpose System.Collections.Generic.IDictionary<TKey, TValue> implementation! It intentionally violates System.Collections.Generic.IDictionary<TKey, TValue> 's general contract, which mandates the use of the System.Object.Equals(System.Object) method when comparing objects. This class is designed for use only in the rare cases wherein reference-equality semantics are required. This implementation was forked from Apache CXF but modified to not implement the System.Collections.Generic.IDictionary<TKey, TValue> interface and without any set views on it, as those are error-prone and inefficient, if not implemented carefully. The map only contains System.Collections.Generic.IEnumerable<T>.GetEnumerator() implementations on the values and not-GCed keys. Lucene's implementation also supports null keys, but those are never weak! The map supports two modes of operation: reapOnRead = true : This behaves identical to a java.util.WeakHashMap where it also cleans up the reference queue on every read operation ( Get(Object) , ContainsKey(Object) , Count , GetValueEnumerator() ), freeing map entries of already GCed keys. reapOnRead = false : This mode does not call Reap() on every read operation. In this case, the reference queue is only cleaned up on write operations (like Put(TKey, TValue) ). This is ideal for maps with few entries where the keys are unlikely be garbage collected, but there are lots of Get(Object) operations. The code can still call Reap() to manually clean up the queue without doing a write operation. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces IAccountable An object whose RAM usage can be computed. This is a Lucene.NET INTERNAL API, use at your own risk IAttribute Base interface for attributes. IAttributeReflector This interface is used to reflect contents of AttributeSource or Attribute . IBits Interface for Bitset-like structures. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IBytesRefIterator A simple iterator interface for BytesRef iteration. IMutableBits Extension of IBits for live documents. IServiceListable LUCENENET specific contract that provides support for AvailableCodecs , AvailableDocValuesFormats , and AvailablePostingsFormats . Implement this interface in addition to ICodecFactory , IDocValuesFormatFactory , or IPostingsFormatFactory to provide optional support for the above methods when providing a custom implementation. If this interface is not supported by the corresponding factory, a System.NotSupportedException will be thrown from the above methods. RollingBuffer.IResettable Implement to reset an instance Enums LuceneVersion Use by certain classes to match version compatibility across releases of Lucene. WARNING : When changing the version parameter that you supply to components in Lucene, do not simply change the version at search-time, but instead also adjust your indexing code to match, and re-index."
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.WordBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.WordBuilder.html",
    "title": "Class WAH8DocIdSet.WordBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WAH8DocIdSet.WordBuilder Word-based builder. Inheritance System.Object WAH8DocIdSet.WordBuilder WAH8DocIdSet.Builder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class WordBuilder Methods | Improve this Doc View Source Build() Build a new WAH8DocIdSet . Declaration public virtual WAH8DocIdSet Build() Returns Type Description WAH8DocIdSet | Improve this Doc View Source SetIndexInterval(Int32) Set the index interval. Smaller index intervals improve performance of Advance(Int32) but make the DocIdSet larger. An index interval i makes the index add an overhead which is at most 4/i , but likely much less. The default index interval is 8 , meaning the index has an overhead of at most 50%. To disable indexing, you can pass System.Int32.MaxValue as an index interval. Declaration public virtual object SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description System.Object Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.VirtualMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.VirtualMethod.html",
    "title": "Class VirtualMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VirtualMethod A utility for keeping backwards compatibility on previously abstract methods (or similar replacements). Before the replacement method can be made abstract, the old method must kept deprecated. If somebody still overrides the deprecated method in a non-sealed class, you must keep track, of this and maybe delegate to the old method in the subclass. The cost of reflection is minimized by the following usage of this class: Define static readonly fields in the base class ( BaseClass ), where the old and new method are declared: internal static readonly VirtualMethod newMethod = new VirtualMethod(typeof(BaseClass), \"newName\", parameters...); internal static readonly VirtualMethod oldMethod = new VirtualMethod(typeof(BaseClass), \"oldName\", parameters...); this enforces the singleton status of these objects, as the maintenance of the cache would be too costly else. If you try to create a second instance of for the same method/ baseClass combination, an exception is thrown. To detect if e.g. the old method was overridden by a more far subclass on the inheritance path to the current instance's class, use a non-static field: bool isDeprecatedMethodOverridden = oldMethod.GetImplementationDistance(this.GetType()) > newMethod.GetImplementationDistance(this.GetType()); // alternatively (more readable): bool isDeprecatedMethodOverridden = VirtualMethod.CompareImplementationDistance(this.GetType(), oldMethod, newMethod) > 0 GetImplementationDistance(Type) returns the distance of the subclass that overrides this method. The one with the larger distance should be used preferable. this way also more complicated method rename scenarios can be handled (think of 2.9 TokenStream deprecations). This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object VirtualMethod Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class VirtualMethod Constructors | Improve this Doc View Source VirtualMethod(Type, String, Type[]) Creates a new instance for the given baseClass and method declaration. Declaration public VirtualMethod(Type baseClass, string method, params Type[] parameters) Parameters Type Name Description System.Type baseClass System.String method System.Type [] parameters Exceptions Type Condition System.InvalidOperationException if you create a second instance of the same baseClass and method declaration combination. This enforces the singleton status. System.ArgumentException If baseClass does not declare the given method. Methods | Improve this Doc View Source CompareImplementationDistance(Type, VirtualMethod, VirtualMethod) Utility method that compares the implementation/override distance of two methods. Declaration public static int CompareImplementationDistance(Type clazz, VirtualMethod m1, VirtualMethod m2) Parameters Type Name Description System.Type clazz VirtualMethod m1 VirtualMethod m2 Returns Type Description System.Int32 > 1, iff m1 is overridden/implemented in a subclass of the class overriding/declaring m2 < 1, iff m2 is overridden in a subclass of the class overriding/declaring m1 0, iff both methods are overridden in the same class (or are not overridden at all) | Improve this Doc View Source GetImplementationDistance(Type) Returns the distance from the baseClass in which this method is overridden/implemented in the inheritance path between baseClass and the given subclass subclazz . Declaration public int GetImplementationDistance(Type subclazz) Parameters Type Name Description System.Type subclazz Returns Type Description System.Int32 0 if and only if not overridden, else the distance to the base class. | Improve this Doc View Source IsOverriddenAsOf(Type) Returns, if this method is overridden/implemented in the inheritance path between baseClass and the given subclass subclazz . You can use this method to detect if a method that should normally be final was overridden by the given instance's class. Declaration public bool IsOverriddenAsOf(Type subclazz) Parameters Type Name Description System.Type subclazz Returns Type Description System.Boolean false if and only if not overridden. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.UnicodeUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.UnicodeUtil.html",
    "title": "Class UnicodeUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnicodeUtil Class to encode .NET's UTF16 char[] into UTF8 byte[] without always allocating a new byte[] as System.Text.Encoding.GetBytes(System.String) of System.Text.Encoding.UTF8 does. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object UnicodeUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class UnicodeUtil Fields | Improve this Doc View Source BIG_TERM A binary term consisting of a number of 0xff bytes, likely to be bigger than other terms (e.g. collation keys) one would normally encounter, and definitely bigger than any UTF-8 terms. WARNING: this is not a valid UTF8 Term Declaration public static readonly BytesRef BIG_TERM Field Value Type Description BytesRef | Improve this Doc View Source UNI_REPLACEMENT_CHAR Declaration public const int UNI_REPLACEMENT_CHAR = 65533 Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_HIGH_END Declaration public const int UNI_SUR_HIGH_END = 56319 Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_HIGH_START Declaration public const int UNI_SUR_HIGH_START = 55296 Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_LOW_END Declaration public const int UNI_SUR_LOW_END = 57343 Field Value Type Description System.Int32 | Improve this Doc View Source UNI_SUR_LOW_START Declaration public const int UNI_SUR_LOW_START = 56320 Field Value Type Description System.Int32 Methods | Improve this Doc View Source CodePointCount(BytesRef) Returns the number of code points in this UTF8 sequence. This method assumes valid UTF8 input. This method does not perform full UTF8 validation, it will check only the first byte of each codepoint (for multi-byte sequences any bytes after the head are skipped). Declaration public static int CodePointCount(BytesRef utf8) Parameters Type Name Description BytesRef utf8 Returns Type Description System.Int32 Exceptions Type Condition System.ArgumentException If invalid codepoint header byte occurs or the content is prematurely truncated. | Improve this Doc View Source NewString(Int32[], Int32, Int32) Cover JDK 1.5 API. Create a String from an array of codePoints . Declaration public static string NewString(int[] codePoints, int offset, int count) Parameters Type Name Description System.Int32 [] codePoints The code array. System.Int32 offset The start of the text in the code point array. System.Int32 count The number of code points. Returns Type Description System.String a String representing the code points between offset and count. Exceptions Type Condition System.ArgumentException If an invalid code point is encountered. System.IndexOutOfRangeException If the offset or count are out of bounds. | Improve this Doc View Source ToCharArray(Int32[], Int32, Int32) Generates char array that represents the provided input code points. LUCENENET specific. Declaration public static char[] ToCharArray(int[] codePoints, int offset, int count) Parameters Type Name Description System.Int32 [] codePoints The code array. System.Int32 offset The start of the text in the code point array. System.Int32 count The number of code points. Returns Type Description System.Char [] a char array representing the code points between offset and count. | Improve this Doc View Source ToHexString(String) Declaration public static string ToHexString(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source UTF16toUTF8(ICharSequence, Int32, Int32, BytesRef) Encode characters from this ICharSequence , starting at offset for length characters. After encoding, result.Offset will always be 0. Declaration public static void UTF16toUTF8(ICharSequence s, int offset, int length, BytesRef result) Parameters Type Name Description ICharSequence s System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF16toUTF8(Char[], Int32, Int32, BytesRef) Encode characters from a char[] source , starting at offset for length chars. After encoding, result.Offset will always be 0. Declaration public static void UTF16toUTF8(char[] source, int offset, int length, BytesRef result) Parameters Type Name Description System.Char [] source System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF16toUTF8(String, Int32, Int32, BytesRef) Encode characters from this System.String , starting at offset for length characters. After encoding, result.Offset will always be 0. LUCENENET specific. Declaration public static void UTF16toUTF8(string s, int offset, int length, BytesRef result) Parameters Type Name Description System.String s System.Int32 offset System.Int32 length BytesRef result | Improve this Doc View Source UTF8toUTF16(BytesRef, CharsRef) Utility method for UTF8toUTF16(Byte[], Int32, Int32, CharsRef) Declaration public static void UTF8toUTF16(BytesRef bytesRef, CharsRef chars) Parameters Type Name Description BytesRef bytesRef CharsRef chars See Also UTF8toUTF16(Byte[], Int32, Int32, CharsRef) | Improve this Doc View Source UTF8toUTF16(Byte[], Int32, Int32, CharsRef) Interprets the given byte array as UTF-8 and converts to UTF-16. The CharsRef will be extended if it doesn't provide enough space to hold the worst case of each byte becoming a UTF-16 codepoint. NOTE: Full characters are read, even if this reads past the length passed (and can result in an System.IndexOutOfRangeException if invalid UTF-8 is passed). Explicit checks for valid UTF-8 are not performed. Declaration public static void UTF8toUTF16(byte[] utf8, int offset, int length, CharsRef chars) Parameters Type Name Description System.Byte [] utf8 System.Int32 offset System.Int32 length CharsRef chars | Improve this Doc View Source UTF8toUTF32(BytesRef, Int32sRef) This method assumes valid UTF8 input. This method does not perform full UTF8 validation, it will check only the first byte of each codepoint (for multi-byte sequences any bytes after the head are skipped). Declaration public static void UTF8toUTF32(BytesRef utf8, Int32sRef utf32) Parameters Type Name Description BytesRef utf8 Int32sRef utf32 Exceptions Type Condition System.ArgumentException If invalid codepoint header byte occurs or the content is prematurely truncated. | Improve this Doc View Source ValidUTF16String(ICharSequence) Declaration public static bool ValidUTF16String(ICharSequence s) Parameters Type Name Description ICharSequence s Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(Char[], Int32) Declaration public static bool ValidUTF16String(char[] s, int size) Parameters Type Name Description System.Char [] s System.Int32 size Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(String) Declaration public static bool ValidUTF16String(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean | Improve this Doc View Source ValidUTF16String(StringBuilder) Declaration public static bool ValidUTF16String(StringBuilder s) Parameters Type Name Description System.Text.StringBuilder s Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Util.ToStringUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ToStringUtils.html",
    "title": "Class ToStringUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToStringUtils Helper methods to ease implementing System.Object.ToString() . Inheritance System.Object ToStringUtils Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class ToStringUtils Methods | Improve this Doc View Source Boost(Single) For printing boost only if not 1.0. Declaration public static string Boost(float boost) Parameters Type Name Description System.Single boost Returns Type Description System.String | Improve this Doc View Source ByteArray(StringBuilder, Byte[]) Declaration public static void ByteArray(StringBuilder buffer, byte[] bytes) Parameters Type Name Description System.Text.StringBuilder buffer System.Byte [] bytes | Improve this Doc View Source Int64Hex(Int64) NOTE: This was longHex() in Lucene Declaration public static string Int64Hex(long x) Parameters Type Name Description System.Int64 x Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IAccountable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAccountable.html",
    "title": "Interface IAccountable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAccountable An object whose RAM usage can be computed. This is a Lucene.NET INTERNAL API, use at your own risk Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAccountable Methods | Improve this Doc View Source RamBytesUsed() Return the memory usage of this object in bytes. Negative values are illegal. Declaration long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.html",
    "title": "Namespace Lucene.Net.Util.Fst | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Fst Classes Builder LUCENENET specific type used to access nested types of Builder<T> without referring to its generic closing type. Builder.Arc<S> Expert: holds a pending (seen but not yet serialized) arc. Builder.CompiledNode Builder.FreezeTail<S> Expert: this is invoked by Builder whenever a suffix is serialized. Builder.UnCompiledNode<S> Expert: holds a pending (seen but not yet serialized) Node. Builder<T> Builds a minimal FST (maps an Int32sRef term to an arbitrary output) from pre-sorted terms with outputs. The FST becomes an FSA if you use NoOutputs. The FST is written on-the-fly into a compact serialized format byte array, which can be saved to / loaded from a Directory or used directly for traversal. The FST is always finite (no cycles). NOTE: The algorithm is described at http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698 The parameterized type is the output type. See the subclasses of Outputs<T> . FSTs larger than 2.1GB are now possible (as of Lucene 4.2). FSTs containing more than 2.1B nodes are also now possible, however they cannot be packed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteSequenceOutputs An FST Outputs{BytesRef} implementation where each output is a sequence of bytes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BytesRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. BytesRefFSTEnum.InputOutput{T} rather than BytesRefFSTEnum{T}.InputOutput{T}) BytesRefFSTEnum.InputOutput<T> Holds a single input ( BytesRef ) + output pair. BytesRefFSTEnum<T> Enumerates all input ( BytesRef ) + output pairs in an FST. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CharSequenceOutputs An FST Outputs<T> implementation where each output is a sequence of characters. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FST LUCENENET specific: This new base class is to mimic Java's ability to use nested types without specifying a type parameter. i.e. FST.BytesReader instead of FST<BytesRef>.BytesReader FST.Arc<T> Represents a single arc. FST.BytesReader Reads bytes stored in an FST. FST<T> Represents an finite state machine (FST), using a compact byte[] format. The format is similar to what's used by Morfologik ( http://sourceforge.net/projects/morfologik ). See the FST package documentation for some simple examples. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTEnum<T> Can Next() and Advance() through the terms in an FST This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32SequenceOutputs An FST Outputs<T> implementation where each output is a sequence of System.Int32 s. NOTE: This was IntSequenceOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32sRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. Int32sRefFSTEnum.InputOutput{T} rather than Int32sRefFSTEnum{T}.InputOutput{T} ) NOTE: This was Int32sRefFSTEnum{T} in Lucene Int32sRefFSTEnum.InputOutput<T> Holds a single input ( Int32sRef ) + output pair. Int32sRefFSTEnum<T> Enumerates all input ( Int32sRef ) + output pairs in an FST. NOTE: This was IntsRefFSTEnum{T} in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk ListOfOutputs<T> Wraps another Outputs implementation and encodes one or more of its output values. You can use this when a single input may need to map to more than one output, maintaining order: pass the same input with a different output by calling Add(Int32sRef, T) multiple times. The builder will then combine the outputs using the Merge(T, T) method. The resulting FST may not be minimal when an input has more than one output, as this requires pushing all multi-output values to a final state. NOTE: the only way to create multiple outputs is to add the same input to the FST multiple times in a row. This is how the FST maps a single input to multiple outputs (e.g. you cannot pass a List<Object> to Add(Int32sRef, T) ). If your outputs are longs, and you need at most 2, then use UpToTwoPositiveInt64Outputs instead since it stores the outputs more compactly (by stealing a bit from each long value). NOTE: this cannot wrap itself (ie you cannot make an FST with List<List<Object>> outputs using this). @lucene.experimental NoOutputs A null FST Outputs<T> implementation; use this if you just want to build an FSA. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Outputs<T> Represents the outputs for an FST, providing the basic algebra required for building and traversing the FST. Note that any operation that returns NO_OUTPUT must return the same singleton object from NoOutput . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PairOutputs<A, B> An FST Outputs<T> implementation, holding two other outputs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PairOutputs<A, B>.Pair Holds a single pair of two outputs. PositiveInt32Outputs An FST Outputs<T> implementation where each output is a non-negative value. NOTE: This was PositiveIntOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk UpToTwoPositiveInt64Outputs An FST Outputs<T> implementation where each output is one or two non-negative long values. If it's a System.Single output, System.Nullable<T> is returned; else, TwoLongs. Order is preserved in the TwoLongs case, ie .first is the first input/output added to Builder<T> , and .second is the second. You cannot store 0 output with this (that's reserved to mean \"no output\")! NOTE: the only way to create a TwoLongs output is to add the same input to the FST twice in a row. This is how the FST maps a single input to two outputs (e.g. you cannot pass a UpToTwoPositiveInt64Outputs.TwoInt64s to Add(Int32sRef, T) . If you need more than two then use ListOfOutputs<T> , but if you only have at most 2 then this implementation will require fewer bytes as it steals one bit from each long value. NOTE: the resulting FST is not guaranteed to be minimal! See Builder<T> . NOTE: This was UpToTwoPositiveIntOutputs in Lucene - the data type (int) was wrong there - it should have been long This is a Lucene.NET EXPERIMENTAL API, use at your own risk UpToTwoPositiveInt64Outputs.TwoInt64s Holds two long outputs. NOTE: This was TwoLongs in Lucene Util Static helper methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Util.FSTPath<T> Represents a path in TopNSearcher. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Util.Result<T> Holds a single input ( Int32sRef ) + output, returned by ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) . Util.TopNSearcher<T> Utility class to find top N shortest paths from start point(s). Util.TopResults<T> Holds the results for a top N search using Util.TopNSearcher<T> Interfaces Builder.INode Enums FST.INPUT_TYPE Specifies allowed range of each int input label for this FST."
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.html",
    "title": "Class Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util Static helper methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Util Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Util Methods | Improve this Doc View Source Get<T>(FST<T>, BytesRef) Looks up the output for this input, or null if the input is not accepted Declaration public static T Get<T>(FST<T> fst, BytesRef input) Parameters Type Name Description FST <T> fst BytesRef input Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source Get<T>(FST<T>, Int32sRef) Looks up the output for this input, or null if the input is not accepted. Declaration public static T Get<T>(FST<T> fst, Int32sRef input) Parameters Type Name Description FST <T> fst Int32sRef input Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source GetByOutput(FST<Nullable<Int64>>, Int64) Reverse lookup (lookup by output instead of by input), in the special case when your FSTs outputs are strictly ascending. This locates the input/output pair where the output is equal to the target, and will return null if that output does not exist. NOTE: this only works with , only works when the outputs are ascending in order with the inputs. For example, simple ordinals (0, 1, 2, ...), or file offets (when appending to a file) fit this. Declaration public static Int32sRef GetByOutput(FST<long?> fst, long targetOutput) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Int64 targetOutput Returns Type Description Int32sRef | Improve this Doc View Source GetByOutput(FST<Nullable<Int64>>, Int64, FST.BytesReader, FST.Arc<Nullable<Int64>>, FST.Arc<Nullable<Int64>>, Int32sRef) Expert: like GetByOutput(FST<Nullable<Int64>>, Int64) except reusing FST.BytesReader , initial and scratch Arc, and result. Declaration public static Int32sRef GetByOutput(FST<long?> fst, long targetOutput, FST.BytesReader in, FST.Arc<long?> arc, FST.Arc<long?> scratchArc, Int32sRef result) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Int64 targetOutput FST.BytesReader in FST.Arc < System.Nullable < System.Int64 >> arc FST.Arc < System.Nullable < System.Int64 >> scratchArc Int32sRef result Returns Type Description Int32sRef | Improve this Doc View Source ReadCeilArc<T>(Int32, FST<T>, FST.Arc<T>, FST.Arc<T>, FST.BytesReader) Reads the first arc greater or equal that the given label into the provided arc in place and returns it iff found, otherwise return null . Declaration public static FST.Arc<T> ReadCeilArc<T>(int label, FST<T> fst, FST.Arc<T> follow, FST.Arc<T> arc, FST.BytesReader in) Parameters Type Name Description System.Int32 label the label to ceil on FST <T> fst the fst to operate on FST.Arc <T> follow the arc to follow reading the label from FST.Arc <T> arc the arc to read into in place FST.BytesReader in the fst's FST.BytesReader Returns Type Description FST.Arc <T> Type Parameters Name Description T | Improve this Doc View Source ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) Starting from node, find the top N min cost completions to a final node. Declaration public static Util.TopResults<T> ShortestPaths<T>(FST<T> fst, FST.Arc<T> fromNode, T startOutput, IComparer<T> comparer, int topN, bool allowEmptyString) Parameters Type Name Description FST <T> fst FST.Arc <T> fromNode T startOutput System.Collections.Generic.IComparer <T> comparer System.Int32 topN System.Boolean allowEmptyString Returns Type Description Util.TopResults <T> Type Parameters Name Description T | Improve this Doc View Source ToBytesRef(Int32sRef, BytesRef) Just converts Int32sRef to BytesRef ; you must ensure the System.Int32 values fit into a System.Byte . Declaration public static BytesRef ToBytesRef(Int32sRef input, BytesRef scratch) Parameters Type Name Description Int32sRef input BytesRef scratch Returns Type Description BytesRef | Improve this Doc View Source ToDot<T>(FST<T>, TextWriter, Boolean, Boolean) Dumps an FST<T> to a GraphViz's dot language description for visualization. Example of use: using (TextWriter sw = new StreamWriter(\"out.dot\")) { Util.ToDot(fst, sw, true, true); } and then, from command line: dot -Tpng -o out.png out.dot Note: larger FSTs (a few thousand nodes) won't even render, don't bother. If the FST is > 2.1 GB in size then this method will throw strange exceptions. See also http://www.graphviz.org/ . Declaration public static void ToDot<T>(FST<T> fst, TextWriter out, bool sameRank, bool labelStates) Parameters Type Name Description FST <T> fst System.IO.TextWriter out System.Boolean sameRank If true , the resulting dot file will try to order states in layers of breadth-first traversal. This may mess up arcs, but makes the output FST's structure a bit clearer. System.Boolean labelStates If true states will have labels equal to their offsets in their binary format. Expands the graph considerably. Type Parameters Name Description T | Improve this Doc View Source ToInt32sRef(BytesRef, Int32sRef) Just takes unsigned byte values from the BytesRef and converts into an Int32sRef . NOTE: This was toIntsRef() in Lucene Declaration public static Int32sRef ToInt32sRef(BytesRef input, Int32sRef scratch) Parameters Type Name Description BytesRef input Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF16(String, Int32sRef) Just maps each UTF16 unit (char) to the System.Int32 s in an Int32sRef . Declaration public static Int32sRef ToUTF16(string s, Int32sRef scratch) Parameters Type Name Description System.String s Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF32(Char[], Int32, Int32, Int32sRef) Decodes the Unicode codepoints from the provided char[] and places them in the provided scratch Int32sRef , which must not be null , returning it. Declaration public static Int32sRef ToUTF32(char[] s, int offset, int length, Int32sRef scratch) Parameters Type Name Description System.Char [] s System.Int32 offset System.Int32 length Int32sRef scratch Returns Type Description Int32sRef | Improve this Doc View Source ToUTF32(String, Int32sRef) Decodes the Unicode codepoints from the provided ICharSequence and places them in the provided scratch Int32sRef , which must not be null , returning it. Declaration public static Int32sRef ToUTF32(string s, Int32sRef scratch) Parameters Type Name Description System.String s Int32sRef scratch Returns Type Description Int32sRef Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopNSearcher-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopNSearcher-1.html",
    "title": "Class Util.TopNSearcher<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util.TopNSearcher<T> Utility class to find top N shortest paths from start point(s). Inheritance System.Object Util.TopNSearcher<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class TopNSearcher<T> Type Parameters Name Description T Constructors | Improve this Doc View Source TopNSearcher(FST<T>, Int32, Int32, IComparer<T>) Creates an unbounded TopNSearcher Declaration public TopNSearcher(FST<T> fst, int topN, int maxQueueDepth, IComparer<T> comparer) Parameters Type Name Description FST <T> fst the FST<T> to search on System.Int32 topN the number of top scoring entries to retrieve System.Int32 maxQueueDepth the maximum size of the queue of possible top entries System.Collections.Generic.IComparer <T> comparer the comparer to select the top N Methods | Improve this Doc View Source AcceptResult(Int32sRef, T) Declaration protected virtual bool AcceptResult(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output Returns Type Description System.Boolean | Improve this Doc View Source AddIfCompetitive(Util.FSTPath<T>) If back plus this arc is competitive then add to queue: Declaration protected virtual void AddIfCompetitive(Util.FSTPath<T> path) Parameters Type Name Description Util.FSTPath <T> path | Improve this Doc View Source AddStartPaths(FST.Arc<T>, T, Boolean, Int32sRef) Adds all leaving arcs, including 'finished' arc, if the node is final, from this node into the queue. Declaration public virtual void AddStartPaths(FST.Arc<T> node, T startOutput, bool allowEmptyString, Int32sRef input) Parameters Type Name Description FST.Arc <T> node T startOutput System.Boolean allowEmptyString Int32sRef input | Improve this Doc View Source Search() Declaration public virtual Util.TopResults<T> Search() Returns Type Description Util.TopResults <T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.Result-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.Result-1.html",
    "title": "Class Util.Result<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util.Result<T> Holds a single input ( Int32sRef ) + output, returned by ShortestPaths<T>(FST<T>, FST.Arc<T>, T, IComparer<T>, Int32, Boolean) . Inheritance System.Object Util.Result<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Result<T> Type Parameters Name Description T Constructors | Improve this Doc View Source Result(Int32sRef, T) Declaration public Result(Int32sRef input, T output) Parameters Type Name Description Int32sRef input T output Properties | Improve this Doc View Source Input Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Declaration public T Output { get; } Property Value Type Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.FSTPath-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.FSTPath-1.html",
    "title": "Class Util.FSTPath<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util.FSTPath<T> Represents a path in TopNSearcher. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Util.FSTPath<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class FSTPath<T> Type Parameters Name Description T Constructors | Improve this Doc View Source FSTPath(T, FST.Arc<T>, Int32sRef) Sole constructor Declaration public FSTPath(T cost, FST.Arc<T> arc, Int32sRef input) Parameters Type Name Description T cost FST.Arc <T> arc Int32sRef input Properties | Improve this Doc View Source Arc Declaration public FST.Arc<T> Arc { get; set; } Property Value Type Description FST.Arc <T> | Improve this Doc View Source Cost Declaration public T Cost { get; set; } Property Value Type Description T | Improve this Doc View Source Input Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.TwoInt64s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.TwoInt64s.html",
    "title": "Class UpToTwoPositiveInt64Outputs.TwoInt64s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpToTwoPositiveInt64Outputs.TwoInt64s Holds two long outputs. NOTE: This was TwoLongs in Lucene Inheritance System.Object UpToTwoPositiveInt64Outputs.TwoInt64s Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class TwoInt64s Constructors | Improve this Doc View Source TwoInt64s(Int64, Int64) Declaration public TwoInt64s(long first, long second) Parameters Type Name Description System.Int64 first System.Int64 second Properties | Improve this Doc View Source First Declaration public long First { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Second Declaration public long Second { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.Pair.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.Pair.html",
    "title": "Class PairOutputs<A, B>.Pair | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PairOutputs<A, B>.Pair Holds a single pair of two outputs. Inheritance System.Object PairOutputs<A, B>.Pair Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Pair Properties | Improve this Doc View Source Output1 Declaration public A Output1 { get; } Property Value Type Description A | Improve this Doc View Source Output2 Declaration public B Output2 { get; } Property Value Type Description B Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Outputs-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Outputs-1.html",
    "title": "Class Outputs<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Outputs<T> Represents the outputs for an FST, providing the basic algebra required for building and traversing the FST. Note that any operation that returns NO_OUTPUT must return the same singleton object from NoOutput . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs<T> ByteSequenceOutputs CharSequenceOutputs Int32SequenceOutputs ListOfOutputs<T> NoOutputs PairOutputs<A, B> PositiveInt32Outputs UpToTwoPositiveInt64Outputs Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class Outputs<T> Type Parameters Name Description T Properties | Improve this Doc View Source NoOutput NOTE: this output is compared with == so you must ensure that all methods return the single object if it's really no output Declaration public abstract T NoOutput { get; } Property Value Type Description T Methods | Improve this Doc View Source Add(T, T) Eg add(\"foo\", \"bar\") -> \"foobar\" Declaration public abstract T Add(T prefix, T output) Parameters Type Name Description T prefix T output Returns Type Description T | Improve this Doc View Source Common(T, T) Eg common(\"foobar\", \"food\") -> \"foo\" Declaration public abstract T Common(T output1, T output2) Parameters Type Name Description T output1 T output2 Returns Type Description T | Improve this Doc View Source Merge(T, T) Declaration public virtual T Merge(T first, T second) Parameters Type Name Description T first T second Returns Type Description T | Improve this Doc View Source OutputToString(T) Declaration public abstract string OutputToString(T output) Parameters Type Name Description T output Returns Type Description System.String | Improve this Doc View Source Read(DataInput) Decode an output value previously written with Write(T, DataOutput) . Declaration public abstract T Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description T | Improve this Doc View Source ReadFinalOutput(DataInput) Decode an output value previously written with WriteFinalOutput(T, DataOutput) . By default this just calls Read(DataInput) . Declaration public virtual T ReadFinalOutput(DataInput in) Parameters Type Name Description DataInput in Returns Type Description T | Improve this Doc View Source Subtract(T, T) Eg subtract(\"foobar\", \"foo\") -> \"bar\" Declaration public abstract T Subtract(T output, T inc) Parameters Type Name Description T output T inc Returns Type Description T | Improve this Doc View Source Write(T, DataOutput) Encode an output value into a DataOutput . Declaration public abstract void Write(T output, DataOutput out) Parameters Type Name Description T output DataOutput out | Improve this Doc View Source WriteFinalOutput(T, DataOutput) Encode an final node output value into a DataOutput . By default this just calls Write(T, DataOutput) . Declaration public virtual void WriteFinalOutput(T output, DataOutput out) Parameters Type Name Description T output DataOutput out Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.UTF32ToUTF8.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.UTF32ToUTF8.html",
    "title": "Class UTF32ToUTF8 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UTF32ToUTF8 Converts UTF-32 automata to the equivalent UTF-8 representation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object UTF32ToUTF8 Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public sealed class UTF32ToUTF8 Methods | Improve this Doc View Source Convert(Automaton) Converts an incoming utf32 Automaton to an equivalent utf8 one. The incoming automaton need not be deterministic. Note that the returned automaton will not in general be deterministic, so you must determinize it if that's needed. Declaration public Automaton Convert(Automaton utf32) Parameters Type Name Description Automaton utf32 Returns Type Description Automaton Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.Transition.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.Transition.html",
    "title": "Class Transition | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Transition Automaton transition. A transition, which belongs to a source state, consists of a Unicode codepoint interval and a destination state. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Transition Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class Transition Constructors | Improve this Doc View Source Transition(Int32, State) Constructs a new singleton interval transition. Declaration public Transition(int c, State to) Parameters Type Name Description System.Int32 c Transition codepoint. State to Destination state. | Improve this Doc View Source Transition(Int32, Int32, State) Constructs a new transition. Both end points are included in the interval. Declaration public Transition(int min, int max, State to) Parameters Type Name Description System.Int32 min Transition interval minimum. System.Int32 max Transition interval maximum. State to Destination state. Fields | Improve this Doc View Source COMPARE_BY_DEST_THEN_MIN_MAX Declaration public static readonly IComparer<Transition> COMPARE_BY_DEST_THEN_MIN_MAX Field Value Type Description System.Collections.Generic.IComparer < Transition > | Improve this Doc View Source COMPARE_BY_MIN_MAX_THEN_DEST Declaration public static readonly IComparer<Transition> COMPARE_BY_MIN_MAX_THEN_DEST Field Value Type Description System.Collections.Generic.IComparer < Transition > Properties | Improve this Doc View Source Dest Returns destination of this transition. Declaration public virtual State Dest { get; } Property Value Type Description State | Improve this Doc View Source Max Returns maximum of this transition interval. Declaration public virtual int Max { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Min Returns minimum of this transition interval. Declaration public virtual int Min { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Clones this transition. Declaration public virtual object Clone() Returns Type Description System.Object Clone with same character interval and destination state. | Improve this Doc View Source Equals(Object) Checks for equality. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Object to compare with. Returns Type Description System.Boolean true if obj is a transition with same character interval and destination state as this transition. Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns hash code. The hash code is based on the character interval (not the destination state). Declaration public override int GetHashCode() Returns Type Description System.Int32 Hash code. Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Returns a string describing this state. Normally invoked via ToString() . Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.StatePair.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.StatePair.html",
    "title": "Class StatePair | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StatePair Pair of states. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StatePair Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class StatePair Constructors | Improve this Doc View Source StatePair(State, State) Constructs a new state pair. Declaration public StatePair(State s1, State s2) Parameters Type Name Description State s1 First state. State s2 Second state. Properties | Improve this Doc View Source FirstState Returns first component of this pair. Declaration public virtual State FirstState { get; } Property Value Type Description State First state. | Improve this Doc View Source SecondState Returns second component of this pair. Declaration public virtual State SecondState { get; } Property Value Type Description State Second state. Methods | Improve this Doc View Source Equals(Object) Checks for equality. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Object to compare with. Returns Type Description System.Boolean true if obj represents the same pair of states as this pair. Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns hash code. Declaration public override int GetHashCode() Returns Type Description System.Int32 Hash code. Overrides System.Object.GetHashCode() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.SpecialOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.SpecialOperations.html",
    "title": "Class SpecialOperations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpecialOperations Special automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpecialOperations Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class SpecialOperations Methods | Improve this Doc View Source GetCommonPrefix(Automaton) Returns the longest string that is a prefix of all accepted strings and visits each state at most once. Declaration public static string GetCommonPrefix(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.String Common prefix. | Improve this Doc View Source GetCommonPrefixBytesRef(Automaton) Declaration public static BytesRef GetCommonPrefixBytesRef(Automaton a) Parameters Type Name Description Automaton a Returns Type Description BytesRef | Improve this Doc View Source GetCommonSuffix(Automaton) Returns the longest string that is a suffix of all accepted strings and visits each state at most once. Declaration public static string GetCommonSuffix(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.String Common suffix. | Improve this Doc View Source GetCommonSuffixBytesRef(Automaton) Declaration public static BytesRef GetCommonSuffixBytesRef(Automaton a) Parameters Type Name Description Automaton a Returns Type Description BytesRef | Improve this Doc View Source GetFiniteStrings(Automaton, Int32) Returns the set of accepted strings, assuming that at most limit strings are accepted. If more than limit strings are accepted, the first limit strings found are returned. If limit <0, then the limit is infinite. Declaration public static ISet<Int32sRef> GetFiniteStrings(Automaton a, int limit) Parameters Type Name Description Automaton a System.Int32 limit Returns Type Description System.Collections.Generic.ISet < Int32sRef > | Improve this Doc View Source IsFinite(Automaton) Returns true if the language of this automaton is finite. Declaration public static bool IsFinite(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source Reverse(Automaton) Reverses the language of the given (non-singleton) automaton while returning the set of new initial states. Declaration public static ISet<State> Reverse(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Collections.Generic.ISet < State >"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RunAutomaton.html",
    "title": "Class RunAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RunAutomaton Finite-state automaton with fast run operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object RunAutomaton ByteRunAutomaton CharacterRunAutomaton Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public abstract class RunAutomaton Constructors | Improve this Doc View Source RunAutomaton(Automaton, Int32, Boolean) Constructs a new RunAutomaton from a deterministic Automaton . Declaration public RunAutomaton(Automaton a, int maxInterval, bool tableize) Parameters Type Name Description Automaton a An automaton. System.Int32 maxInterval System.Boolean tableize Fields | Improve this Doc View Source m_accept Declaration protected readonly bool[] m_accept Field Value Type Description System.Boolean [] | Improve this Doc View Source m_initial Declaration protected readonly int m_initial Field Value Type Description System.Int32 | Improve this Doc View Source m_transitions Declaration protected readonly int[] m_transitions Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Count Returns number of states in automaton. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source InitialState Returns initial state. Declaration public int InitialState { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetCharIntervals() Returns array of codepoint class interval start points. The array should not be modified by the caller. Declaration public int[] GetCharIntervals() Returns Type Description System.Int32 [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source IsAccept(Int32) Returns acceptance status for given state. Declaration public bool IsAccept(int state) Parameters Type Name Description System.Int32 state Returns Type Description System.Boolean | Improve this Doc View Source Step(Int32, Int32) Returns the state obtained by reading the given char from the given state. Returns -1 if not obtaining any such state. (If the original Automaton had no dead states, -1 is returned here if and only if a dead state is entered in an equivalent automaton with a total transition function.) Declaration public int Step(int state, int c) Parameters Type Name Description System.Int32 state System.Int32 c Returns Type Description System.Int32 | Improve this Doc View Source ToString() Returns a string representation of this automaton. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExpSyntax.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExpSyntax.html",
    "title": "Enum RegExpSyntax | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum RegExpSyntax Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax [Flags] public enum RegExpSyntax Fields Name Description ALL Syntax flag, enables all optional regexp syntax. ANYSTRING Syntax flag, enables anystring ( @ ). AUTOMATON Syntax flag, enables named automata ( < identifier > ). COMPLEMENT Syntax flag, enables complement ( ~ ). EMPTY Syntax flag, enables empty language ( # ). INTERSECTION Syntax flag, enables intersection ( & ). INTERVAL Syntax flag, enables numerical intervals ( < n - m > ). NONE Syntax flag, enables no optional regexp syntax. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExp.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.RegExp.html",
    "title": "Class RegExp | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegExp Regular Expression extension to Automaton . Regular expressions are built from the following abstract syntax: regexp ::= unionexp | unionexp ::= interexp | unionexp (union) | interexp interexp ::= concatexp & interexp (intersection) [OPTIONAL] | concatexp concatexp ::= repeatexp concatexp (concatenation) | repeatexp repeatexp ::= repeatexp ? (zero or one occurrence) | repeatexp * (zero or more occurrences) | repeatexp + (one or more occurrences) | repeatexp { n } ( n occurrences) | repeatexp { n ,} ( n or more occurrences) | repeatexp { n , m } ( n to m occurrences, including both) | complexp complexp ::= ~ complexp (complement) [OPTIONAL] | charclassexp charclassexp ::= [ charclasses ] (character class) | [^ charclasses ] (negated character class) | simpleexp charclasses ::= charclass charclasses | charclass charclass ::= charexp - charexp (character range, including end-points) | charexp simpleexp ::= charexp | . (any single character) | # (the empty language) [OPTIONAL] | @ (any string) [OPTIONAL] | \" <Unicode string without double-quotes> \" (a string) | ( ) (the empty string) | ( unionexp ) (precedence override) | < <identifier> > (named automaton) [OPTIONAL] | < n - m > (numerical interval) [OPTIONAL] charexp ::=<Unicode character>(a single non-reserved character) | </strong> <Unicode character> (a single character) The productions marked [OPTIONAL] are only allowed if specified by the syntax flags passed to the RegExp constructor. The reserved characters used in the (enabled) syntax must be escaped with backslash ( </code>) or double-quotes ( \"...\" ). (In contrast to other regexp syntaxes, this is required also in character classes.) Be aware that dash ( - ) has a special meaning in charclass expressions. An identifier is a string not containing right angle bracket ( > ) or dash ( - ). Numerical intervals are specified by non-negative decimal integers and include both end points, and if n and m have the same number of digits, then the conforming strings must have that length (i.e. prefixed by 0's). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object RegExp Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class RegExp Constructors | Improve this Doc View Source RegExp(String) Constructs new RegExp from a string. Same as RegExp(s, RegExpSyntax.ALL) . Declaration public RegExp(string s) Parameters Type Name Description System.String s Regexp string. Exceptions Type Condition System.ArgumentException If an error occured while parsing the regular expression. | Improve this Doc View Source RegExp(String, RegExpSyntax) Constructs new RegExp from a string. Declaration public RegExp(string s, RegExpSyntax syntax_flags) Parameters Type Name Description System.String s Regexp string. RegExpSyntax syntax_flags Boolean 'or' of optional RegExpSyntax constructs to be enabled. Exceptions Type Condition System.ArgumentException If an error occured while parsing the regular expression Methods | Improve this Doc View Source GetIdentifiers() Returns set of automaton identifiers that occur in this regular expression. Declaration public virtual ISet<string> GetIdentifiers() Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source SetAllowMutate(Boolean) Sets or resets allow mutate flag. If this flag is set, then automata construction uses mutable automata, which is slightly faster but not thread safe. By default, the flag is not set. Declaration public virtual bool SetAllowMutate(bool flag) Parameters Type Name Description System.Boolean flag If true , the flag is set Returns Type Description System.Boolean Previous value of the flag. | Improve this Doc View Source ToAutomaton() Constructs new Automaton from this RegExp . Same as ToAutomaton(null) (empty automaton map). Declaration public virtual Automaton ToAutomaton() Returns Type Description Automaton | Improve this Doc View Source ToAutomaton(IAutomatonProvider) Constructs new Automaton from this RegExp . The constructed automaton is minimal and deterministic and has no transitions to dead states. Declaration public virtual Automaton ToAutomaton(IAutomatonProvider automaton_provider) Parameters Type Name Description IAutomatonProvider automaton_provider Provider of automata for named identifiers. Returns Type Description Automaton Exceptions Type Condition System.ArgumentException If this regular expression uses a named identifier that is not available from the automaton provider. | Improve this Doc View Source ToAutomaton(IDictionary<String, Automaton>) Constructs new Automaton from this RegExp . The constructed automaton is minimal and deterministic and has no transitions to dead states. Declaration public virtual Automaton ToAutomaton(IDictionary<string, Automaton> automata) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , Automaton > automata A map from automaton identifiers to automata (of type Automaton ). Returns Type Description Automaton Exceptions Type Condition System.ArgumentException If this regular expression uses a named identifier that does not occur in the automaton map. | Improve this Doc View Source ToString() Constructs string from parsed regular expression. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.NumberFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.NumberFormat.html",
    "title": "Class NumberFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumberFormat Inheritance System.Object NumberFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class NumberFormat Constructors | Improve this Doc View Source NumberFormat(CultureInfo) Declaration public NumberFormat(CultureInfo locale) Parameters Type Name Description System.Globalization.CultureInfo locale Fields | Improve this Doc View Source locale Declaration protected readonly CultureInfo locale Field Value Type Description System.Globalization.CultureInfo Methods | Improve this Doc View Source Format(Double) Declaration public virtual string Format(double number) Parameters Type Name Description System.Double number Returns Type Description System.String | Improve this Doc View Source Format(Int64) Declaration public virtual string Format(long number) Parameters Type Name Description System.Int64 number Returns Type Description System.String | Improve this Doc View Source Format(Object) Declaration public virtual string Format(object number) Parameters Type Name Description System.Object number Returns Type Description System.String | Improve this Doc View Source GetNumberFormat() Declaration protected virtual string GetNumberFormat() Returns Type Description System.String | Improve this Doc View Source Parse(String) Declaration public virtual object Parse(string source) Parameters Type Name Description System.String source Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.Number.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Number.html",
    "title": "Class Number | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Number A simple class for number conversions. Inheritance System.Object Number Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Number Fields | Improve this Doc View Source MAX_RADIX Max radix value. Declaration public const int MAX_RADIX = 36 Field Value Type Description System.Int32 | Improve this Doc View Source MIN_RADIX Min radix value. Declaration public const int MIN_RADIX = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source BitCount(Int32) Declaration public static int BitCount(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.Int32 | Improve this Doc View Source BitCount(Int64) Declaration public static int BitCount(long num) Parameters Type Name Description System.Int64 num Returns Type Description System.Int32 | Improve this Doc View Source DoubleToInt64Bits(Double) NOTE: This was doubleToLongBits() in the JDK Declaration public static long DoubleToInt64Bits(double value) Parameters Type Name Description System.Double value Returns Type Description System.Int64 | Improve this Doc View Source DoubleToRawInt64Bits(Double) NOTE: This was doubleToRawLongBits() in the JDK Declaration public static long DoubleToRawInt64Bits(double value) Parameters Type Name Description System.Double value Returns Type Description System.Int64 | Improve this Doc View Source FlipEndian(Char) Declaration public static char FlipEndian(char x) Parameters Type Name Description System.Char x Returns Type Description System.Char | Improve this Doc View Source FlipEndian(Double) Declaration public static double FlipEndian(double d) Parameters Type Name Description System.Double d Returns Type Description System.Double | Improve this Doc View Source FlipEndian(Int16) Declaration public static short FlipEndian(short x) Parameters Type Name Description System.Int16 x Returns Type Description System.Int16 | Improve this Doc View Source FlipEndian(Int32) Declaration public static int FlipEndian(int x) Parameters Type Name Description System.Int32 x Returns Type Description System.Int32 | Improve this Doc View Source FlipEndian(Int64) Declaration public static long FlipEndian(long x) Parameters Type Name Description System.Int64 x Returns Type Description System.Int64 | Improve this Doc View Source FlipEndian(Single) Declaration public static float FlipEndian(float f) Parameters Type Name Description System.Single f Returns Type Description System.Single | Improve this Doc View Source Int32BitsToSingle(Int32) NOTE: This was intBitsToFloat() in the JDK Declaration public static float Int32BitsToSingle(int value) Parameters Type Name Description System.Int32 value Returns Type Description System.Single | Improve this Doc View Source IsNumber(Object) Declaration public static bool IsNumber(this object value) Parameters Type Name Description System.Object value Returns Type Description System.Boolean | Improve this Doc View Source NumberOfLeadingZeros(Int32) Declaration public static int NumberOfLeadingZeros(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.Int32 | Improve this Doc View Source NumberOfLeadingZeros(Int64) Declaration public static int NumberOfLeadingZeros(long num) Parameters Type Name Description System.Int64 num Returns Type Description System.Int32 | Improve this Doc View Source NumberOfTrailingZeros(Int32) Declaration public static int NumberOfTrailingZeros(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.Int32 | Improve this Doc View Source NumberOfTrailingZeros(Int64) Declaration public static int NumberOfTrailingZeros(long num) Parameters Type Name Description System.Int64 num Returns Type Description System.Int32 | Improve this Doc View Source Parse(String, Int32) Parses a number in the specified radix. Declaration public static long Parse(string s, int radix) Parameters Type Name Description System.String s An input System.String. System.Int32 radix A radix. Returns Type Description System.Int64 The parsed number in the specified radix. | Improve this Doc View Source RotateLeft(Int32, Int32) Declaration public static int RotateLeft(int i, int reps) Parameters Type Name Description System.Int32 i System.Int32 reps Returns Type Description System.Int32 | Improve this Doc View Source RotateRight(Int32, Int32) Declaration public static int RotateRight(int i, int reps) Parameters Type Name Description System.Int32 i System.Int32 reps Returns Type Description System.Int32 | Improve this Doc View Source Signum(Int64) Declaration public static int Signum(long a) Parameters Type Name Description System.Int64 a Returns Type Description System.Int32 | Improve this Doc View Source SingleToInt32Bits(Single) NOTE: This was floatToIntBits() in the JDK Declaration public static int SingleToInt32Bits(float value) Parameters Type Name Description System.Single value Returns Type Description System.Int32 | Improve this Doc View Source SingleToInt64Bits(Single) NOTE: This was floatToLongBits() in the JDK Declaration public static long SingleToInt64Bits(float value) Parameters Type Name Description System.Single value Returns Type Description System.Int64 | Improve this Doc View Source SingleToRawInt32Bits(Single) NOTE: This was floatToRawIntBits() in the JDK Declaration public static int SingleToRawInt32Bits(float value) Parameters Type Name Description System.Single value Returns Type Description System.Int32 | Improve this Doc View Source ToBinaryString(Int32) Declaration public static string ToBinaryString(int value) Parameters Type Name Description System.Int32 value Returns Type Description System.String | Improve this Doc View Source ToInt64(String) Converts a System.String number to long. Declaration public static long ToInt64(string s) Parameters Type Name Description System.String s Returns Type Description System.Int64 | Improve this Doc View Source ToString(Int64) Converts a number to System.String. Declaration public static string ToString(long number) Parameters Type Name Description System.Int64 number Returns Type Description System.String | Improve this Doc View Source ToString(Int64, Int32) Converts a number to System.String in the specified radix. Declaration public static string ToString(long i, int radix) Parameters Type Name Description System.Int64 i A number to be converted. System.Int32 radix A radix. Returns Type Description System.String A System.String representation of the number in the specified redix. | Improve this Doc View Source ToString(Single) Converts a number to System.String. Declaration public static string ToString(float f) Parameters Type Name Description System.Single f Returns Type Description System.String | Improve this Doc View Source URShift(Int32, Int32) Performs an unsigned bitwise right shift with the specified number Declaration public static int URShift(int number, int bits) Parameters Type Name Description System.Int32 number Number to operate on System.Int32 bits Ammount of bits to shift Returns Type Description System.Int32 The resulting number from the shift operation | Improve this Doc View Source URShift(Int64, Int32) Performs an unsigned bitwise right shift with the specified number Declaration public static long URShift(long number, int bits) Parameters Type Name Description System.Int64 number Number to operate on System.Int32 bits Ammount of bits to shift Returns Type Description System.Int64 The resulting number from the shift operation"
  },
  "api/Lucene.Net/Lucene.Net.Support.MathExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.MathExtensions.html",
    "title": "Class MathExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MathExtensions Inheritance System.Object MathExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class MathExtensions Methods | Improve this Doc View Source ToDegrees(Decimal) Converts an angle measured in radians to an approximately equivalent angle measured in degrees. The conversion from radians to degrees is generally inexact; users should not expect Cos((90.0).ToRadians()) to exactly equal 0.0. Declaration public static decimal ToDegrees(this decimal radians) Parameters Type Name Description System.Decimal radians An angle in radians to convert to radians Returns Type Description System.Decimal The value in radians | Improve this Doc View Source ToDegrees(Double) Converts an angle measured in radians to an approximately equivalent angle measured in degrees. The conversion from radians to degrees is generally inexact; users should not expect Cos((90.0).ToRadians()) to exactly equal 0.0. Declaration public static double ToDegrees(this double radians) Parameters Type Name Description System.Double radians An angle in radians to convert to radians Returns Type Description System.Double The value in radians | Improve this Doc View Source ToDegrees(Int32) Converts an angle measured in radians to an approximately equivalent angle measured in degrees. The conversion from radians to degrees is generally inexact; users should not expect Cos((90.0).ToRadians()) to exactly equal 0.0. Declaration public static double ToDegrees(this int radians) Parameters Type Name Description System.Int32 radians An angle in radians to convert to radians Returns Type Description System.Double The value in radians | Improve this Doc View Source ToRadians(Decimal) Converts an angle measured in degrees to an approximately equivalent angle measured in radians. The conversion from degrees to radians is generally inexact. Declaration public static decimal ToRadians(this decimal degrees) Parameters Type Name Description System.Decimal degrees An angle in degrees to convert to radians Returns Type Description System.Decimal The value in radians | Improve this Doc View Source ToRadians(Double) Converts an angle measured in degrees to an approximately equivalent angle measured in radians. The conversion from degrees to radians is generally inexact. Declaration public static double ToRadians(this double degrees) Parameters Type Name Description System.Double degrees An angle in degrees to convert to radians Returns Type Description System.Double The value in radians | Improve this Doc View Source ToRadians(Int32) Converts an angle measured in degrees to an approximately equivalent angle measured in radians. The conversion from degrees to radians is generally inexact. Declaration public static double ToRadians(this int degrees) Parameters Type Name Description System.Int32 degrees An angle in degrees to convert to radians Returns Type Description System.Double The value in radians"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTableOrder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTableOrder.html",
    "title": "Enum LurchTableOrder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum LurchTableOrder Defines if and how items added to a LurchTable are linked together, this defines the value returned from Peek/Dequeue as the oldest entry of the specified operation. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public enum LurchTableOrder Fields Name Description Access Linked by most recently inserted, updated, or fetched Insertion Linked in insertion order Modified Linked by most recently inserted or updated None No linking Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.Showing.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.Showing.html",
    "title": "Class Showing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Showing Inheritance System.Object Showing Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public static class Showing Methods | Improve this Doc View Source Show(Object, StringBuilder, ref Int32, IFormatProvider) Show Object obj by appending it to stringbuilder Declaration public static bool Show(object obj, StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Object obj System.Text.StringBuilder stringbuilder System.Int32 rest System.IFormatProvider formatProvider Returns Type Description System.Boolean True if obj was shown completely. | Improve this Doc View Source ShowCollectionValue<T>(ICollectionValue<T>, StringBuilder, ref Int32, IFormatProvider) Declaration public static bool ShowCollectionValue<T>(ICollectionValue<T> items, StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description ICollectionValue <T> items System.Text.StringBuilder stringbuilder System.Int32 rest System.IFormatProvider formatProvider Returns Type Description System.Boolean True if collection was shown completely Type Parameters Name Description T | Improve this Doc View Source ShowDictionary<K, V>(IDictionary<K, V>, StringBuilder, ref Int32, IFormatProvider) Declaration public static bool ShowDictionary<K, V>(IDictionary<K, V> dictionary, StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description IDictionary <K, V> dictionary System.Text.StringBuilder stringbuilder System.Int32 rest System.IFormatProvider formatProvider Returns Type Description System.Boolean Type Parameters Name Description K V | Improve this Doc View Source ShowString(IShowable, String, IFormatProvider) Declaration public static string ShowString(IShowable showable, string format, IFormatProvider formatProvider) Parameters Type Name Description IShowable showable System.String format System.IFormatProvider formatProvider Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionValueBase-1.RaiseForRemoveAllHandler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionValueBase-1.RaiseForRemoveAllHandler.html",
    "title": "Class CollectionValueBase<T>.RaiseForRemoveAllHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionValueBase<T>.RaiseForRemoveAllHandler Inheritance System.Object CollectionValueBase<T>.RaiseForRemoveAllHandler Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax protected class RaiseForRemoveAllHandler Constructors | Improve this Doc View Source RaiseForRemoveAllHandler(CollectionValueBase<T>) Declaration public RaiseForRemoveAllHandler(CollectionValueBase<T> collection) Parameters Type Name Description CollectionValueBase <T> collection Fields | Improve this Doc View Source MustFire Declaration public readonly bool MustFire Field Value Type Description System.Boolean Methods | Improve this Doc View Source Raise() Declaration public void Raise() | Improve this Doc View Source Remove(T) Declaration public void Remove(T item) Parameters Type Name Description T item Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionClearedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionClearedHandler-1.html",
    "title": "Delegate CollectionClearedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate CollectionClearedHandler<T> The type of event raised after the Clear() operation on a collection. Note: The Clear() operation will not fire ItemsRemoved events. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void CollectionClearedHandler<T>(object sender, ClearedEventArgs eventArgs); Parameters Type Name Description System.Object sender ClearedEventArgs eventArgs Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionChangedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionChangedHandler-1.html",
    "title": "Delegate CollectionChangedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate CollectionChangedHandler<T> The type of event raised after an operation on a collection has changed its contents. Normally, a multioperation like AddAll, C5.IExtensible`1.AddAll(System.Collections.Generic.IEnumerable{`0}) will only fire one CollectionChanged event. Any operation that changes the collection must fire CollectionChanged as its last event. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void CollectionChangedHandler<T>(object sender); Parameters Type Name Description System.Object sender Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.Lock.With-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Lock.With-1.html",
    "title": "Class Lock.With<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lock.With<T> Utility class for executing code with exclusive access. Inheritance System.Object Lock.With<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class With<T> Type Parameters Name Description T Constructors | Improve this Doc View Source With(Lock, Int64) Constructs an executor that will grab the named lock . Declaration public With(Lock lock, long lockWaitTimeout) Parameters Type Name Description Lock lock the Lock instance to use System.Int64 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever Methods | Improve this Doc View Source DoBody() Code to execute with exclusive access. Declaration protected abstract T DoBody() Returns Type Description T | Improve this Doc View Source Run() Calls DoBody() while lock is obtained. Blocks if lock cannot be obtained immediately. Retries to obtain lock once per second until it is obtained, or until it has tried ten times. Lock is released when DoBody() exits. Declaration public virtual T Run() Returns Type Description T Exceptions Type Condition LockObtainFailedException if lock could not be obtained System.IO.IOException if Obtain() throws System.IO.IOException Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.IOContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IOContext.html",
    "title": "Class IOContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IOContext IOContext holds additional details on the merge/search context. A IOContext object can never be initialized as null as passed as a parameter to either OpenInput(String, IOContext) or CreateOutput(String, IOContext) Inheritance System.Object IOContext Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class IOContext Constructors | Improve this Doc View Source IOContext() Declaration public IOContext() | Improve this Doc View Source IOContext(FlushInfo) Declaration public IOContext(FlushInfo flushInfo) Parameters Type Name Description FlushInfo flushInfo | Improve this Doc View Source IOContext(IOContext, Boolean) This constructor is used to initialize a IOContext instance with a new value for the ReadOnce property. Declaration public IOContext(IOContext ctxt, bool readOnce) Parameters Type Name Description IOContext ctxt IOContext object whose information is used to create the new instance except the ReadOnce property. System.Boolean readOnce The new IOContext object will use this value for ReadOnce . | Improve this Doc View Source IOContext(IOContext.UsageContext) Declaration public IOContext(IOContext.UsageContext context) Parameters Type Name Description IOContext.UsageContext context | Improve this Doc View Source IOContext(MergeInfo) Declaration public IOContext(MergeInfo mergeInfo) Parameters Type Name Description MergeInfo mergeInfo Fields | Improve this Doc View Source DEFAULT Declaration public static readonly IOContext DEFAULT Field Value Type Description IOContext | Improve this Doc View Source READ Declaration public static readonly IOContext READ Field Value Type Description IOContext | Improve this Doc View Source READ_ONCE Declaration public static readonly IOContext READ_ONCE Field Value Type Description IOContext Properties | Improve this Doc View Source Context A IOContext.UsageContext setting Declaration public IOContext.UsageContext Context { get; } Property Value Type Description IOContext.UsageContext | Improve this Doc View Source FlushInfo Declaration public FlushInfo FlushInfo { get; } Property Value Type Description FlushInfo | Improve this Doc View Source MergeInfo Declaration public MergeInfo MergeInfo { get; } Property Value Type Description MergeInfo | Improve this Doc View Source ReadOnce Declaration public bool ReadOnce { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.IOContext.UsageContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.IOContext.UsageContext.html",
    "title": "Enum IOContext.UsageContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum IOContext.UsageContext IOContext.UsageContext is a enumeration which specifies the context in which the Directory is being used for. NOTE: This was Context in Lucene Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public enum UsageContext Fields Name Description DEFAULT FLUSH MERGE READ Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Query.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Query.html",
    "title": "Class Query | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Query The abstract base class for queries. Instantiable subclasses are: TermQuery BooleanQuery WildcardQuery PhraseQuery PrefixQuery MultiPhraseQuery FuzzyQuery RegexpQuery TermRangeQuery NumericRangeQuery ConstantScoreQuery DisjunctionMaxQuery MatchAllDocsQuery See also the family of Span Queries ( Lucene.Net.Search.Spans ) and additional queries available in the Queries module Inheritance System.Object Query BooleanQuery ConstantScoreQuery DisjunctionMaxQuery FilteredQuery MatchAllDocsQuery MultiPhraseQuery MultiTermQuery PhraseQuery SpanQuery TermQuery Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Query Properties | Improve this Doc View Source Boost Gets or Sets the boost for this query clause. Documents matching this clause will (in addition to the normal weightings) have their score multiplied by Boost . The boost is 1.0 by default. Declaration public virtual float Boost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clone() Returns a clone of this query. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CreateWeight(IndexSearcher) Expert: Constructs an appropriate Weight implementation for this query. Only implemented by primitive queries, which re-write to themselves. Declaration public virtual Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public virtual void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Exceptions Type Condition System.InvalidOperationException If this query is not yet rewritten | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Expert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritten into a BooleanQuery that consists of TermQuery s. Declaration public virtual Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query | Improve this Doc View Source ToString() Prints a query to a string. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(String) Prints a query to a string, with field assumed to be the default field and omitted. Declaration public abstract string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.FilterStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.FilterStrategy.html",
    "title": "Class FilteredQuery.FilterStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredQuery.FilterStrategy Abstract class that defines how the filter ( DocIdSet ) applied during document collection. Inheritance System.Object FilteredQuery.FilterStrategy FilteredQuery.RandomAccessFilterStrategy Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FilterStrategy Methods | Improve this Doc View Source FilteredBulkScorer(AtomicReaderContext, Weight, Boolean, DocIdSet) Returns a filtered BulkScorer based on this strategy. this is an optional method: the default implementation just calls FilteredScorer(AtomicReaderContext, Weight, DocIdSet) and wraps that into a BulkScorer . Declaration public virtual BulkScorer FilteredBulkScorer(AtomicReaderContext context, Weight weight, bool scoreDocsInOrder, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context the AtomicReaderContext for which to return the Scorer . Weight weight the FilteredQuery Weight to create the filtered scorer. System.Boolean scoreDocsInOrder true to score docs in order DocIdSet docIdSet the filter DocIdSet to apply Returns Type Description BulkScorer a filtered top scorer | Improve this Doc View Source FilteredScorer(AtomicReaderContext, Weight, DocIdSet) Returns a filtered Scorer based on this strategy. Declaration public abstract Scorer FilteredScorer(AtomicReaderContext context, Weight weight, DocIdSet docIdSet) Parameters Type Name Description AtomicReaderContext context the AtomicReaderContext for which to return the Scorer . Weight weight the FilteredQuery Weight to create the filtered scorer. DocIdSet docIdSet the filter DocIdSet to apply Returns Type Description Scorer a filtered scorer Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Filter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Filter.html",
    "title": "Class Filter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Filter Abstract base class for restricting which documents may be returned during searching. Inheritance System.Object Filter CachingWrapperFilter DocTermOrdsRangeFilter FieldCacheRangeFilter<T> FieldCacheTermsFilter FieldValueFilter MultiTermQueryWrapperFilter<Q> QueryWrapperFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Filter Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Creates a DocIdSet enumerating the documents that should be permitted in search results. NOTE: null can be returned if no documents are accepted by this Filter . Note: this method will be called once per segment in the index during searching. The returned DocIdSet must refer to document IDs for that segment, not for the top-level reader. Declaration public abstract DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context a AtomicReaderContext instance opened on the index currently searched on. Note, it is likely that the provided reader info does not represent the whole underlying index i.e. if the index has more than one segment the given reader only represents a single segment. The provided context is always an atomic context, so you can call Fields on the context's reader, for example. IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description DocIdSet A DocIdSet that provides the documents which should be permitted or prohibited in search results. NOTE: null should be returned if the filter doesn't accept any documents otherwise internal optimization might not apply in the case an empty DocIdSet is returned. | Improve this Doc View Source NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) Creates a new instance with the ability to specify the body of the GetDocIdSet(AtomicReaderContext, IBits) method through the getDocIdSet parameter. Simple example: var filter = Filter.NewAnonymous(getDocIdSet: (context, acceptDocs) => { if (acceptDocs == null) acceptDocs = new Bits.MatchAllBits(5); OpenBitSet bitset = new OpenBitSet(5); if (acceptDocs.Get(1)) bitset.Set(1); if (acceptDocs.Get(3)) bitset.Set(3); return new DocIdBitSet(bitset); }); LUCENENET specific Declaration public static Filter NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet> getDocIdSet) Parameters Type Name Description System.Func < AtomicReaderContext , IBits , DocIdSet > getDocIdSet A delegate method that represents (is called by) the GetDocIdSet(AtomicReaderContext, IBits) method. It accepts a AtomicReaderContext context and a IBits acceptDocs and returns the DocIdSet for this filter. Returns Type Description Filter Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.html",
    "title": "Class FieldCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache Inheritance System.Object FieldCache Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class FieldCache Fields | Improve this Doc View Source DEFAULT Expert: The cache used internally by sorting and range query classes. Declaration public static IFieldCache DEFAULT Field Value Type Description IFieldCache | Improve this Doc View Source DEFAULT_BYTE_PARSER The default parser for byte values, which are encoded by System.SByte.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . Declaration [Obsolete] public static readonly FieldCache.IByteParser DEFAULT_BYTE_PARSER Field Value Type Description FieldCache.IByteParser | Improve this Doc View Source DEFAULT_DOUBLE_PARSER The default parser for System.Double values, which are encoded by System.Double.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . Declaration [Obsolete] public static readonly FieldCache.IDoubleParser DEFAULT_DOUBLE_PARSER Field Value Type Description FieldCache.IDoubleParser | Improve this Doc View Source DEFAULT_INT16_PARSER The default parser for System.Int16 values, which are encoded by System.Int16.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . NOTE: This was DEFAULT_SHORT_PARSER in Lucene Declaration [Obsolete] public static readonly FieldCache.IInt16Parser DEFAULT_INT16_PARSER Field Value Type Description FieldCache.IInt16Parser | Improve this Doc View Source DEFAULT_INT32_PARSER The default parser for System.Int32 values, which are encoded by System.Int32.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . NOTE: This was DEFAULT_INT_PARSER in Lucene Declaration [Obsolete] public static readonly FieldCache.IInt32Parser DEFAULT_INT32_PARSER Field Value Type Description FieldCache.IInt32Parser | Improve this Doc View Source DEFAULT_INT64_PARSER The default parser for System.Int64 values, which are encoded by System.Int64.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . NOTE: This was DEFAULT_LONG_PARSER in Lucene Declaration [Obsolete] public static readonly FieldCache.IInt64Parser DEFAULT_INT64_PARSER Field Value Type Description FieldCache.IInt64Parser | Improve this Doc View Source DEFAULT_SINGLE_PARSER The default parser for System.Single values, which are encoded by System.Single.ToString(System.String,System.IFormatProvider) using System.Globalization.CultureInfo.InvariantCulture . NOTE: This was DEFAULT_FLOAT_PARSER in Lucene Declaration [Obsolete] public static readonly FieldCache.ISingleParser DEFAULT_SINGLE_PARSER Field Value Type Description FieldCache.ISingleParser | Improve this Doc View Source NUMERIC_UTILS_DOUBLE_PARSER A parser instance for System.Double values encoded with NumericUtils , e.g. when indexed via DoubleField / NumericTokenStream . Declaration public static readonly FieldCache.IDoubleParser NUMERIC_UTILS_DOUBLE_PARSER Field Value Type Description FieldCache.IDoubleParser | Improve this Doc View Source NUMERIC_UTILS_INT32_PARSER A parser instance for System.Int32 values encoded by NumericUtils , e.g. when indexed via Int32Field / NumericTokenStream . NOTE: This was NUMERIC_UTILS_INT_PARSER in Lucene Declaration public static readonly FieldCache.IInt32Parser NUMERIC_UTILS_INT32_PARSER Field Value Type Description FieldCache.IInt32Parser | Improve this Doc View Source NUMERIC_UTILS_INT64_PARSER A parser instance for System.Int64 values encoded by NumericUtils , e.g. when indexed via Int64Field / NumericTokenStream . NOTE: This was NUMERIC_UTILS_LONG_PARSER in Lucene Declaration public static readonly FieldCache.IInt64Parser NUMERIC_UTILS_INT64_PARSER Field Value Type Description FieldCache.IInt64Parser | Improve this Doc View Source NUMERIC_UTILS_SINGLE_PARSER A parser instance for System.Single values encoded with NumericUtils , e.g. when indexed via SingleField / NumericTokenStream . NOTE: This was NUMERIC_UTILS_FLOAT_PARSER in Lucene Declaration public static readonly FieldCache.ISingleParser NUMERIC_UTILS_SINGLE_PARSER Field Value Type Description FieldCache.ISingleParser"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Singles.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Singles.html",
    "title": "Class FieldCache.Singles | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Singles Field values as 32-bit floats NOTE: This was Floats in Lucene Inheritance System.Object FieldCache.Singles Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Singles Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Singles EMPTY Field Value Type Description FieldCache.Singles Methods | Improve this Doc View Source Get(Int32) Return an System.Single representation of this field's value. Declaration public abstract float Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Single Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.CollectionStatistics.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.CollectionStatistics.html",
    "title": "Class CollectionStatistics | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionStatistics Contains statistics for a collection (field) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CollectionStatistics Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class CollectionStatistics Constructors | Improve this Doc View Source CollectionStatistics(String, Int64, Int64, Int64, Int64) Sole constructor. Declaration public CollectionStatistics(string field, long maxDoc, long docCount, long sumTotalTermFreq, long sumDocFreq) Parameters Type Name Description System.String field System.Int64 maxDoc System.Int64 docCount System.Int64 sumTotalTermFreq System.Int64 sumDocFreq Properties | Improve this Doc View Source DocCount Returns the total number of documents that have at least one term for this field. Declaration public long DocCount { get; } Property Value Type Description System.Int64 See Also DocCount | Improve this Doc View Source Field Returns the field name Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MaxDoc Returns the total number of documents, regardless of whether they all contain values for this field. Declaration public long MaxDoc { get; } Property Value Type Description System.Int64 See Also MaxDoc | Improve this Doc View Source SumDocFreq Returns the total number of postings for this field Declaration public long SumDocFreq { get; } Property Value Type Description System.Int64 See Also SumDocFreq | Improve this Doc View Source SumTotalTermFreq Returns the total number of tokens for this field Declaration public long SumTotalTermFreq { get; } Property Value Type Description System.Int64 See Also SumTotalTermFreq Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Misc.HighFreqTerms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Misc.HighFreqTerms.html",
    "title": "Class HighFreqTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HighFreqTerms HighFreqTerms class extracts the top n most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. If the -t flag is given, both document frequency and total tf (total number of occurrences) are reported, ordered by descending total tf. Inheritance System.Object HighFreqTerms Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class HighFreqTerms Fields | Improve this Doc View Source DEFAULT_NUMTERMS Declaration public const int DEFAULT_NUMTERMS = 100 Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetHighFreqTerms(IndexReader, Int32, String, IComparer<TermStats>) Returns TermStats[] ordered by the specified comparer Declaration public static TermStats[] GetHighFreqTerms(IndexReader reader, int numTerms, string field, IComparer<TermStats> comparer) Parameters Type Name Description IndexReader reader System.Int32 numTerms System.String field System.Collections.Generic.IComparer < TermStats > comparer Returns Type Description TermStats [] | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Misc.GetTermInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Misc.GetTermInfo.html",
    "title": "Class GetTermInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GetTermInfo Utility to get document frequency and total number of occurrences (sum of the tf for each doc) of a term. Inheritance System.Object GetTermInfo Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class GetTermInfo Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source TermInfo(Directory, Term) Declaration public static void TermInfo(Directory dir, Term term) Parameters Type Name Description Directory dir Term term Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReader.ICoreDisposedListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReader.ICoreDisposedListener.html",
    "title": "Interface SegmentReader.ICoreDisposedListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface SegmentReader.ICoreDisposedListener Called when the shared core for this SegmentReader is disposed. This listener is called only once all SegmentReader s sharing the same core are disposed. At this point it is safe for apps to evict this reader from any caches keyed on CoreCacheKey . This is the same interface that IFieldCache uses, internally, to evict entries. NOTE: This was CoreClosedListener in Lucene. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface ICoreDisposedListener Methods | Improve this Doc View Source OnDispose(Object) Invoked when the shared core of the original SegmentReader has disposed. Declaration void OnDispose(object ownerCoreCacheKey) Parameters Type Name Description System.Object ownerCoreCacheKey Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.FindSegmentsFile.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfos.FindSegmentsFile.html",
    "title": "Class SegmentInfos.FindSegmentsFile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfos.FindSegmentsFile Utility class for executing code that needs to do something with the current segments file. This is necessary with lock-less commits because from the time you locate the current segments file name, until you actually open it, read its contents, or check modified time, etc., it could have been deleted due to a writer commit finishing. Inheritance System.Object SegmentInfos.FindSegmentsFile Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class FindSegmentsFile Constructors | Improve this Doc View Source FindSegmentsFile(Directory) Sole constructor. Declaration public FindSegmentsFile(Directory directory) Parameters Type Name Description Directory directory Methods | Improve this Doc View Source DoBody(String) Subclass must implement this. The assumption is an System.IO.IOException will be thrown if something goes wrong during the processing that could have been caused by a writer committing. Declaration protected abstract object DoBody(string segmentFileName) Parameters Type Name Description System.String segmentFileName Returns Type Description System.Object | Improve this Doc View Source Run() Locate the most recent segments file and run DoBody(String) on it. Declaration public virtual object Run() Returns Type Description System.Object | Improve this Doc View Source Run(IndexCommit) Run DoBody(String) on the provided commit. Declaration public virtual object Run(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.Object Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentInfo.html",
    "title": "Class SegmentInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfo Information about a segment such as it's name, directory, and files related to the segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfo Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SegmentInfo Constructors | Improve this Doc View Source SegmentInfo(Directory, String, String, Int32, Boolean, Codec, IDictionary<String, String>) Construct a new complete SegmentInfo instance from input. Note: this is public only to allow access from the codecs package. Declaration public SegmentInfo(Directory dir, string version, string name, int docCount, bool isCompoundFile, Codec codec, IDictionary<string, string> diagnostics) Parameters Type Name Description Directory dir System.String version System.String name System.Int32 docCount System.Boolean isCompoundFile Codec codec System.Collections.Generic.IDictionary < System.String , System.String > diagnostics | Improve this Doc View Source SegmentInfo(Directory, String, String, Int32, Boolean, Codec, IDictionary<String, String>, IDictionary<String, String>) Construct a new complete SegmentInfo instance from input. Note: this is public only to allow access from the codecs package. Declaration public SegmentInfo(Directory dir, string version, string name, int docCount, bool isCompoundFile, Codec codec, IDictionary<string, string> diagnostics, IDictionary<string, string> attributes) Parameters Type Name Description Directory dir System.String version System.String name System.Int32 docCount System.Boolean isCompoundFile Codec codec System.Collections.Generic.IDictionary < System.String , System.String > diagnostics System.Collections.Generic.IDictionary < System.String , System.String > attributes Fields | Improve this Doc View Source NO Used by some member fields to mean not present (e.g., norms, deletions). Declaration public static readonly int NO Field Value Type Description System.Int32 | Improve this Doc View Source YES Used by some member fields to mean present (e.g., norms, deletions). Declaration public static readonly int YES Field Value Type Description System.Int32 Properties | Improve this Doc View Source Attributes Returns the internal codec attributes map. May be null if no mappings exist. Declaration [Obsolete(\"no longer supported\")] public IDictionary<string, string> Attributes { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Codec Gets or Sets Codec that wrote this segment. Setter can only be called once. Declaration public Codec Codec { get; set; } Property Value Type Description Codec | Improve this Doc View Source Diagnostics Gets or Sets diagnostics saved into the segment when it was written. Declaration public IDictionary<string, string> Diagnostics { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Dir Where this segment resides. Declaration public Directory Dir { get; } Property Value Type Description Directory | Improve this Doc View Source DocCount Returns number of documents in this segment (deletions are not taken into account). Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Unique segment name in the directory. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source UseCompoundFile Gets or Sets whether this segment is stored as a compound file. true if this is a compound file; else, false Declaration public bool UseCompoundFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Version Used by DefaultSegmentInfosReader to upgrade a 3.0 segment to record its version is \"3.0\". this method can be removed when we're not required to support 3x indexes anymore, e.g. in 5.0. NOTE: this method is used for internal purposes only - you should not modify the version of a SegmentInfo , or it may result in unexpected exceptions thrown when you attempt to open the index. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public string Version { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source AddFile(String) Add this file to the set of files written for this segment. Declaration public void AddFile(string file) Parameters Type Name Description System.String file | Improve this Doc View Source AddFiles(ICollection<String>) Add these files to the set of files written for this segment. Declaration public void AddFiles(ICollection<string> files) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > files | Improve this Doc View Source Equals(Object) We consider another SegmentInfo instance equal if it has the same dir and same name. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetAttribute(String) Get a codec attribute value, or null if it does not exist Declaration [Obsolete(\"no longer supported\")] public string GetAttribute(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source GetFiles() Return all files referenced by this SegmentInfo . Declaration public ISet<string> GetFiles() Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source PutAttribute(String, String) Puts a codec attribute value. This is a key-value mapping for the field that the codec can use to store additional metadata, and will be available to the codec when reading the segment via GetAttribute(String) If a value already exists for the field, it will be replaced with the new value. Declaration [Obsolete(\"no longer supported\")] public string PutAttribute(string key, string value) Parameters Type Name Description System.String key System.String value Returns Type Description System.String | Improve this Doc View Source SetFiles(ISet<String>) Sets the files written for this segment. Declaration public void SetFiles(ISet<string> files) Parameters Type Name Description System.Collections.Generic.ISet < System.String > files | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(Directory, Int32) Used for debugging. Format may suddenly change. Current format looks like _a(3.1):c45/4 , which means the segment's name is _a ; it was created with Lucene 3.1 (or '?' if it's unknown); it's using compound file format (would be C if not compound); it has 45 documents; it has 4 deletions (this part is left off when there are no deletions). Declaration public string ToString(Directory dir, int delCount) Parameters Type Name Description Directory dir System.Int32 delCount Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiPassIndexSplitter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiPassIndexSplitter.html",
    "title": "Class MultiPassIndexSplitter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiPassIndexSplitter This tool splits input index into multiple equal parts. The method employed here uses AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document id-s that fall outside the selected partition. Note 1: Deletes are only applied to a buffered list of deleted docs and don't affect the source index - this tool works also with read-only indexes. Note 2: the disadvantage of this tool is that source index needs to be read as many times as there are parts to be created, hence the name of this tool. NOTE : this tool is unaware of documents added atomically via AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) , which means it can easily break up such document groups. Inheritance System.Object MultiPassIndexSplitter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.Misc.dll Syntax public class MultiPassIndexSplitter Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Split(LuceneVersion, IndexReader, Directory[], Boolean) Split source index into multiple parts. Declaration public virtual void Split(LuceneVersion version, IndexReader in, Directory[] outputs, bool seq) Parameters Type Name Description LuceneVersion version lucene compatibility version IndexReader in source index, can have deletions, can have multiple segments (or multiple readers). Directory [] outputs list of directories where the output parts will be stored. System.Boolean seq if true, then the source index will be split into equal increasing ranges of document id-s. If false, source document id-s will be assigned in a deterministic round-robin fashion to one of the output splits. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.html",
    "title": "Class MultiDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocValues A wrapper for CompositeReader providing access to DocValues . NOTE : for multi readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. NOTE : this is very costly. @lucene.experimental This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MultiDocValues Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiDocValues Methods | Improve this Doc View Source GetBinaryValues(IndexReader, String) Returns a BinaryDocValues for a reader's docvalues (potentially merging on-the-fly) This is a slow way to access binary values. Instead, access them per-segment with GetBinaryDocValues(String) Declaration public static BinaryDocValues GetBinaryValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(IndexReader, String) Returns a IBits for a reader's docsWithField (potentially merging on-the-fly) This is a slow way to access this bitset. Instead, access them per-segment with GetDocsWithField(String) Declaration public static IBits GetDocsWithField(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(IndexReader, String) Returns a NumericDocValues for a reader's norms (potentially merging on-the-fly). This is a slow way to access normalization values. Instead, access them per-segment with GetNormValues(String) Declaration public static NumericDocValues GetNormValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericValues(IndexReader, String) Returns a NumericDocValues for a reader's docvalues (potentially merging on-the-fly) This is a slow way to access numeric values. Instead, access them per-segment with GetNumericDocValues(String) Declaration public static NumericDocValues GetNumericValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedSetValues(IndexReader, String) Returns a SortedSetDocValues for a reader's docvalues (potentially doing extremely slow things). This is an extremely slow way to access sorted values. Instead, access them per-segment with GetSortedSetDocValues(String) Declaration public static SortedSetDocValues GetSortedSetValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description SortedSetDocValues | Improve this Doc View Source GetSortedValues(IndexReader, String) Returns a SortedDocValues for a reader's docvalues (potentially doing extremely slow things). this is an extremely slow way to access sorted values. Instead, access them per-segment with GetSortedDocValues(String) Declaration public static SortedDocValues GetSortedValues(IndexReader r, string field) Parameters Type Name Description IndexReader r System.String field Returns Type Description SortedDocValues Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.OrdinalMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.OrdinalMap.html",
    "title": "Class MultiDocValues.OrdinalMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocValues.OrdinalMap maps per-segment ordinals to/from global ordinal space Inheritance System.Object MultiDocValues.OrdinalMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class OrdinalMap Constructors | Improve this Doc View Source OrdinalMap(Object, TermsEnum[]) Creates an ordinal map that allows mapping ords to/from a merged space from subs . Declaration public OrdinalMap(object owner, TermsEnum[] subs) Parameters Type Name Description System.Object owner a cache key TermsEnum [] subs TermsEnum s that support Ord . They need not be dense (e.g. can be FilteredTermsEnums). Exceptions Type Condition System.IO.IOException if an I/O error occurred. Properties | Improve this Doc View Source ValueCount Returns the total number of unique terms in global ord space. Declaration public virtual long ValueCount { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetFirstSegmentNumber(Int64) Given a global ordinal, returns the index of the first segment that contains this term. Declaration public virtual int GetFirstSegmentNumber(long globalOrd) Parameters Type Name Description System.Int64 globalOrd Returns Type Description System.Int32 | Improve this Doc View Source GetFirstSegmentOrd(Int64) Given global ordinal, returns the ordinal of the first segment which contains this ordinal (the corresponding to the segment return GetFirstSegmentNumber(Int64) ). Declaration public virtual long GetFirstSegmentOrd(long globalOrd) Parameters Type Name Description System.Int64 globalOrd Returns Type Description System.Int64 | Improve this Doc View Source GetGlobalOrd(Int32, Int64) Given a segment number and segment ordinal, returns the corresponding global ordinal. Declaration public virtual long GetGlobalOrd(int segmentIndex, long segmentOrd) Parameters Type Name Description System.Int32 segmentIndex System.Int64 segmentOrd Returns Type Description System.Int64 | Improve this Doc View Source RamBytesUsed() Returns total byte size used by this ordinal map. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.ITwoPhaseCommit.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ITwoPhaseCommit.html",
    "title": "Interface ITwoPhaseCommit | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITwoPhaseCommit An interface for implementations that support 2-phase commit. You can use TwoPhaseCommitTool to execute a 2-phase commit algorithm over several ITwoPhaseCommit s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface ITwoPhaseCommit Methods | Improve this Doc View Source Commit() The second phase of a 2-phase commit. Implementations should ideally do very little work in this method (following PrepareCommit() , and after it returns, the caller can assume that the changes were successfully committed to the underlying storage. Declaration void Commit() | Improve this Doc View Source PrepareCommit() The first stage of a 2-phase commit. Implementations should do as much work as possible in this method, but avoid actual committing changes. If the 2-phase commit fails, Rollback() is called to discard all changes since last successful commit. Declaration void PrepareCommit() | Improve this Doc View Source Rollback() Discards any changes that have occurred since the last commit. In a 2-phase commit algorithm, where one of the objects failed to Commit() or PrepareCommit() , this method is used to roll all other objects back to their previous state. Declaration void Rollback() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.html",
    "title": "Class CheckIndex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex Basic tool and API to check the health of an index and write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Please make a complete backup of your index before using this to fix your index! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CheckIndex Constructors | Improve this Doc View Source CheckIndex(Directory) Create a new CheckIndex on the directory. Declaration public CheckIndex(Directory dir) Parameters Type Name Description Directory dir Properties | Improve this Doc View Source CrossCheckTermVectors If true , term vectors are compared against postings to make sure they are the same. This will likely drastically increase time it takes to run CheckIndex ! Declaration public virtual bool CrossCheckTermVectors { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source InfoStream Gets or Sets infoStream where messages should go. If null, no messages are printed. If InfoStreamIsVerbose is true then more details are printed. Declaration public virtual TextWriter InfoStream { get; set; } Property Value Type Description System.IO.TextWriter | Improve this Doc View Source InfoStreamIsVerbose If true , prints more details to the InfoStream , if set. Declaration public virtual bool InfoStreamIsVerbose { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source DoCheckIndex() Returns a CheckIndex.Status instance detailing the state of the index. As this method checks every byte in the index, on a large index it can take quite a long time to run. WARNING : make sure you only call this when the index is not opened by any writer. Declaration public virtual CheckIndex.Status DoCheckIndex() Returns Type Description CheckIndex.Status | Improve this Doc View Source DoCheckIndex(IList<String>) Returns a CheckIndex.Status instance detailing the state of the index. Declaration public virtual CheckIndex.Status DoCheckIndex(IList<string> onlySegments) Parameters Type Name Description System.Collections.Generic.IList < System.String > onlySegments list of specific segment names to check As this method checks every byte in the specified segments, on a large index it can take quite a long time to run. WARNING : make sure you only call this when the index is not opened by any writer. Returns Type Description CheckIndex.Status | Improve this Doc View Source FixIndex(CheckIndex.Status) Repairs the index using previously returned result from DoCheckIndex() . Note that this does not remove any of the unreferenced files after it's done; you must separately open an IndexWriter , which deletes unreferenced files when it's created. WARNING : this writes a new segments file into the index, effectively removing all documents in broken segments from the index. BE CAREFUL. WARNING : Make sure you only call this when the index is not opened by any writer. Declaration public virtual void FixIndex(CheckIndex.Status result) Parameters Type Name Description CheckIndex.Status result | Improve this Doc View Source FlushInfoStream() Declaration public virtual void FlushInfoStream() | Improve this Doc View Source Main(String[]) Declaration [STAThread] public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source TestDocValues(AtomicReader, TextWriter) Test docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.DocValuesStatus TestDocValues(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.DocValuesStatus | Improve this Doc View Source TestFieldNorms(AtomicReader, TextWriter) Test field norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.FieldNormStatus TestFieldNorms(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.FieldNormStatus | Improve this Doc View Source TestPostings(AtomicReader, TextWriter) Test the term index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermIndexStatus TestPostings(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TestPostings(AtomicReader, TextWriter, Boolean) Test the term index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermIndexStatus TestPostings(AtomicReader reader, TextWriter infoStream, bool verbose) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream System.Boolean verbose Returns Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TestStoredFields(AtomicReader, TextWriter) Test stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.StoredFieldStatus TestStoredFields(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.StoredFieldStatus | Improve this Doc View Source TestTermVectors(AtomicReader, TextWriter) Test term vectors. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermVectorStatus TestTermVectors(AtomicReader reader, TextWriter infoStream) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream Returns Type Description CheckIndex.Status.TermVectorStatus | Improve this Doc View Source TestTermVectors(AtomicReader, TextWriter, Boolean, Boolean) Test term vectors. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static CheckIndex.Status.TermVectorStatus TestTermVectors(AtomicReader reader, TextWriter infoStream, bool verbose, bool crossCheckTermVectors) Parameters Type Name Description AtomicReader reader System.IO.TextWriter infoStream System.Boolean verbose System.Boolean crossCheckTermVectors Returns Type Description CheckIndex.Status.TermVectorStatus Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.html",
    "title": "Class CheckIndex.Status | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status Returned from DoCheckIndex() detailing the health and status of the index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex.Status Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class Status Properties | Improve this Doc View Source CantOpenSegments True if we were unable to open the segments_N file. Declaration public bool CantOpenSegments { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Clean True if no problems were found with the index. Declaration public bool Clean { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Dir Directory index is in. Declaration public Directory Dir { get; } Property Value Type Description Directory | Improve this Doc View Source MaxSegmentName The greatest segment name. Declaration public int MaxSegmentName { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MissingSegments True if we were unable to locate and load the segments_N file. Declaration public bool MissingSegments { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MissingSegmentVersion True if we were unable to read the version number from segments_N file. Declaration public bool MissingSegmentVersion { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NumBadSegments How many bad segments were found. Declaration public int NumBadSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumSegments Number of segments in the index. Declaration public int NumSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Partial True if we checked only specific segments ( DoCheckIndex(IList<String>) was called with non-null argument). Declaration public bool Partial { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SegmentInfos List of CheckIndex.Status.SegmentInfoStatus instances, detailing status of each segment. Declaration public IList<CheckIndex.Status.SegmentInfoStatus> SegmentInfos { get; } Property Value Type Description System.Collections.Generic.IList < CheckIndex.Status.SegmentInfoStatus > | Improve this Doc View Source SegmentsChecked Empty unless you passed specific segments list to check as optional 3rd argument. Declaration public IList<string> SegmentsChecked { get; } Property Value Type Description System.Collections.Generic.IList < System.String > See Also DoCheckIndex(IList<String>) | Improve this Doc View Source SegmentsFileName Name of latest segments_N file in the index. Declaration public string SegmentsFileName { get; } Property Value Type Description System.String | Improve this Doc View Source ToolOutOfDate True if the index was created with a newer version of Lucene than the CheckIndex tool. Declaration public bool ToolOutOfDate { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TotLoseDocCount How many documents will be lost to bad segments. Declaration public int TotLoseDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UserData Holds the userData of the last commit in the index Declaration public IDictionary<string, string> UserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source ValidCounter Whether the Counter is greater than any of the segments' names. Declaration public bool ValidCounter { get; } Property Value Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermVectorStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermVectorStatus.html",
    "title": "Class CheckIndex.Status.TermVectorStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.TermVectorStatus Status from testing stored fields. Inheritance System.Object CheckIndex.Status.TermVectorStatus Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermVectorStatus Properties | Improve this Doc View Source DocCount Number of documents tested. Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Error Exception thrown during term vector test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TotVectors Total number of term vectors tested. Declaration public long TotVectors { get; } Property Value Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermIndexStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.TermIndexStatus.html",
    "title": "Class CheckIndex.Status.TermIndexStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.TermIndexStatus Status from testing term index. Inheritance System.Object CheckIndex.Status.TermIndexStatus Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermIndexStatus Properties | Improve this Doc View Source BlockTreeStats Holds details of block allocations in the block tree terms dictionary (this is only set if the PostingsFormat for this segment uses block tree. Declaration public IDictionary<string, BlockTreeTermsReader.Stats> BlockTreeStats { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , BlockTreeTermsReader.Stats > | Improve this Doc View Source DelTermCount Number of terms with zero live docs docs. Declaration public long DelTermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Error Exception thrown during term index test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TermCount Number of terms with at least one live doc. Declaration public long TermCount { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotFreq Total frequency across all terms. Declaration public long TotFreq { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotPos Total number of positions. Declaration public long TotPos { get; } Property Value Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericType.html",
    "title": "Enum NumericType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NumericType Data type of the numeric value @since 3.2 Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum NumericType Fields Name Description DOUBLE 64-bit double numeric type INT32 32-bit integer numeric type NOTE: This was INT in Lucene INT64 64-bit long numeric type NOTE: This was LONG in Lucene NONE No numeric type will be used. NOTE: This is the same as setting to null in Lucene SINGLE 32-bit float numeric type NOTE: This was FLOAT in Lucene Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.NumericFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.NumericFieldType.html",
    "title": "Enum NumericFieldType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NumericFieldType Data type of the numeric IIndexableField value Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum NumericFieldType Fields Name Description BYTE 8-bit unsigned integer numeric type DOUBLE 64-bit double numeric type INT16 16-bit short numeric type INT32 32-bit integer numeric type INT64 64-bit long numeric type NONE No numeric type (the field is not numeric). SINGLE 32-bit float numeric type Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.TermVector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.TermVector.html",
    "title": "Enum Field.TermVector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Field.TermVector Specifies whether and how a field should have term vectors. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public enum TermVector Fields Name Description NO Do not store term vectors. WITH_OFFSETS Store the term vector + Token offset information WITH_POSITIONS Store the term vector + token position information WITH_POSITIONS_OFFSETS Store the term vector + Token position and offset information YES Store the term vectors of each document. A term vector is a list of the document's terms and their number of occurrences in that document. Extension Methods FieldExtensions.IsStored() FieldExtensions.WithPositions() FieldExtensions.WithOffsets() Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Store.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Store.html",
    "title": "Enum Field.Store | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Field.Store Specifies whether and how a field should be stored. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum Store Fields Name Description NO Do not store the field's value in the index. YES Store the original field value in the index. this is useful for short texts like a document's title which should be displayed with the results. The value is stored in its original form, i.e. no analyzer is used before it is stored. Extension Methods FieldExtensions.IsStored() Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsFormat.html",
    "title": "Class StoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredFieldsFormat Controls the format of stored fields. Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene40StoredFieldsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsFormat Constructors | Improve this Doc View Source StoredFieldsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsFormat() Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Returns a StoredFieldsReader to load stored fields. Declaration public abstract StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Returns a StoredFieldsWriter to write stored fields. Declaration public abstract StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoWriter.html",
    "title": "Class SegmentInfoWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfoWriter Specifies an API for classes that can write out SegmentInfo data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene40SegmentInfoWriter Lucene46SegmentInfoWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoWriter Constructors | Improve this Doc View Source SegmentInfoWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Write SegmentInfo data. Declaration public abstract void Write(Directory dir, SegmentInfo info, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fis IOContext ioContext Exceptions Type Condition System.IO.IOException If an I/O error occurs. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.NormsFormat.html",
    "title": "Class NormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormsFormat Encodes/decodes per-document score normalization values. Inheritance System.Object NormsFormat Lucene40NormsFormat Lucene42NormsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class NormsFormat Constructors | Improve this Doc View Source NormsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected NormsFormat() Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Returns a DocValuesConsumer to write norms to the index. Declaration public abstract DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer | Improve this Doc View Source NormsProducer(SegmentReadState) Returns a DocValuesProducer to read norms from the index. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an System.IO.IOException should be thrown by the implementation. System.IO.IOException are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MultiLevelSkipListWriter.html",
    "title": "Class MultiLevelSkipListWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiLevelSkipListWriter This abstract class writes skip lists with multiple levels. Example for skipInterval = 3: c (skip level 2) c c c (skip level 1) x x x x x x x x x x (skip level 0) d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) 3 6 9 12 15 18 21 24 27 30 (df) d - document x - skip data c - skip data with child pointer Skip level i contains every skipInterval-th entry from skip level i-1. Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. this guarantees a logarithmic amount of skips to find the target document. While this class takes care of writing the different skip levels, subclasses must define the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiLevelSkipListWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class MultiLevelSkipListWriter Constructors | Improve this Doc View Source MultiLevelSkipListWriter(Int32, Int32, Int32) Creates a MultiLevelSkipListWriter , where Lucene.Net.Codecs.MultiLevelSkipListWriter.skipInterval and Lucene.Net.Codecs.MultiLevelSkipListWriter.skipMultiplier are the same. Declaration protected MultiLevelSkipListWriter(int skipInterval, int maxSkipLevels, int df) Parameters Type Name Description System.Int32 skipInterval System.Int32 maxSkipLevels System.Int32 df | Improve this Doc View Source MultiLevelSkipListWriter(Int32, Int32, Int32, Int32) Creates a MultiLevelSkipListWriter . Declaration protected MultiLevelSkipListWriter(int skipInterval, int skipMultiplier, int maxSkipLevels, int df) Parameters Type Name Description System.Int32 skipInterval System.Int32 skipMultiplier System.Int32 maxSkipLevels System.Int32 df Fields | Improve this Doc View Source m_numberOfSkipLevels Number of levels in this skip list. Declaration protected int m_numberOfSkipLevels Field Value Type Description System.Int32 Methods | Improve this Doc View Source BufferSkip(Int32) Writes the current skip data to the buffers. The current document frequency determines the max level is skip data is to be written to. Declaration public virtual void BufferSkip(int df) Parameters Type Name Description System.Int32 df The current document frequency. Exceptions Type Condition System.IO.IOException If an I/O error occurs. | Improve this Doc View Source Init() Allocates internal skip buffers. Declaration protected virtual void Init() | Improve this Doc View Source ResetSkip() Creates new buffers or empties the existing ones. Declaration public virtual void ResetSkip() | Improve this Doc View Source WriteSkip(IndexOutput) Writes the buffered skip lists to the given output. Declaration public virtual long WriteSkip(IndexOutput output) Parameters Type Name Description IndexOutput output The IndexOutput the skip lists shall be written to. Returns Type Description System.Int64 The pointer the skip list starts. | Improve this Doc View Source WriteSkipData(Int32, IndexOutput) Subclasses must implement the actual skip data encoding in this method. Declaration protected abstract void WriteSkipData(int level, IndexOutput skipBuffer) Parameters Type Name Description System.Int32 level The level skip data shall be writing for. IndexOutput skipBuffer The skip buffer to write to. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.NumericEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.NumericEntry.html",
    "title": "Class Lucene45DocValuesProducer.NumericEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.NumericEntry Metadata entry for a numeric docvalues field. Inheritance System.Object Lucene45DocValuesProducer.NumericEntry Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class NumericEntry Properties | Improve this Doc View Source BlockSize Packed System.Int32 s blocksize. Declaration public int BlockSize { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Count of values written. Declaration public long Count { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source Offset Offset to the actual numeric values. Declaration public long Offset { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source PackedInt32sVersion Packed System.Int32 s version used to encode these numerics. NOTE: This was packedIntsVersion (field) in Lucene Declaration public int PackedInt32sVersion { get; set; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.BinaryEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.BinaryEntry.html",
    "title": "Class Lucene45DocValuesProducer.BinaryEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.BinaryEntry Metadata entry for a binary docvalues field. Inheritance System.Object Lucene45DocValuesProducer.BinaryEntry Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class BinaryEntry Properties | Improve this Doc View Source AddressesOffset Offset to the addressing data that maps a value to its slice of the byte[] . Declaration public long AddressesOffset { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source AddressInterval Interval of shared prefix chunks (when using prefix-compressed binary). Declaration public long AddressInterval { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source BlockSize Packed ints blocksize. Declaration public int BlockSize { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Count of values written. Declaration public long Count { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source PackedInt32sVersion Packed ints version used to encode addressing information. NOTE: This was packedIntsVersion (field) in Lucene. Declaration public int PackedInt32sVersion { get; set; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.LiveDocsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.LiveDocsFormat.html",
    "title": "Class LiveDocsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LiveDocsFormat Format for live/deleted documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LiveDocsFormat Lucene40LiveDocsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class LiveDocsFormat Constructors | Improve this Doc View Source LiveDocsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected LiveDocsFormat() Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Records all files in use by this SegmentCommitInfo into the files argument. Declaration public abstract void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info System.Collections.Generic.ICollection < System.String > files | Improve this Doc View Source NewLiveDocs(IBits) Creates a new mutablebits of the same bits set and size of existing. Declaration public abstract IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits | Improve this Doc View Source NewLiveDocs(Int32) Creates a new MutableBits, with all bits set, for the specified size. Declaration public abstract IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Read live docs bits. Declaration public abstract IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Persist live docs bits. Use NextDelGen to determine the generation of the deletes file you should write to. Declaration public abstract void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.html",
    "title": "Namespace Lucene.Net.Codecs.Compressing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Compressing <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> StoredFieldsFormat that allows cross-document and cross-field compression of stored fields. Classes CompressingStoredFieldsFormat A StoredFieldsFormat that is very similar to Lucene40StoredFieldsFormat but compresses documents in chunks in order to improve the compression ratio. For a chunk size of chunkSize bytes, this StoredFieldsFormat does not support documents larger than ( 2 31 - chunkSize ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . For optimal performance, you should use a MergePolicy that returns segments that have the biggest byte size first. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingStoredFieldsIndexReader Random-access reader for CompressingStoredFieldsIndexWriter . This is a Lucene.NET INTERNAL API, use at your own risk CompressingStoredFieldsIndexWriter Efficient index format for block-based Codec s. this writer generates a file which can be loaded into memory using memory-efficient data structures to quickly locate the block that contains any document. In order to have a compact in-memory representation, for every block of 1024 chunks, this index computes the average number of bytes per chunk and for every chunk, only stores the difference between Data is written as follows: Notes This is a Lucene.NET INTERNAL API, use at your own risk CompressingStoredFieldsReader StoredFieldsReader impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingStoredFieldsWriter StoredFieldsWriter impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsFormat A TermVectorsFormat that compresses chunks of documents together in order to improve the compression ratio. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsReader TermVectorsReader for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressingTermVectorsWriter TermVectorsWriter for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompressionMode A compression mode. Tells how much effort should be spent on compression and decompression of stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Compressor A data compressor. Decompressor A decompressor. LZ4 LZ4 compression and decompression routines. http://code.google.com/p/lz4/ http://fastcompression.blogspot.fr/p/lz4.html LZ4.HashTable LZ4.HCHashTable LZ4.Match"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IStringDistance.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IStringDistance.html",
    "title": "Interface IStringDistance | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStringDistance Interface for string distances. Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface IStringDistance Methods | Improve this Doc View Source GetDistance(String, String) Returns a float between 0 and 1 based on how similar the specified strings are to one another. Returning a value of 1 means the specified strings are identical and 0 means the string are maximally different. Declaration float GetDistance(string s1, string s2) Parameters Type Name Description System.String s1 The first string. System.String s2 The second string. Returns Type Description System.Single a float between 0 and 1 based on how similar the specified strings are to one another."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.IDictionary.html",
    "title": "Interface IDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDictionary A simple interface representing a Dictionary. A Dictionary here is a list of entries, where every entry consists of term, weight and payload. Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public interface IDictionary Methods | Improve this Doc View Source GetEntryIterator() Returns an iterator over all the entries Declaration IInputIterator GetEntryIterator() Returns Type Description IInputIterator Iterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.html",
    "title": "Class DirectSpellChecker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectSpellChecker Simple automaton-based spellchecker. Candidates are presented directly from the term dictionary, based on Levenshtein distance. This is an alternative to SpellChecker if you are using an edit-distance-like metric such as Levenshtein or JaroWinklerDistance . A practical benefit of this spellchecker is that it requires no additional datastructures (neither in RAM nor on disk) to do its work. Inheritance System.Object DirectSpellChecker Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class DirectSpellChecker Constructors | Improve this Doc View Source DirectSpellChecker() Creates a DirectSpellChecker with default configuration values Declaration public DirectSpellChecker() Fields | Improve this Doc View Source INTERNAL_LEVENSHTEIN The default StringDistance, Damerau-Levenshtein distance implemented internally via LevenshteinAutomata . Note: this is the fastest distance metric, because Damerau-Levenshtein is used to draw candidates from the term dictionary: this just re-uses the scoring. Declaration public static readonly IStringDistance INTERNAL_LEVENSHTEIN Field Value Type Description IStringDistance Properties | Improve this Doc View Source Accuracy Gets or sets the minimal accuracy required (default: 0.5f) from a StringDistance for a suggestion match. Declaration public virtual float Accuracy { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Comparer Gets or sets the comparer for sorting suggestions. The default is DEFAULT_COMPARER Declaration public virtual IComparer<SuggestWord> Comparer { get; set; } Property Value Type Description System.Collections.Generic.IComparer < SuggestWord > | Improve this Doc View Source Distance Gets or sets the string distance metric. The default is INTERNAL_LEVENSHTEIN . Note: because this spellchecker draws its candidates from the term dictionary using Damerau-Levenshtein, it works best with an edit-distance-like string metric. If you use a different metric than the default, you might want to consider increasing MaxInspections to draw more candidates for your metric to rank. Declaration public virtual IStringDistance Distance { get; set; } Property Value Type Description IStringDistance | Improve this Doc View Source LowerCaseTerms True if the spellchecker should lowercase terms (default: true) This is a convenience method, if your index field has more complicated analysis (such as StandardTokenizer removing punctuation), its probably better to turn this off, and instead run your query terms through your Analyzer first. If this option is not on, case differences count as an edit! Declaration public virtual bool LowerCaseTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerCaseTermsCulture Gets or sets the culture to use for lowercasing terms. Set to null (the default) to use System.Globalization.CultureInfo.CurrentCulture . Declaration public virtual CultureInfo LowerCaseTermsCulture { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source MaxEdits Gets or sets the maximum number of Levenshtein edit-distances to draw candidate terms from.This value can be 1 or 2. The default is 2. Note: a large number of spelling errors occur with an edit distance of 1, by setting this value to 1 you can increase both performance and precision at the cost of recall. Declaration public virtual int MaxEdits { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxInspections Get the maximum number of top-N inspections per suggestion. Increasing this number can improve the accuracy of results, at the cost of performance. Declaration public virtual int MaxInspections { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxQueryFrequency Gets or sets the maximum threshold (default: 0.01f) of documents a query term can appear in order to provide suggestions. Very high-frequency terms are typically spelled correctly. Additionally, this can increase performance as it will do no work for the common case of correctly-spelled input terms. This can be specified as a relative percentage of documents such as 0.5f, or it can be specified as an absolute whole document frequency, such as 4f. Absolute document frequencies may not be fractional. Declaration public virtual float MaxQueryFrequency { get; set; } Property Value Type Description System.Single | Improve this Doc View Source MinPrefix Gets or sets the minimal number of characters that must match exactly. This can improve both performance and accuracy of results, as misspellings are commonly not the first character. Declaration public virtual int MinPrefix { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinQueryLength Gets or sets the minimum length of a query term (default: 4) needed to return suggestions. Very short query terms will often cause only bad suggestions with any distance metric. Declaration public virtual int MinQueryLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ThresholdFrequency Gets or sets the minimal threshold of documents a term must appear for a match. This can improve quality by only suggesting high-frequency terms. Note that very high values might decrease performance slightly, by forcing the spellchecker to draw more candidates from the term dictionary, but a practical value such as 1 can be very useful towards improving quality. This can be specified as a relative percentage of documents such as 0.5f, or it can be specified as an absolute whole document frequency, such as 4f. Absolute document frequencies may not be fractional. Declaration public virtual float ThresholdFrequency { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader) Calls SuggestSimilar(Term, Int32, IndexReader, SuggestMode) SuggestSimilar(term, numSug, ir, SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX) Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir) Parameters Type Name Description Term term System.Int32 numSug IndexReader ir Returns Type Description SuggestWord [] | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, SuggestMode) Calls SuggestSimilar(Term, Int32, IndexReader, SuggestMode, Single) SuggestSimilar(term, numSug, ir, suggestMode, this.accuracy) Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir, SuggestMode suggestMode) Parameters Type Name Description Term term System.Int32 numSug IndexReader ir SuggestMode suggestMode Returns Type Description SuggestWord [] | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, SuggestMode, Single) Suggest similar words. Unlike SpellChecker , the similarity used to fetch the most relevant terms is an edit distance, therefore typically a low value for numSug will work very well. Declaration public virtual SuggestWord[] SuggestSimilar(Term term, int numSug, IndexReader ir, SuggestMode suggestMode, float accuracy) Parameters Type Name Description Term term Term you want to spell check on System.Int32 numSug the maximum number of suggested words IndexReader ir IndexReader to find terms from SuggestMode suggestMode specifies when to return suggested words System.Single accuracy return only suggested words that match with this similarity Returns Type Description SuggestWord [] sorted list of the suggested words according to the comparer Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source SuggestSimilar(Term, Int32, IndexReader, Int32, Int32, Single, CharsRef) Provide spelling corrections based on several parameters. Declaration protected virtual IEnumerable<DirectSpellChecker.ScoreTerm> SuggestSimilar(Term term, int numSug, IndexReader ir, int docfreq, int editDistance, float accuracy, CharsRef spare) Parameters Type Name Description Term term The term to suggest spelling corrections for System.Int32 numSug The maximum number of spelling corrections IndexReader ir The index reader to fetch the candidate spelling corrections from System.Int32 docfreq The minimum document frequency a potential suggestion need to have in order to be included System.Int32 editDistance The maximum edit distance candidates are allowed to have System.Single accuracy The minimum accuracy a suggested spelling correction needs to have in order to be included CharsRef spare a chars scratch Returns Type Description System.Collections.Generic.IEnumerable < DirectSpellChecker.ScoreTerm > a collection of spelling corrections sorted by ScoreTerm 's natural order. Exceptions Type Condition System.IO.IOException If I/O related errors occur See Also LevenshteinAutomata FuzzyTermsEnum"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.CombineSuggestion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.CombineSuggestion.html",
    "title": "Class CombineSuggestion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CombineSuggestion A suggestion generated by combining one or more original query terms Inheritance System.Object CombineSuggestion Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class CombineSuggestion Constructors | Improve this Doc View Source CombineSuggestion(SuggestWord, Int32[]) Creates a new CombineSuggestion from a suggestion and an array of term ids (referencing the indexes to the original terms that form this combined suggestion) Declaration public CombineSuggestion(SuggestWord suggestion, int[] originalTermIndexes) Parameters Type Name Description SuggestWord suggestion System.Int32 [] originalTermIndexes Properties | Improve this Doc View Source OriginalTermIndexes The indexes from the passed-in array of terms used to make this word combination Declaration public int[] OriginalTermIndexes { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Suggestion The word combination suggestion Declaration public SuggestWord Suggestion { get; } Property Value Type Description SuggestWord"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.html",
    "title": "Namespace Lucene.Net.Spatial | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The Spatial Module for Apache Lucene The spatial module is new to Lucene 4, replacing the old \"contrib\" module that came before it. The principle interface to the module is a SpatialStrategy which encapsulates an approach to indexing and searching based on shapes. Different Strategies have different features and performance profiles, which are documented at each Strategy implementation class level. For some sample code showing how to use the API, see SpatialExample.java in the tests. The spatial module uses Spatial4j heavily. Spatial4j is an ASL licensed library with these capabilities: * Provides shape implementations, namely point, rectangle, and circle. Both geospatial contexts and plain 2D Euclidean/Cartesian contexts are supported. With an additional dependency, it adds polygon and other geometry shape support via integration with JTS Topology Suite . This includes dateline wrap support. * Shape parsing and serialization, including Well-Known Text (WKT) (via JTS). * Distance and other spatial related math calculations. Historical note: The new spatial module was once known as Lucene Spatial Playground (LSP) as an external project. In ~March 2012, LSP split into this new module as part of Lucene and Spatial4j externally. A large chunk of the LSP implementation originated as SOLR-2155 which uses trie/prefix-tree algorithms with a geohash encoding. That approach is implemented in RecursivePrefixTreeStrategy today. Classes DisjointSpatialFilter A Spatial Filter implementing IsDisjointTo in terms of a SpatialStrategy 's support for Intersects . A document is considered disjoint if it has spatial data that does not intersect with the query shape. Another way of looking at this is that it's a way to invert a query shape. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialStrategy The SpatialStrategy encapsulates an approach to indexing and searching based on shapes. Different implementations will support different features. A strategy should document these common elements: Can it index more than one shape per field? What types of shapes can be indexed? What types of query shapes can be used? What types of query operations are supported? This might vary per shape. Does it use the FieldCache , or some other type of cache? When? If a strategy only supports certain shapes at index or query time, then in general it will throw an exception if given an incompatible one. It will not be coerced into compatibility. Note that a SpatialStrategy is not involved with the Lucene stored field values of shapes, which is immaterial to indexing and search. Thread-safe. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.html",
    "title": "Namespace Lucene.Net.Spatial.Vector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Vector Classes DistanceValueSource An implementation of the Lucene ValueSource model that returns the distance for a PointVectorStrategy . This is a Lucene.NET INTERNAL API, use at your own risk PointVectorStrategy Simple SpatialStrategy which represents Points in two numeric DoubleField s. The Strategy's best feature is decent distance sort. Characteristics: Only indexes points; just one per field value. Can query by a rectangle or circle. Intersects and IsWithin is supported. Uses the FieldCache for MakeDistanceValueSource(IPoint) and for searching with a Circle. Implementation: This is a simple Strategy. Search works with NumericRangeQuery s on an x & y pair of fields. A Circle query does the same bbox query but adds a ValueSource filter on MakeDistanceValueSource(IPoint) . One performance shortcoming with this strategy is that a scenario involving both a search using a Circle and sort will result in calculations for the spatial distance being done twice -- once for the filter and second for the sort. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.html",
    "title": "Namespace Lucene.Net.Spatial.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Util Classes CachingDoubleValueSource Caches the doubleVal of another value source in a HashMap so that it is computed only once. This is a Lucene.NET INTERNAL API, use at your own risk DistanceToShapeValueSource The distance from a provided Point to a Point retrieved from a ValueSource via ObjectVal(Int32) . The distance is calculated via a Spatial4n.Core.Distance.IDistanceCalculator . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ShapeFieldCache<T> Bounded Cache of Shapes associated with docIds. Note, multiple Shapes can be associated with a given docId WARNING: This class holds the data in an extremely inefficient manner as all Points are in memory as objects and they are stored in many Lists (one per document). So it works but doesn't scale. It will be replaced in the future. This is a Lucene.NET INTERNAL API, use at your own risk ShapeFieldCacheDistanceValueSource An implementation of the Lucene ValueSource that returns the spatial distance between an input point and a document's points in ShapeFieldCacheProvider<T> . The shortest distance is returned if a document has more than one point. This is a Lucene.NET INTERNAL API, use at your own risk ShapeFieldCacheProvider<T> Provides access to a ShapeFieldCache<T> for a given AtomicReader . If a Cache does not exist for the TextReader, then it is built by iterating over the all terms for a given field, reconstructing the Shape from them, and adding them to the Cache. ShapePredicateValueSource A boolean ValueSource that compares a shape from a provided ValueSource with a given Spatial4n.Core.Shapes.IShape and sees if it matches a given SpatialOperation (the predicate). This is a Lucene.NET EXPERIMENTAL API, use at your own risk ValueSourceFilter Filter that matches all documents where a ValueSource is in between a range of min and max inclusive. This is a Lucene.NET INTERNAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.SpatialStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.SpatialStrategy.html",
    "title": "Class SpatialStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialStrategy The SpatialStrategy encapsulates an approach to indexing and searching based on shapes. Different implementations will support different features. A strategy should document these common elements: Can it index more than one shape per field? What types of shapes can be indexed? What types of query shapes can be used? What types of query operations are supported? This might vary per shape. Does it use the FieldCache , or some other type of cache? When? If a strategy only supports certain shapes at index or query time, then in general it will throw an exception if given an incompatible one. It will not be coerced into compatibility. Note that a SpatialStrategy is not involved with the Lucene stored field values of shapes, which is immaterial to indexing and search. Thread-safe. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy SerializedDVStrategy PointVectorStrategy Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialStrategy Constructors | Improve this Doc View Source SpatialStrategy(SpatialContext, String) Constructs the spatial strategy with its mandatory arguments. Declaration protected SpatialStrategy(SpatialContext ctx, string fieldName) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.String fieldName Fields | Improve this Doc View Source m_ctx Declaration protected readonly SpatialContext m_ctx Field Value Type Description Spatial4n.Core.Context.SpatialContext Properties | Improve this Doc View Source FieldName The name of the field or the prefix of them if there are multiple fields needed internally. Declaration public virtual string FieldName { get; } Property Value Type Description System.String Not null. | Improve this Doc View Source SpatialContext Declaration public virtual SpatialContext SpatialContext { get; } Property Value Type Description Spatial4n.Core.Context.SpatialContext Methods | Improve this Doc View Source CreateIndexableFields(IShape) Returns the IndexableField(s) from the shape that are to be added to the Document . These fields are expected to be marked as indexed and not stored. Note: If you want to store the shape as a string for retrieval in search results, you could add it like this: document.Add(new StoredField(fieldName, ctx.ToString(shape))); The particular string representation used doesn't matter to the Strategy since it doesn't use it. Declaration public abstract Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Field [] Not null nor will it have null elements. Exceptions Type Condition System.NotSupportedException if given a shape incompatible with the strategy | Improve this Doc View Source MakeDistanceValueSource(IPoint) See MakeDistanceValueSource(IPoint, Double) called with a multiplier of 1.0 (i.e. units of degrees). Declaration public virtual ValueSource MakeDistanceValueSource(IPoint queryPoint) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint Returns Type Description ValueSource | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Make a ValueSource returning the distance between the center of the indexed shape and queryPoint . If there are multiple indexed shapes then the closest one is chosen. The result is multiplied by multiplier , which conveniently is used to get the desired units. Declaration public abstract ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Returns Type Description ValueSource | Improve this Doc View Source MakeFilter(SpatialArgs) Make a Filter based principally on SpatialOperation and Spatial4n.Core.Shapes.IShape from the supplied args . If a subclasses implements MakeQuery(SpatialArgs) then this method could be simply: return new QueryWrapperFilter(MakeQuery(args).Query); Declaration public abstract Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Exceptions Type Condition System.NotSupportedException If the strategy does not support the shape in args . UnsupportedSpatialOperation If the strategy does not support the SpatialOperation in args . | Improve this Doc View Source MakeQuery(SpatialArgs) Make a Query based principally on SpatialOperation and Spatial4n.Core.Shapes.IShape from the supplied args . The default implementation is return new ConstantScoreQuery(MakeFilter(args)); Declaration public virtual ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Exceptions Type Condition System.NotSupportedException If the strategy does not support the shape in args . UnsupportedSpatialOperation If the strategy does not support the SpatialOperation in args . | Improve this Doc View Source MakeRecipDistanceValueSource(IShape) Returns a ValueSource with values ranging from 1 to 0, depending inversely on the distance from MakeDistanceValueSource(IPoint) . The formula is c / (d + c) where 'd' is the distance and 'c' is one tenth the distance to the farthest edge from the center. Thus the scores will be 1 for indexed points at the center of the query shape and as low as ~0.1 at its furthest edges. Declaration public ValueSource MakeRecipDistanceValueSource(IShape queryShape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape Returns Type Description ValueSource | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.html",
    "title": "Namespace Lucene.Net.Spatial.Serialized | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Serialized Classes SerializedDVStrategy A SpatialStrategy based on serializing a Shape stored into BinaryDocValues. This is not at all fast; it's designed to be used in conjuction with another index based SpatialStrategy that is approximated(like RecursivePrefixTreeStrategy ) to add precision or eventually make more specific / advanced calculations on the per-document geometry. The serialization uses Spatial4j's Spatial4n.Core.IO.BinaryCodec . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.html",
    "title": "Namespace Lucene.Net.Spatial.Queries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Queries Classes SpatialArgs Principally holds the query Spatial4n.Core.Shapes.IShape and the SpatialOperation . It's used as an argument to some methods on SpatialStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialArgsParser Parses a string that usually looks like \"OPERATION(SHAPE)\" into a SpatialArgs object. The set of operations supported are defined in SpatialOperation , such as \"Intersects\" being a common one. The shape portion is defined by WKT Spatial4n.Core.IO.WktShapeParser , but it can be overridden/customized via ParseShape(String, SpatialContext) . There are some optional name-value pair parameters that follow the closing parenthesis. Example: Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025 In the future it would be good to support something at least semi-standardized like a variant of [E]CQL . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SpatialOperation A clause that compares a stored geometry to a supplied geometry. For more explanation of each operation, consider looking at the source implementation of Evaluate(IShape, IShape) . See ESRIs docs on spatial relations This is a Lucene.NET EXPERIMENTAL API, use at your own risk UnsupportedSpatialOperation Exception thrown when the SpatialStrategy cannot implement the requested operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialOperation.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialOperation.html",
    "title": "Class SpatialOperation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialOperation A clause that compares a stored geometry to a supplied geometry. For more explanation of each operation, consider looking at the source implementation of Evaluate(IShape, IShape) . See ESRIs docs on spatial relations This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialOperation Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public abstract class SpatialOperation Constructors | Improve this Doc View Source SpatialOperation(String, Boolean, Boolean, Boolean) Declaration protected SpatialOperation(string name, bool scoreIsMeaningful, bool sourceNeedsArea, bool targetNeedsArea) Parameters Type Name Description System.String name System.Boolean scoreIsMeaningful System.Boolean sourceNeedsArea System.Boolean targetNeedsArea Fields | Improve this Doc View Source BBoxIntersects Bounding box of the indexed shape. Declaration public static readonly SpatialOperation BBoxIntersects Field Value Type Description SpatialOperation | Improve this Doc View Source BBoxWithin Bounding box of the indexed shape. Declaration public static readonly SpatialOperation BBoxWithin Field Value Type Description SpatialOperation | Improve this Doc View Source Contains Declaration public static readonly SpatialOperation Contains Field Value Type Description SpatialOperation | Improve this Doc View Source Intersects Declaration public static readonly SpatialOperation Intersects Field Value Type Description SpatialOperation | Improve this Doc View Source IsDisjointTo Declaration public static readonly SpatialOperation IsDisjointTo Field Value Type Description SpatialOperation | Improve this Doc View Source IsEqualTo Declaration public static readonly SpatialOperation IsEqualTo Field Value Type Description SpatialOperation | Improve this Doc View Source IsWithin Declaration public static readonly SpatialOperation IsWithin Field Value Type Description SpatialOperation | Improve this Doc View Source Overlaps Declaration public static readonly SpatialOperation Overlaps Field Value Type Description SpatialOperation Properties | Improve this Doc View Source IsScoreMeaningful Declaration public virtual bool IsScoreMeaningful { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsTargetNeedsArea Declaration public virtual bool IsTargetNeedsArea { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source SourceNeedsArea Declaration public virtual bool SourceNeedsArea { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Values Declaration public static IList<SpatialOperation> Values { get; } Property Value Type Description System.Collections.Generic.IList < SpatialOperation > Methods | Improve this Doc View Source Evaluate(IShape, IShape) Returns whether the relationship between indexedShape and queryShape is satisfied by this operation. Declaration public abstract bool Evaluate(IShape indexedShape, IShape queryShape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape indexedShape Spatial4n.Core.Shapes.IShape queryShape Returns Type Description System.Boolean | Improve this Doc View Source Get(String) Declaration public static SpatialOperation Get(string v) Parameters Type Name Description System.String v Returns Type Description SpatialOperation | Improve this Doc View Source Is(SpatialOperation, SpatialOperation[]) Declaration public static bool Is(SpatialOperation op, params SpatialOperation[] tst) Parameters Type Name Description SpatialOperation op SpatialOperation [] tst Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgsParser.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgsParser.html",
    "title": "Class SpatialArgsParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialArgsParser Parses a string that usually looks like \"OPERATION(SHAPE)\" into a SpatialArgs object. The set of operations supported are defined in SpatialOperation , such as \"Intersects\" being a common one. The shape portion is defined by WKT Spatial4n.Core.IO.WktShapeParser , but it can be overridden/customized via ParseShape(String, SpatialContext) . There are some optional name-value pair parameters that follow the closing parenthesis. Example: Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025 In the future it would be good to support something at least semi-standardized like a variant of [E]CQL . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialArgsParser Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class SpatialArgsParser Fields | Improve this Doc View Source DIST_ERR Declaration public const string DIST_ERR = \"distErr\" Field Value Type Description System.String | Improve this Doc View Source DIST_ERR_PCT Declaration public const string DIST_ERR_PCT = \"distErrPct\" Field Value Type Description System.String Methods | Improve this Doc View Source NewSpatialArgs(SpatialOperation, IShape) Declaration protected virtual SpatialArgs NewSpatialArgs(SpatialOperation op, IShape shape) Parameters Type Name Description SpatialOperation op Spatial4n.Core.Shapes.IShape shape Returns Type Description SpatialArgs | Improve this Doc View Source Parse(String, SpatialContext) Parses a string such as \"Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025\". Declaration public virtual SpatialArgs Parse(string v, SpatialContext ctx) Parameters Type Name Description System.String v The string to parse. Mandatory. Spatial4n.Core.Context.SpatialContext ctx The spatial context. Mandatory. Returns Type Description SpatialArgs Not null. Exceptions Type Condition System.ArgumentException if the parameters don't make sense or an add-on parameter is unknown Spatial4n.Core.Exceptions.ParseException If there is a problem parsing the string Spatial4n.Core.Exceptions.InvalidShapeException When the coordinates are invalid for the shape | Improve this Doc View Source ParseMap(String) Parses \"a=b c=d f\" (whitespace separated) into name-value pairs. If there is no '=' as in 'f' above then it's short for f=f. Declaration protected static IDictionary<string, string> ParseMap(string body) Parameters Type Name Description System.String body Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source ParseShape(String, SpatialContext) Declaration protected virtual IShape ParseShape(string str, SpatialContext ctx) Parameters Type Name Description System.String str Spatial4n.Core.Context.SpatialContext ctx Returns Type Description Spatial4n.Core.Shapes.IShape | Improve this Doc View Source ReadBool(String, Boolean) Declaration protected static bool ReadBool(string v, bool defaultValue) Parameters Type Name Description System.String v System.Boolean defaultValue Returns Type Description System.Boolean | Improve this Doc View Source ReadDouble(String) Declaration protected static double? ReadDouble(string v) Parameters Type Name Description System.String v Returns Type Description System.Nullable < System.Double > | Improve this Doc View Source ReadNameValuePairs(SpatialArgs, IDictionary<String, String>) Declaration protected virtual void ReadNameValuePairs(SpatialArgs args, IDictionary<string, string> nameValPairs) Parameters Type Name Description SpatialArgs args System.Collections.Generic.IDictionary < System.String , System.String > nameValPairs | Improve this Doc View Source WriteSpatialArgs(SpatialArgs) Writes a close approximation to the parsed input format. Declaration public static string WriteSpatialArgs(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description System.String"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgs.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.SpatialArgs.html",
    "title": "Class SpatialArgs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpatialArgs Principally holds the query Spatial4n.Core.Shapes.IShape and the SpatialOperation . It's used as an argument to some methods on SpatialStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialArgs Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class SpatialArgs Constructors | Improve this Doc View Source SpatialArgs(SpatialOperation, IShape) Declaration public SpatialArgs(SpatialOperation operation, IShape shape) Parameters Type Name Description SpatialOperation operation Spatial4n.Core.Shapes.IShape shape Fields | Improve this Doc View Source DEFAULT_DISTERRPCT Declaration public static readonly double DEFAULT_DISTERRPCT Field Value Type Description System.Double Properties | Improve this Doc View Source DistErr The acceptable error of the shape. This effectively inflates the size of the shape but should not shrink it. Declaration public virtual double? DistErr { get; set; } Property Value Type Description System.Nullable < System.Double > = 0 | Improve this Doc View Source DistErrPct A measure of acceptable error of the shape as a fraction. This effectively inflates the size of the shape but should not shrink it. Declaration public virtual double? DistErrPct { get; set; } Property Value Type Description System.Nullable < System.Double > 0 to 0.5 | Improve this Doc View Source Operation Declaration public virtual SpatialOperation Operation { get; set; } Property Value Type Description SpatialOperation | Improve this Doc View Source Shape Declaration public virtual IShape Shape { get; set; } Property Value Type Description Spatial4n.Core.Shapes.IShape Methods | Improve this Doc View Source CalcDistanceFromErrPct(IShape, Double, SpatialContext) Computes the distance given a shape and the distErrPct . The algorithm is the fraction of the distance from the center of the query shape to its furthest bounding box corner. Declaration public static double CalcDistanceFromErrPct(IShape shape, double distErrPct, SpatialContext ctx) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Mandatory. System.Double distErrPct 0 to 0.5 Spatial4n.Core.Context.SpatialContext ctx Mandatory Returns Type Description System.Double A distance (in degrees). | Improve this Doc View Source ResolveDistErr(SpatialContext, Double) Gets the error distance that specifies how precise the query shape is. This looks at DistErr , DistErrPct , and defaultDistErrPct . Declaration public virtual double ResolveDistErr(SpatialContext ctx, double defaultDistErrPct) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.Double defaultDistErrPct 0 to 0.5 Returns Type Description System.Double = 0 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Validate() Check if the arguments make sense -- throw an exception if not Declaration public virtual void Validate()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.DateFormat.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.DateFormat.html",
    "title": "Enum DateFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DateFormat LUCENENET specific enum for mimicking the Java DateFormat Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public enum DateFormat Fields Name Description FULL LONG MEDIUM SHORT"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.ConfigurationKeys.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.ConfigurationKeys.html",
    "title": "Class ConfigurationKeys | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConfigurationKeys Class holding keys for StandardQueryNodeProcessorPipeline options. Inheritance System.Object ConfigurationKeys Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class ConfigurationKeys Fields | Improve this Doc View Source ALLOW_LEADING_WILDCARD Key used to set whether leading wildcards are supported Declaration public static readonly ConfigurationKey<bool?> ALLOW_LEADING_WILDCARD Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also AllowLeadingWildcard | Improve this Doc View Source ANALYZER Key used to set the Analyzer used for terms found in the query Declaration public static readonly ConfigurationKey<Analyzer> ANALYZER Field Value Type Description ConfigurationKey < Analyzer > See Also Analyzer | Improve this Doc View Source BOOST Key used to set the boost value in FieldConfig objects. Declaration public static readonly ConfigurationKey<float?> BOOST Field Value Type Description ConfigurationKey < System.Nullable < System.Single >> See Also FieldsBoost | Improve this Doc View Source DATE_RESOLUTION Key used to set default DateTools.Resolution . Declaration public static readonly ConfigurationKey<DateTools.Resolution> DATE_RESOLUTION Field Value Type Description ConfigurationKey < DateTools.Resolution > See Also SetDateResolution ( DateTools.Resolution ) DateResolution | Improve this Doc View Source DEFAULT_OPERATOR Key used to set the default boolean operator Declaration public static readonly ConfigurationKey<StandardQueryConfigHandler.Operator> DEFAULT_OPERATOR Field Value Type Description ConfigurationKey < StandardQueryConfigHandler.Operator > See Also DefaultOperator | Improve this Doc View Source ENABLE_POSITION_INCREMENTS Key used to set whether position increments is enabled Declaration public static readonly ConfigurationKey<bool?> ENABLE_POSITION_INCREMENTS Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also EnablePositionIncrements | Improve this Doc View Source FIELD_BOOST_MAP Key used to set a field to boost map that is used to set the boost for each field Declaration public static readonly ConfigurationKey<IDictionary<string, float?>> FIELD_BOOST_MAP Field Value Type Description ConfigurationKey < System.Collections.Generic.IDictionary < System.String , System.Nullable < System.Single >>> See Also FieldsBoost | Improve this Doc View Source FIELD_DATE_RESOLUTION_MAP Key used to set a field to DateTools.Resolution map that is used to normalize each date field value. Declaration public static readonly ConfigurationKey<IDictionary<string, DateTools.Resolution?>> FIELD_DATE_RESOLUTION_MAP Field Value Type Description ConfigurationKey < System.Collections.Generic.IDictionary < System.String , System.Nullable < DateTools.Resolution >>> See Also DateResolutionMap | Improve this Doc View Source FUZZY_CONFIG Key used to set the FuzzyConfig used to create fuzzy queries. Declaration public static readonly ConfigurationKey<FuzzyConfig> FUZZY_CONFIG Field Value Type Description ConfigurationKey < FuzzyConfig > See Also FuzzyMinSim FuzzyPrefixLength | Improve this Doc View Source LOCALE Key used to set the System.Globalization.CultureInfo used when parsing the query Declaration public static readonly ConfigurationKey<CultureInfo> LOCALE Field Value Type Description ConfigurationKey < System.Globalization.CultureInfo > See Also Locale | Improve this Doc View Source LOWERCASE_EXPANDED_TERMS Key used to set whether expanded terms should be lower-cased Declaration public static readonly ConfigurationKey<bool?> LOWERCASE_EXPANDED_TERMS Field Value Type Description ConfigurationKey < System.Nullable < System.Boolean >> See Also LowercaseExpandedTerms | Improve this Doc View Source MULTI_FIELDS Key used to set the fields a query should be expanded to when the field is null Declaration public static readonly ConfigurationKey<string[]> MULTI_FIELDS Field Value Type Description ConfigurationKey < System.String []> See Also SetMultiFields ( System.String []) GetMultiFields () | Improve this Doc View Source MULTI_TERM_REWRITE_METHOD Key used to set the MultiTermQuery.RewriteMethod used when creating queries Declaration public static readonly ConfigurationKey<MultiTermQuery.RewriteMethod> MULTI_TERM_REWRITE_METHOD Field Value Type Description ConfigurationKey < MultiTermQuery.RewriteMethod > See Also MultiTermRewriteMethod | Improve this Doc View Source NUMERIC_CONFIG Key used to set a field to its NumericConfig . Declaration public static readonly ConfigurationKey<NumericConfig> NUMERIC_CONFIG Field Value Type Description ConfigurationKey < NumericConfig > See Also NumericConfigMap | Improve this Doc View Source NUMERIC_CONFIG_MAP Key used to set the NumericConfig in FieldConfig for numeric fields. Declaration public static readonly ConfigurationKey<IDictionary<string, NumericConfig>> NUMERIC_CONFIG_MAP Field Value Type Description ConfigurationKey < System.Collections.Generic.IDictionary < System.String , NumericConfig >> See Also NumericConfigMap | Improve this Doc View Source PHRASE_SLOP Key used to set the default phrase slop Declaration public static readonly ConfigurationKey<int?> PHRASE_SLOP Field Value Type Description ConfigurationKey < System.Nullable < System.Int32 >> See Also PhraseSlop | Improve this Doc View Source TIMEZONE Declaration public static readonly ConfigurationKey<TimeZoneInfo> TIMEZONE Field Value Type Description ConfigurationKey < System.TimeZoneInfo >"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Builders | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Builders Classes AnyQueryNodeBuilder Builds a BooleanQuery of SHOULD clauses, possibly with some minimum number to match. BooleanQueryNodeBuilder Builds a BooleanQuery object from a BooleanQueryNode object. Every children in the BooleanQueryNode object must be already tagged using QUERY_TREE_BUILDER_TAGID with a Query object. It takes in consideration if the children is a ModifierQueryNode to define the BooleanClause . BoostQueryNodeBuilder This builder basically reads the Query object set on the BoostQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the boost value defined in the BoostQueryNode . DummyQueryNodeBuilder This builder does nothing. Commonly used for IQueryNode objects that are built by its parent's builder. FieldQueryNodeBuilder Builds a TermQuery object from a FieldQueryNode object. FuzzyQueryNodeBuilder Builds a FuzzyQuery object from a FuzzyQueryNode object. GroupQueryNodeBuilder Builds no object, it only returns the Query object set on the GroupQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. MatchAllDocsQueryNodeBuilder Builds a MatchAllDocsQuery object from a MatchAllDocsQueryNode object. MatchNoDocsQueryNodeBuilder Builds an empty BooleanQuery object from a MatchNoDocsQueryNode object. ModifierQueryNodeBuilder Builds no object, it only returns the Query object set on the ModifierQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. MultiPhraseQueryNodeBuilder Builds a MultiPhraseQuery object from a MultiPhraseQueryNode object. NumericRangeQueryNodeBuilder Builds NumericRangeQuery s out of NumericRangeQueryNode s. PhraseQueryNodeBuilder Builds a PhraseQuery object from a TokenizedPhraseQueryNode object. PrefixWildcardQueryNodeBuilder Builds a PrefixQuery object from a PrefixWildcardQueryNode object. RegexpQueryNodeBuilder Builds a RegexpQuery object from a RegexpQueryNode object. SlopQueryNodeBuilder This builder basically reads the Query object set on the SlopQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the slop value defined in the SlopQueryNode . StandardBooleanQueryNodeBuilder This builder does the same as the BooleanQueryNodeBuilder , but this considers if the built BooleanQuery should have its coord disabled or not. StandardQueryTreeBuilder This query tree builder only defines the necessary map to build a Query tree object. It should be used to generate a Query tree object from a query node tree processed by a StandardQueryNodeProcessorPipeline . TermRangeQueryNodeBuilder Builds a TermRangeQuery object from a TermRangeQueryNode object. WildcardQueryNodeBuilder Builds a WildcardQuery object from a WildcardQueryNode object. Interfaces IStandardQueryBuilder This interface should be implemented by every class that wants to build Query objects from IQueryNode objects."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence Classes PrecedenceQueryParser This query parser works exactly as the standard query parser ( StandardQueryParser ), except that it respect the boolean precedence, so <a AND b OR c AND d> is parsed to <(+a +b) (+c +d)> instead of <+a +b +c +d>. EXPERT: This class extends StandardQueryParser , but uses PrecedenceQueryNodeProcessorPipeline instead of StandardQueryNodeProcessorPipeline to process the query tree."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence.Processors | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Precedence.Processors Classes BooleanModifiersQueryNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. It walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For any other BooleanQueryNode which is not an OrQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. PrecedenceQueryNodeProcessorPipeline This processor pipeline extends StandardQueryNodeProcessorPipeline and enables boolean precedence on it. EXPERT: the precedence is enabled by removing GroupQueryNodeProcessor from the StandardQueryNodeProcessorPipeline and appending BooleanModifiersQueryNodeProcessor to the pipeline."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Messages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Messages Classes Message Default implementation of Message interface. For Native Language Support (NLS), system of software internationalization. NLS MessageBundles classes extend this class, to implement a bundle. For Native Language Support (NLS), system of software internationalization. This interface is similar to the NLS class in eclipse.osgi.util.NLS class - initializeMessages() method resets the values of all static strings, should only be called by classes that extend from NLS (see TestMessages.java for reference) - performs validation of all message in a bundle, at class load time - performs per message validation at runtime - see NLSTest.java for usage reference MessageBundle classes may subclass this type. Interfaces IMessage Message Interface for a lazy loading. For Native Language Support (NLS), system of software internationalization. INLSException Interface that exceptions should implement to support lazy loading of messages. For Native Language Support (NLS), system of software internationalization. This Interface should be implemented by all exceptions that require translation"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.NLS.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.NLS.html",
    "title": "Class NLS | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NLS MessageBundles classes extend this class, to implement a bundle. For Native Language Support (NLS), system of software internationalization. This interface is similar to the NLS class in eclipse.osgi.util.NLS class - initializeMessages() method resets the values of all static strings, should only be called by classes that extend from NLS (see TestMessages.java for reference) - performs validation of all message in a bundle, at class load time - performs per message validation at runtime - see NLSTest.java for usage reference MessageBundle classes may subclass this type. Inheritance System.Object NLS QueryParserMessages Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public class NLS Constructors | Improve this Doc View Source NLS() Declaration protected NLS() Methods | Improve this Doc View Source GetLocalizedMessage(String) Declaration public static string GetLocalizedMessage(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, CultureInfo) Declaration public static string GetLocalizedMessage(string key, CultureInfo locale) Parameters Type Name Description System.String key System.Globalization.CultureInfo locale Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, CultureInfo, Object[]) Declaration public static string GetLocalizedMessage(string key, CultureInfo locale, params object[] args) Parameters Type Name Description System.String key System.Globalization.CultureInfo locale System.Object [] args Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(String, Object[]) Declaration public static string GetLocalizedMessage(string key, params object[] args) Parameters Type Name Description System.String key System.Object [] args Returns Type Description System.String | Improve this Doc View Source GetResourceManagerFactory() Gets the static IResourceManagerFactory instance responsible for creating System.Resources.ResourceManager instances in this class. LUCENENET specific. Declaration public static IResourceManagerFactory GetResourceManagerFactory() Returns Type Description IResourceManagerFactory | Improve this Doc View Source InitializeMessages(String, Type) Initialize a given class with the message bundle Keys Should be called from a class that extends NLS in a static block at class load time. Declaration protected static void InitializeMessages(string bundleName, Type clazz) Parameters Type Name Description System.String bundleName Property file with that contains the message bundle System.Type clazz where constants will reside | Improve this Doc View Source SetResourceManagerFactory(IResourceManagerFactory) Sets the IResourceManagerFactory used to create instances of System.Resources.ResourceManager for retrieving localized resources. Defaults to BundleResourceManagerFactory if not set. LUCENENET specific. Declaration public static void SetResourceManagerFactory(IResourceManagerFactory resourceManagerFactory) Parameters Type Name Description IResourceManagerFactory resourceManagerFactory The IResourceManagerFactory instance. Cannot be null ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Util Classes CharArrayIterator A CharacterIterator used internally for use with ICU4N.Text.BreakIterator This is a Lucene.NET INTERNAL API, use at your own risk SegmentingTokenizerBase Breaks text into sentences with a ICU4N.Text.BreakIterator and allows subclasses to decompose these sentences into words. This can be used by subclasses that need sentence context for tokenization purposes, such as CJK segmenters. Additionally it can be used by subclasses that want to mark sentence boundaries (with a custom attribute, extra token, position increment, etc) for downstream processing. @lucene.experimental"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.html",
    "title": "Namespace Lucene.Net.Analysis.Th | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Th Classes ThaiAnalyzer Analyzer for Thai language. It uses ICU4N.Text.BreakIterator to break words. You must specify the required LuceneVersion compatibility when creating ThaiAnalyzer : As of 3.6, a set of Thai stopwords is used by default ThaiTokenizer Tokenizer that use ICU4N.Text.BreakIterator to tokenize Thai text. ThaiTokenizerFactory Factory for ThaiTokenizer . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ThaiTokenizerFactory\"/> </analyzer> </fieldType> ThaiWordFilter TokenFilter that use ICU4N.Text.BreakIterator to break each Token that is Thai into separate Token(s) for each Thai word. Please note: Since matchVersion 3.1 on, this filter no longer lowercases non-thai text. ThaiAnalyzer will insert a LowerCaseFilter before this filter so the behaviour of the Analyzer does not change. With version 3.1, the filter handles position increments correctly. ThaiWordFilterFactory Factory for ThaiWordFilter . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ThaiWordFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Icu.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu.TokenAttributes Classes ScriptAttribute Implementation of IScriptAttribute that stores the script as an integer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IScriptAttribute This attribute stores the UTR #24 script value for a token of text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.html",
    "title": "Namespace Lucene.Net.Analysis.Icu.Segmentation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu.Segmentation Classes DefaultICUTokenizerConfig Default ICUTokenizerConfig that is generally applicable to many languages. ICUTokenizer Breaks text into words according to UAX #29: Unicode Text Segmentation ( http://www.unicode.org/reports/tr29/ ) Words are broken across script boundaries, then segmented according to the BreakIterator and typing provided by the ICUTokenizerConfig This is a Lucene.NET EXPERIMENTAL API, use at your own risk ICUTokenizerConfig Class that allows for tailored Unicode Text Segmentation on a per-writing system basis. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ICUTokenizerFactory Factory for ICUTokenizer . Words are broken across script boundaries, then segmented according to the ICU4N.Text.BreakIterator and typing provided by the DefaultICUTokenizerConfig ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerConfig.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerConfig.html",
    "title": "Class ICUTokenizerConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTokenizerConfig Class that allows for tailored Unicode Text Segmentation on a per-writing system basis. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ICUTokenizerConfig DefaultICUTokenizerConfig Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public abstract class ICUTokenizerConfig Constructors | Improve this Doc View Source ICUTokenizerConfig() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public ICUTokenizerConfig() Properties | Improve this Doc View Source CombineCJ true if Han, Hiragana, and Katakana scripts should all be returned as Japanese Declaration public abstract bool CombineCJ { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetBreakIterator(Int32) Return a breakiterator capable of processing a given script. Declaration public abstract BreakIterator GetBreakIterator(int script) Parameters Type Name Description System.Int32 script Returns Type Description ICU4N.Text.BreakIterator | Improve this Doc View Source GetType(Int32, RuleStatus) Return a token type value for a given script and BreakIterator rule status. Declaration public abstract string GetType(int script, RuleStatus ruleStatus) Parameters Type Name Description System.Int32 script ICU4N.Text.RuleStatus ruleStatus Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.html",
    "title": "Namespace Lucene.Net.Search.VectorHighlight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.VectorHighlight Classes BaseFragListBuilder A abstract implementation of IFragListBuilder . BaseFragmentsBuilder Base IFragmentsBuilder implementation that supports colored pre/post tags and multivalued fields. Uses IBoundaryScanner to determine fragments. FastVectorHighlighter Another highlighter implementation. FieldFragList FieldFragList has a list of \"frag info\" that is used by IFragmentsBuilder class to create fragments (snippets). FieldFragList.WeightedFragInfo List of term offsets + weight for a frag info FieldFragList.WeightedFragInfo.SubInfo Represents the list of term offsets for some text FieldPhraseList FieldPhraseList has a list of WeightedPhraseInfo that is used by FragListBuilder to create a FieldFragList object. FieldPhraseList.WeightedPhraseInfo Represents the list of term offsets and boost for some text FieldPhraseList.WeightedPhraseInfo.Toffs Term offsets (start + end) FieldQuery FieldQuery breaks down query object into terms/phrases and keeps them in a FieldQuery.QueryPhraseMap structure. FieldQuery.QueryPhraseMap Internal structure of a query for highlighting: represents a nested query structure FieldTermStack FieldTermStack is a stack that keeps query terms in the specified field of the document to be highlighted. FieldTermStack.TermInfo Single term with its position/offsets in the document and IDF weight. It is System.IComparable<T> but considers only position. ScoreOrderFragmentsBuilder An implementation of FragmentsBuilder that outputs score-order fragments. ScoreOrderFragmentsBuilder.ScoreComparer System.Collections.Generic.IComparer<T> for FieldFragList.WeightedFragInfo by boost, breaking ties by offset. SimpleBoundaryScanner Simple boundary scanner implementation that divides fragments based on a set of separator characters. SimpleFieldFragList A simple implementation of FieldFragList . SimpleFragListBuilder A simple implementation of IFragListBuilder . SimpleFragmentsBuilder A simple implementation of FragmentsBuilder. SingleFragListBuilder An implementation class of IFragListBuilder that generates one FieldFragList.WeightedFragInfo object. Typical use case of this class is that you can get an entire field contents by using both of this class and SimpleFragmentsBuilder . FastVectorHighlighter h = new FastVectorHighlighter( true, true, new SingleFragListBuilder(), new SimpleFragmentsBuilder() ); WeightedFieldFragList A weighted implementation of FieldFragList . WeightedFragListBuilder A weighted implementation of IFragListBuilder . Interfaces IBoundaryScanner Finds fragment boundaries: pluggable into BaseFragmentsBuilder IFragListBuilder IFragListBuilder is an interface for FieldFragList builder classes. A IFragListBuilder class can be plugged in to Highlighter . IFragmentsBuilder IFragmentsBuilder is an interface for fragments (snippets) builder classes. A IFragmentsBuilder class can be plugged in to FastVectorHighlighter ."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.html",
    "title": "Class AbstractDistinctValuesCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector LUCENENET specific class used to nest the AbstractDistinctValuesCollector.GroupCount<TGroupValue> class so it has similar syntax to that in Java Lucene (AbstractDistinctValuesCollector.GroupCount{TGroupValue} rather than AbstractDistinctValuesCollector{GC}.GroupCount{TGroupValue}). Inheritance System.Object AbstractDistinctValuesCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class AbstractDistinctValuesCollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.IGroupCount-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.IGroupCount-1.html",
    "title": "Interface AbstractDistinctValuesCollector.IGroupCount<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface AbstractDistinctValuesCollector.IGroupCount<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IGroupCount<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source UniqueValues Declaration IEnumerable<TGroupValue> UniqueValues { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector_GroupHead.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector_GroupHead.html",
    "title": "Class AbstractAllGroupHeadsCollector_GroupHead | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector_GroupHead Represents a group head. A group head is the most relevant document for a particular group. The relevancy is based is usually based on the sort. The group head contains a group value with its associated most relevant document id. Inheritance System.Object AbstractAllGroupHeadsCollector_GroupHead FunctionAllGroupHeadsCollector.GroupHead Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector_GroupHead Remarks LUCENENET: moved this class from being a nested class of AbstractAllGroupHeadsCollector<GH> , made it non-generic so the generic closing type doesn't need to be specified in classes that use AbstractAllGroupHeadsCollector_GroupHead as a generic closing type, and renamed it from GroupHead to AbstractAllGroupHeadsCollector_GroupHead to avoid naming conflicts with nested classes named GroupHead in derived classes of AbstractAllGroupHeadsCollector . Constructors | Improve this Doc View Source AbstractAllGroupHeadsCollector_GroupHead(Int32) Declaration protected AbstractAllGroupHeadsCollector_GroupHead(int doc) Parameters Type Name Description System.Int32 doc Properties | Improve this Doc View Source Doc Declaration public int Doc { get; protected set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Compare(Int32, Int32) Compares the specified document for a specified comparer against the current most relevant document. Declaration public abstract int Compare(int compIDX, int doc) Parameters Type Name Description System.Int32 compIDX The comparer index of the specified comparer. System.Int32 doc The specified document. Returns Type Description System.Int32 -1 if the specified document wasn't competitive against the current most relevant document, 1 if the specified document was competitive against the current most relevant document. Otherwise 0. Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source UpdateDocHead(Int32) Updates the current most relevant document with the specified document. Declaration public abstract void UpdateDocHead(int doc) Parameters Type Name Description System.Int32 doc The specified document Exceptions Type Condition System.IO.IOException If I/O related errors occur"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.TemporalResult.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.TemporalResult.html",
    "title": "Class AbstractAllGroupHeadsCollector<GH>.TemporalResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector<GH>.TemporalResult Contains the result of group head retrieval. To prevent new object creations of this class for every collect. Inheritance System.Object AbstractAllGroupHeadsCollector<GH>.TemporalResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax protected class TemporalResult Properties | Improve this Doc View Source GroupHead Declaration public GH GroupHead { get; set; } Property Value Type Description GH | Improve this Doc View Source Stop Declaration public bool Stop { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndSingleQueue.OrdAndValue.html",
    "title": "Class TopOrdAndSingleQueue.OrdAndValue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopOrdAndSingleQueue.OrdAndValue Holds a single entry. Inheritance System.Object TopOrdAndSingleQueue.OrdAndValue Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class OrdAndValue Constructors | Improve this Doc View Source OrdAndValue() Default constructor. Declaration public OrdAndValue() Properties | Improve this Doc View Source Ord Ordinal of the entry. Declaration public int Ord { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Value associated with the ordinal. Declaration public float Value { get; set; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.TopOrdAndInt32Queue.OrdAndValue.html",
    "title": "Class TopOrdAndInt32Queue.OrdAndValue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopOrdAndInt32Queue.OrdAndValue Holds a single entry. Inheritance System.Object TopOrdAndInt32Queue.OrdAndValue Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class OrdAndValue Constructors | Improve this Doc View Source OrdAndValue() Default constructor. Declaration public OrdAndValue() Properties | Improve this Doc View Source Ord Ordinal of the entry. Declaration public int Ord { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Value associated with the ordinal. Declaration public int Value { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.html",
    "title": "Namespace Lucene.Net.Codecs.Sep | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Sep Classes Int32IndexInput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: This was IntIndexInput in Lucene @lucene.experimental Int32IndexInput.Index Records a single skip-point in the GetReader() . Int32IndexInput.Reader Reads System.Int32 values. Int32IndexOutput Defines basic API for writing ints to an IndexOutput . IntBlockCodec interacts with this API. See IntBlockReader. NOTE: block sizes could be variable NOTE: This was IntIndexOutput in Lucene @lucene.experimental Int32IndexOutput.Index Records a single skip-point in the IndexOutput . Int32StreamFactory Provides System.Int32 reader and writer to specified files. NOTE: This was IntStreamFactory in Lucene @lucene.experimental SepPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SepPostingsWriter Writes frq to .frq, docs to .doc, pos to .pos, payloads to .pyl, skip data to .skp @lucene.experimental"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32StreamFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32StreamFactory.html",
    "title": "Class Int32StreamFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32StreamFactory Provides System.Int32 reader and writer to specified files. NOTE: This was IntStreamFactory in Lucene @lucene.experimental Inheritance System.Object Int32StreamFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Int32StreamFactory Methods | Improve this Doc View Source CreateOutput(Directory, String, IOContext) Create an Int32IndexOutput on the provided fileName. Declaration public abstract Int32IndexOutput CreateOutput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexOutput | Improve this Doc View Source OpenInput(Directory, String, IOContext) Create an Int32IndexInput on the provided fileName. Declaration public abstract Int32IndexInput OpenInput(Directory dir, string fileName, IOContext context) Parameters Type Name Description Directory dir System.String fileName IOContext context Returns Type Description Int32IndexInput"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.Index.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexOutput.Index.html",
    "title": "Class Int32IndexOutput.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexOutput.Index Records a single skip-point in the IndexOutput . Inheritance System.Object Int32IndexOutput.Index Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Index Methods | Improve this Doc View Source CopyFrom(Int32IndexOutput.Index, Boolean) Copies index from other . Declaration public abstract void CopyFrom(Int32IndexOutput.Index other, bool copyLast) Parameters Type Name Description Int32IndexOutput.Index other System.Boolean copyLast | Improve this Doc View Source Mark() Internally records the current location. Declaration public abstract void Mark() | Improve this Doc View Source Write(DataOutput, Boolean) Writes \"location\" of current output pointer of primary output to different output (out). Declaration public abstract void Write(DataOutput indexOut, bool absolute) Parameters Type Name Description DataOutput indexOut System.Boolean absolute"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Reader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Reader.html",
    "title": "Class Int32IndexInput.Reader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexInput.Reader Reads System.Int32 values. Inheritance System.Object Int32IndexInput.Reader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Reader Methods | Improve this Doc View Source Next() Reads next single System.Int32 . Declaration public abstract int Next() Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Index.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.Int32IndexInput.Index.html",
    "title": "Class Int32IndexInput.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32IndexInput.Index Records a single skip-point in the GetReader() . Inheritance System.Object Int32IndexInput.Index Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public abstract class Index Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyFrom(Int32IndexInput.Index) Declaration public abstract void CopyFrom(Int32IndexInput.Index other) Parameters Type Name Description Int32IndexInput.Index other | Improve this Doc View Source Read(DataInput, Boolean) Declaration public abstract void Read(DataInput indexIn, bool absolute) Parameters Type Name Description DataInput indexIn System.Boolean absolute | Improve this Doc View Source Seek(Int32IndexInput.Reader) Seeks primary stream to the last read offset. Declaration public abstract void Seek(Int32IndexInput.Reader stream) Parameters Type Name Description Int32IndexInput.Reader stream"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.html",
    "title": "Namespace Lucene.Net.Codecs.Pulsing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Pulsing Classes Pulsing41PostingsFormat Concrete pulsing implementation over Lucene41PostingsFormat . @lucene.experimental PulsingPostingsFormat This postings format \"inlines\" the postings for terms that have low docFreq. It wraps another postings format, which is used for writing the non-inlined terms. @lucene.experimental PulsingPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PulsingPostingsReader.PulsingEnumAttribute Implementation of PulsingPostingsReader.PulsingEnumAttribute for reuse of wrapped postings readers underneath pulsing. This is a Lucene.NET INTERNAL API, use at your own risk PulsingPostingsWriter Writer for the pulsing format. Wraps another postings implementation and decides (based on total number of occurrences), whether a terms postings should be inlined into the term dictionary, or passed through to the wrapped writer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces PulsingPostingsReader.IPulsingEnumAttribute A per-docsenum attribute that stores additional reuse information so that pulsing enums can keep a reference to their wrapped enums, and vice versa. this way we can always reuse. @lucene.internal"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Utility.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Utility.html",
    "title": "Class Utility | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Utility SmartChineseAnalyzer utility constants and methods This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Utility Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class Utility Fields | Improve this Doc View Source COMMON_DELIMITER Delimiters will be filtered to this character by SegTokenFilter Declaration public static readonly char[] COMMON_DELIMITER Field Value Type Description System.Char [] | Improve this Doc View Source END_CHAR_ARRAY Declaration public static readonly char[] END_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source MAX_FREQUENCE Maximum bigram frequency (used in the smoothing function). Declaration public static readonly int MAX_FREQUENCE Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER_CHAR_ARRAY Declaration public static readonly char[] NUMBER_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source SPACES Space-like characters that need to be skipped: such as space, tab, newline, carriage return. Declaration public static readonly string SPACES Field Value Type Description System.String | Improve this Doc View Source START_CHAR_ARRAY Declaration public static readonly char[] START_CHAR_ARRAY Field Value Type Description System.Char [] | Improve this Doc View Source STRING_CHAR_ARRAY Declaration public static readonly char[] STRING_CHAR_ARRAY Field Value Type Description System.Char [] Methods | Improve this Doc View Source CompareArray(Char[], Int32, Char[], Int32) Compare two arrays starting at the specified offsets. Declaration public static int CompareArray(char[] larray, int lstartIndex, char[] rarray, int rstartIndex) Parameters Type Name Description System.Char [] larray left array System.Int32 lstartIndex start offset into larray System.Char [] rarray right array System.Int32 rstartIndex start offset into rarray Returns Type Description System.Int32 0 if the arrays are equal，1 if larray > rarray , -1 if larray < rarray | Improve this Doc View Source CompareArrayByPrefix(Char[], Int32, Char[], Int32) Compare two arrays, starting at the specified offsets, but treating shortArray as a prefix to longArray . As long as shortArray is a prefix of longArray , return 0. Otherwise, behave as CompareArray(Char[], Int32, Char[], Int32) . Declaration public static int CompareArrayByPrefix(char[] shortArray, int shortIndex, char[] longArray, int longIndex) Parameters Type Name Description System.Char [] shortArray prefix array System.Int32 shortIndex offset into shortArray System.Char [] longArray long array (word) System.Int32 longIndex offset into longArray Returns Type Description System.Int32 0 if shortArray is a prefix of longArray , otherwise act as CompareArray(Char[], Int32, Char[], Int32) . | Improve this Doc View Source GetCharType(Char) Return the internal CharType constant of a given character. Declaration public static CharType GetCharType(char ch) Parameters Type Name Description System.Char ch input character Returns Type Description CharType Constant from CharType describing the character type. See Also CharType"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseWordTokenFilterFactory.html",
    "title": "Class SmartChineseWordTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SmartChineseWordTokenFilterFactory Factory for the SmartChineseAnalyzer WordTokenFilter Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SmartChineseWordTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax [Obsolete(\"Use HMMChineseTokenizerFactory instead\")] public class SmartChineseWordTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SmartChineseWordTokenFilterFactory(IDictionary<String, String>) Creates a new SmartChineseWordTokenFilterFactory Declaration public SmartChineseWordTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseSentenceTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseSentenceTokenizerFactory.html",
    "title": "Class SmartChineseSentenceTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SmartChineseSentenceTokenizerFactory Factory for the SmartChineseAnalyzer SentenceTokenizer This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenizerFactory SmartChineseSentenceTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax [Obsolete(\"Use HMMChineseTokenizerFactory instead\")] public class SmartChineseSentenceTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source SmartChineseSentenceTokenizerFactory(IDictionary<String, String>) Creates a new SmartChineseSentenceTokenizerFactory Declaration public SmartChineseSentenceTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SmartChineseAnalyzer.html",
    "title": "Class SmartChineseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SmartChineseAnalyzer SmartChineseAnalyzer is an analyzer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Segmentation is based upon the Hidden Markov Model . A large training corpus was used to calculate Chinese word frequency probability. This analyzer requires a dictionary to provide statistical data. SmartChineseAnalyzer has an included dictionary out-of-box. The included dictionary data is from ICTCLAS1.0 . Thanks to ICTCLAS for their hard work, and for contributing the data under the Apache 2 License! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Analyzer SmartChineseAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public sealed class SmartChineseAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion) Create a new SmartChineseAnalyzer , using the default stopword list. Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion, CharArraySet) Create a new SmartChineseAnalyzer , using the provided CharArraySet of stopwords. Note: the set should include punctuation, unless you want to index punctuation! Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopWords CharArraySet of stopwords to use. | Improve this Doc View Source SmartChineseAnalyzer(LuceneVersion, Boolean) Create a new SmartChineseAnalyzer , optionally using the default stopword list. The included default stopword list is simply a list of punctuation. If you do not use this list, punctuation will not be removed from the text! Declaration public SmartChineseAnalyzer(LuceneVersion matchVersion, bool useDefaultStopWords) Parameters Type Name Description LuceneVersion matchVersion System.Boolean useDefaultStopWords true to use the default stopword list. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetDefaultStopSet() Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet GetDefaultStopSet() Returns Type Description CharArraySet An unmodifiable instance of the default stop-words set. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SentenceTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.SentenceTokenizer.html",
    "title": "Class SentenceTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SentenceTokenizer Tokenizes input text into sentences. The output tokens can then be broken into words with WordTokenFilter This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer SentenceTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax [Obsolete(\"Use HMMChineseTokenizer instead\")] public sealed class SentenceTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source SentenceTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public SentenceTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader | Improve this Doc View Source SentenceTokenizer(TextReader) Declaration public SentenceTokenizer(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizerFactory.html",
    "title": "Class HMMChineseTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HMMChineseTokenizerFactory Factory for HMMChineseTokenizer Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenizerFactory HMMChineseTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public sealed class HMMChineseTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source HMMChineseTokenizerFactory(IDictionary<String, String>) Creates a new HMMChineseTokenizerFactory Declaration public HMMChineseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.HMMChineseTokenizer.html",
    "title": "Class HMMChineseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HMMChineseTokenizer Tokenizer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase HMMChineseTokenizer Implements System.IDisposable Inherited Members SegmentingTokenizerBase.BUFFERMAX SegmentingTokenizerBase.m_buffer SegmentingTokenizerBase.m_offset SegmentingTokenizerBase.IncrementToken() SegmentingTokenizerBase.End() SegmentingTokenizerBase.IsSafeEnd(Char) Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class HMMChineseTokenizer : SegmentingTokenizerBase, IDisposable Constructors | Improve this Doc View Source HMMChineseTokenizer(AttributeSource.AttributeFactory, TextReader) Creates a new HMMChineseTokenizer , supplying the AttributeSource.AttributeFactory Declaration public HMMChineseTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader | Improve this Doc View Source HMMChineseTokenizer(TextReader) Creates a new HMMChineseTokenizer Declaration public HMMChineseTokenizer(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Methods | Improve this Doc View Source IncrementWord() Declaration protected override bool IncrementWord() Returns Type Description System.Boolean Overrides SegmentingTokenizerBase.IncrementWord() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides SegmentingTokenizerBase.Reset() | Improve this Doc View Source SetNextSentence(Int32, Int32) Declaration protected override void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Overrides SegmentingTokenizerBase.SetNextSentence(Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.html",
    "title": "Namespace Lucene.Net.Analysis.Cn.Smart.Hhmm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn.Smart.Hhmm Classes HHMMSegmenter Finds the optimal segmentation of a sentence into Chinese words This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegToken SmartChineseAnalyzer internal token This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegTokenFilter Filters a SegToken by converting full-width latin to half-width, then lowercasing latin. Additionally, all punctuation is converted into COMMON_DELIMITER This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegTokenFilter.html",
    "title": "Class SegTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegTokenFilter Filters a SegToken by converting full-width latin to half-width, then lowercasing latin. Additionally, all punctuation is converted into COMMON_DELIMITER This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegTokenFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class SegTokenFilter Methods | Improve this Doc View Source Filter(SegToken) Filter an input SegToken Full-width latin will be converted to half-width, then all latin will be lowercased. All punctuation is converted into COMMON_DELIMITER Declaration public virtual SegToken Filter(SegToken token) Parameters Type Name Description SegToken token Input SegToken . Returns Type Description SegToken Normalized SegToken ."
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegToken.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.SegToken.html",
    "title": "Class SegToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegToken SmartChineseAnalyzer internal token This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegToken Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class SegToken Constructors | Improve this Doc View Source SegToken(Char[], Int32, Int32, WordType, Int32) Create a new SegToken from a character array. Declaration public SegToken(char[] idArray, int start, int end, WordType wordType, int weight) Parameters Type Name Description System.Char [] idArray character array containing text System.Int32 start start offset of SegToken in original sentence System.Int32 end end offset of SegToken in original sentence WordType wordType WordType of the text System.Int32 weight word frequency Properties | Improve this Doc View Source CharArray Character array containing token text Declaration public char[] CharArray { get; set; } Property Value Type Description System.Char [] | Improve this Doc View Source EndOffset end offset into original sentence Declaration public int EndOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Index during segmentation, this is used to store the index of the token in the token list table Declaration public int Index { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset start offset into original sentence Declaration public int StartOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Weight word frequency Declaration public int Weight { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source WordType WordType of the text Declaration public WordType WordType { get; set; } Property Value Type Description WordType Methods | Improve this Doc View Source Equals(Object) System.Object.Equals(System.Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() System.Object.GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode()"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.HHMMSegmenter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.Hhmm.HHMMSegmenter.html",
    "title": "Class HHMMSegmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HHMMSegmenter Finds the optimal segmentation of a sentence into Chinese words This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HHMMSegmenter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart.Hhmm Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class HHMMSegmenter Methods | Improve this Doc View Source Process(String) Return a list of SegToken representing the best segmentation of a sentence Declaration public virtual IList<SegToken> Process(string sentence) Parameters Type Name Description System.String sentence input sentence Returns Type Description System.Collections.Generic.IList < SegToken > best segmentation as a IList{SegToken}"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.CharType.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.CharType.html",
    "title": "Enum CharType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum CharType Internal SmartChineseAnalyzer character type constants. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public enum CharType Fields Name Description DELIMITER Punctuation Characters DIGIT Numeric Digits FULLWIDTH_DIGIT Full-Width alphanumeric characters FULLWIDTH_LETTER Full-Width letters HANZI Han Ideographs LETTER Letters OTHER Other (not fitting any of the other categories) SPACE_LIKE Characters that act as a space"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.AnalyzerProfile.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.AnalyzerProfile.html",
    "title": "Class AnalyzerProfile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzerProfile Manages analysis data configuration for SmartChineseAnalyzer SmartChineseAnalyzer has a built-in dictionary and stopword list out-of-box. NOTE: To use an alternate dicationary than the built-in one, put the \"bigramdict.dct\" and \"coredict.dct\" files in a subdirectory of your application named \"analysis-data\". This subdirectory can be placed in any directory up to and including the root directory (if the OS permission allows). To place the files in an alternate location, set an environment variable named \"analysis.data.dir\" with the name of the directory the \"bigramdict.dct\" and \"coredict.dct\" files can be located within. The default \"bigramdict.dct\" and \"coredict.dct\" files can be found at: https://issues.apache.org/jira/browse/LUCENE-1629 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AnalyzerProfile Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public class AnalyzerProfile Fields | Improve this Doc View Source ANALYSIS_DATA_DIR Global indicating the configured analysis data directory Declaration public static string ANALYSIS_DATA_DIR Field Value Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.html",
    "title": "Namespace Lucene.Net.Analysis.Ja | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Kuromoji is a morphological analyzer for Japanese text. This module provides support for Japanese text analysis, including features such as part-of-speech tagging, lemmatization, and compound word analysis. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. Classes GraphvizFormatter Outputs the dot (graphviz) string for the viterbi lattice. JapaneseAnalyzer Analyzer for Japanese that uses morphological analysis. JapaneseBaseFormFilter Replaces term text with the IBaseFormAttribute . This acts as a lemmatizer for verbs and adjectives. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . JapaneseBaseFormFilterFactory Factory for JapaneseBaseFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> JapaneseIterationMarkCharFilter Normalizes Japanese horizontal iteration marks (odoriji) to their expanded form. JapaneseIterationMarkCharFilterFactory Factory for JapaneseIterationMarkCharFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"false\"> <analyzer> <charFilter class=\"solr.JapaneseIterationMarkCharFilterFactory normalizeKanji=\"true\" normalizeKana=\"true\"/> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> </analyzer> </fieldType> JapaneseKatakanaStemFilter A TokenFilter that normalizes common katakana spelling variations ending in a long sound character by removing this character (U+30FC). Only katakana words longer than a minimum length are stemmed (default is four). JapaneseKatakanaStemFilterFactory Factory for JapaneseKatakanaStemFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseKatakanaStemFilterFactory\" minimumLength=\"4\"/> </analyzer> </fieldType> JapanesePartOfSpeechStopFilter Removes tokens that match a set of part-of-speech tags. JapanesePartOfSpeechStopFilterFactory Factory for JapanesePartOfSpeechStopFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapanesePartOfSpeechStopFilterFactory\" tags=\"stopTags.txt\" enablePositionIncrements=\"true\"/> </analyzer> </fieldType> JapaneseReadingFormFilter A TokenFilter that replaces the term attribute with the reading of a token in either katakana or romaji form. The default reading form is katakana. JapaneseReadingFormFilterFactory Factory for JapaneseReadingFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseReadingFormFilterFactory\" useRomaji=\"false\"/> </analyzer> </fieldType> JapaneseTokenizer Tokenizer for Japanese that uses morphological analysis. JapaneseTokenizerFactory Factory for JapaneseTokenizer . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\" mode=\"NORMAL\" userDictionary=\"user.txt\" userDictionaryEncoding=\"UTF-8\" discardPunctuation=\"true\" /> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Token Analyzed token with morphological data from its dictionary. Enums JapaneseTokenizerMode Tokenization mode: this determines how the tokenizer handles compound and unknown words. JapaneseTokenizerType Token type reflecting the original source of this token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.Util Classes BinaryDictionaryWriter CharacterDefinitionWriter ConnectionCostsBuilder ConnectionCostsWriter CSVUtil Utility class for parsing CSV text DictionaryBuilder TokenInfoDictionaryBuilder TokenInfoDictionaryWriter ToStringUtil Utility class for english translations of morphological data, used only for debugging. UnknownDictionaryBuilder UnknownDictionaryWriter Enums DictionaryBuilder.DictionaryFormat"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.html",
    "title": "Namespace Lucene.Net.Analysis.Synonym | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Synonym Classes SolrSynonymParser Parser for the Solr synonyms format. Blank lines and lines starting with '#' are comments. Explicit mappings match any token sequence on the LHS of \"=>\" and replace with all alternatives on the RHS. These types of mappings ignore the expand parameter in the constructor. Example: i-pod, i pod => ipod Equivalent synonyms may be separated with commas and give no explicit mapping. In this case the mapping behavior will be taken from the expand parameter in the constructor. This allows the same synonym file to be used in different synonym handling strategies. Example: ipod, i-pod, i pod Multiple synonym mapping entries are merged. Example: foo => foo bar foo => baz is equivalent to foo => foo bar, baz This is a Lucene.NET EXPERIMENTAL API, use at your own risk SynonymFilter Matches single or multi word synonyms in a token stream. This token stream cannot properly handle position increments != 1, ie, you should place this filter before filtering out stop words. Note that with the current implementation, parsing is greedy, so whenever multiple parses would apply, the rule starting the earliest and parsing the most tokens wins. For example if you have these rules: a -> x a b -> y b c d -> z Then input a b c d e parses to y b c d , ie the 2nd rule \"wins\" because it started earliest and matched the most input tokens of other rules starting at that point. A future improvement to this filter could allow non-greedy parsing, such that the 3rd rule would win, and also separately allow multiple parses, such that all 3 rules would match, perhaps even on a rule by rule basis. NOTE : when a match occurs, the output tokens associated with the matching rule are \"stacked\" on top of the input stream (if the rule had keepOrig=true ) and also on top of another matched rule's output tokens. This is not a correct solution, as really the output should be an arbitrary graph/lattice. For example, with the above match, you would expect an exact PhraseQuery \"y b c\" to match the parsed tokens, but it will fail to do so. This limitation is necessary because Lucene's TokenStream (and index) cannot yet represent an arbitrary graph. NOTE : If multiple incoming tokens arrive on the same position, only the first token at that position is used for parsing. Subsequent tokens simply pass through and are not parsed. A future improvement would be to allow these tokens to also be matched. SynonymFilterFactory Factory for SynonymFilter . <fieldType name=\"text_synonym\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" format=\"solr\" ignoreCase=\"false\" expand=\"true\" tokenizerFactory=\"solr.WhitespaceTokenizerFactory\" [optional tokenizer factory parameters]/> </analyzer> </fieldType> An optional param name prefix of \"tokenizerFactory.\" may be used for any init params that the SynonymFilterFactory needs to pass to the specified TokenizerFactory . If the TokenizerFactory expects an init parameters with the same name as an init param used by the SynonymFilterFactory , the prefix is mandatory. The optional format parameter controls how the synonyms will be parsed: It supports the short names of solr for SolrSynonymParser and wordnet for and WordnetSynonymParser , or your own SynonymMap.Parser class name. The default is solr . A custom SynonymMap.Parser is expected to have a constructor taking: System.Boolean dedup - true if duplicates should be ignored, false otherwise System.Boolean expand - true if conflation groups should be expanded, false if they are one-directional Analyzer analyzer - an analyzer used for each raw synonym SynonymMap A map of synonyms, keys and values are phrases. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SynonymMap.Builder Builds an FSTSynonymMap. Call Add(CharsRef, CharsRef, Boolean) until you have added all the mappings, then call Build() to get an FSTSynonymMap @lucene.experimental SynonymMap.Parser Abstraction for parsing synonym files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordnetSynonymParser Parser for wordnet prolog format See http://wordnet.princeton.edu/man/prologdb.5WN.html for a description of the format. @lucene.experimental"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymMap.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymMap.html",
    "title": "Class SynonymMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SynonymMap A map of synonyms, keys and values are phrases. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SynonymMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SynonymMap Constructors | Improve this Doc View Source SynonymMap(FST<BytesRef>, BytesRefHash, Int32) Declaration public SynonymMap(FST<BytesRef> fst, BytesRefHash words, int maxHorizontalContext) Parameters Type Name Description FST < BytesRef > fst BytesRefHash words System.Int32 maxHorizontalContext Fields | Improve this Doc View Source WORD_SEPARATOR for multiword support, you must separate words with this separator Declaration public const char WORD_SEPARATOR = '\\0' Field Value Type Description System.Char Properties | Improve this Doc View Source Fst map<input word, list<ord>> Declaration public FST<BytesRef> Fst { get; } Property Value Type Description FST < BytesRef > | Improve this Doc View Source MaxHorizontalContext maxHorizontalContext: maximum context we need on the tokenstream Declaration public int MaxHorizontalContext { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Words map<ord, outputword> Declaration public BytesRefHash Words { get; } Property Value Type Description BytesRefHash"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymMap.Builder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Synonym.SynonymMap.Builder.html",
    "title": "Class SynonymMap.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SynonymMap.Builder Builds an FSTSynonymMap. Call Add(CharsRef, CharsRef, Boolean) until you have added all the mappings, then call Build() to get an FSTSynonymMap @lucene.experimental Inheritance System.Object SynonymMap.Builder SynonymMap.Parser Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Synonym Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder Constructors | Improve this Doc View Source Builder(Boolean) If dedup is true then identical rules (same input, same output) will be added only once. Declaration public Builder(bool dedup) Parameters Type Name Description System.Boolean dedup Methods | Improve this Doc View Source Add(CharsRef, CharsRef, Boolean) Add a phrase->phrase synonym mapping. Phrases are character sequences where words are separated with character zero (U+0000). Empty words (two U+0000s in a row) are not allowed in the input nor the output! Declaration public virtual void Add(CharsRef input, CharsRef output, bool includeOrig) Parameters Type Name Description CharsRef input input phrase CharsRef output output phrase System.Boolean includeOrig true if the original should be included | Improve this Doc View Source Build() Builds an SynonymMap and returns it. Declaration public virtual SynonymMap Build() Returns Type Description SynonymMap | Improve this Doc View Source Join(String[], CharsRef) Sugar: just joins the provided terms with WORD_SEPARATOR . reuse and its chars must not be null. Declaration public static CharsRef Join(string[] words, CharsRef reuse) Parameters Type Name Description System.String [] words CharsRef reuse Returns Type Description CharsRef"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.html",
    "title": "Namespace Lucene.Net.Analysis.Sv | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Sv Classes SwedishAnalyzer Analyzer for Swedish. SwedishLightStemFilter A TokenFilter that applies SwedishLightStemmer to stem Swedish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SwedishLightStemFilterFactory Factory for SwedishLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SwedishLightStemFilterFactory\"/> </analyzer> </fieldType> SwedishLightStemmer Light Stemmer for Swedish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.SwedishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sv.SwedishLightStemmer.html",
    "title": "Class SwedishLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SwedishLightStemmer Light Stemmer for Swedish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy Inheritance System.Object SwedishLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Sv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SwedishLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Rule.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Rule.html",
    "title": "Class RSLPStemmerBase.Rule | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RSLPStemmerBase.Rule A basic rule, with no exceptions. Inheritance System.Object RSLPStemmerBase.Rule RSLPStemmerBase.RuleWithSetExceptions RSLPStemmerBase.RuleWithSuffixExceptions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class Rule Constructors | Improve this Doc View Source Rule(String, Int32, String) Create a rule. Declaration public Rule(string suffix, int min, string replacement) Parameters Type Name Description System.String suffix suffix to remove System.Int32 min minimum stem length System.String replacement replacement string Fields | Improve this Doc View Source m_min Declaration protected readonly int m_min Field Value Type Description System.Int32 | Improve this Doc View Source m_replacement Declaration protected readonly char[] m_replacement Field Value Type Description System.Char [] | Improve this Doc View Source m_suffix Declaration protected readonly char[] m_suffix Field Value Type Description System.Char [] Methods | Improve this Doc View Source Matches(Char[], Int32) Declaration public virtual bool Matches(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Boolean true if the word matches this rule. | Improve this Doc View Source Replace(Char[], Int32) Declaration public virtual int Replace(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 new valid length of the string after firing this rule."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseLightStemmer.html",
    "title": "Class PortugueseLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseLightStemmer Light Stemmer for Portuguese This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy Inheritance System.Object PortugueseLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Position.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Position.html",
    "title": "Namespace Lucene.Net.Analysis.Position | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Position Classes PositionFilter Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. PositionFilterFactory Factory for PositionFilter . Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. <fieldType name=\"text_position\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PositionFilterFactory\" positionIncrement=\"0\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.StemmerOverrideMap.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.StemmerOverrideMap.html",
    "title": "Class StemmerOverrideFilter.StemmerOverrideMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StemmerOverrideFilter.StemmerOverrideMap A read-only 4-byte FST backed map that allows fast case-insensitive key value lookups for StemmerOverrideFilter Inheritance System.Object StemmerOverrideFilter.StemmerOverrideMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StemmerOverrideMap Constructors | Improve this Doc View Source StemmerOverrideMap(FST<BytesRef>, Boolean) Creates a new StemmerOverrideFilter.StemmerOverrideMap Declaration public StemmerOverrideMap(FST<BytesRef> fst, bool ignoreCase) Parameters Type Name Description FST < BytesRef > fst the fst to lookup the overrides System.Boolean ignoreCase if the keys case should be ingored Methods | Improve this Doc View Source Get(Char[], Int32, FST.Arc<BytesRef>, FST.BytesReader) Returns the value mapped to the given key or null if the key is not in the FST dictionary. Declaration public BytesRef Get(char[] buffer, int bufferLen, FST.Arc<BytesRef> scratchArc, FST.BytesReader fstReader) Parameters Type Name Description System.Char [] buffer System.Int32 bufferLen FST.Arc < BytesRef > scratchArc FST.BytesReader fstReader Returns Type Description BytesRef | Improve this Doc View Source GetBytesReader() Returns a FST.BytesReader to pass to the Get(Char[], Int32, FST.Arc<BytesRef>, FST.BytesReader) method. Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.html",
    "title": "Class StemmerOverrideFilter.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StemmerOverrideFilter.Builder This builder builds an FST for the StemmerOverrideFilter Inheritance System.Object StemmerOverrideFilter.Builder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder Constructors | Improve this Doc View Source Builder() Creates a new StemmerOverrideFilter.Builder with Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.ignoreCase set to false Declaration public Builder() | Improve this Doc View Source Builder(Boolean) Creates a new StemmerOverrideFilter.Builder Declaration public Builder(bool ignoreCase) Parameters Type Name Description System.Boolean ignoreCase if the input case should be ignored. Methods | Improve this Doc View Source Add(String, String) Adds an input string and it's stemmer override output to this builder. Declaration public virtual bool Add(string input, string output) Parameters Type Name Description System.String input the input char sequence System.String output the stemmer override output char sequence Returns Type Description System.Boolean false if the input has already been added to this builder otherwise true . | Improve this Doc View Source Build() Returns a StemmerOverrideFilter.StemmerOverrideMap to be used with the StemmerOverrideFilter Declaration public virtual StemmerOverrideFilter.StemmerOverrideMap Build() Returns Type Description StemmerOverrideFilter.StemmerOverrideMap a StemmerOverrideFilter.StemmerOverrideMap to be used with the StemmerOverrideFilter Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs;"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.IndonesianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.IndonesianStemmer.html",
    "title": "Class IndonesianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndonesianStemmer Stemmer for Indonesian. Stems Indonesian words with the algorithm presented in: A Study of Stemming Effects on Information Retrieval in Bahasa Indonesia , Fadillah Z Tala. http://www.illc.uva.nl/Publications/ResearchReports/MoL-2003-02.text.pdf Inheritance System.Object IndonesianStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndonesianStemmer Methods | Improve this Doc View Source Stem(Char[], Int32, Boolean) Stem a term (returning its new length). Use stemDerivational to control whether full stemming or only light inflectional stemming is done. Declaration public virtual int Stem(char[] text, int length, bool stemDerivational) Parameters Type Name Description System.Char [] text System.Int32 length System.Boolean stemDerivational Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hy.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hy.html",
    "title": "Namespace Lucene.Net.Analysis.Hy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hy Classes ArmenianAnalyzer Analyzer for Armenian."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hunspell.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hunspell.html",
    "title": "Namespace Lucene.Net.Analysis.Hunspell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hunspell Classes Dictionary In-memory structure for the dictionary (.dic) and affix (.aff) data of a hunspell dictionary. HunspellStemFilter TokenFilter that uses hunspell affix rules and words to stem tokens. Since hunspell supports a word having multiple stems, this filter can emit multiple tokens for each consumed token Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory This is a Lucene.NET EXPERIMENTAL API, use at your own risk HunspellStemFilterFactory TokenFilterFactory that creates instances of HunspellStemFilter . Example config for British English: <filter class=\"solr.HunspellStemFilterFactory\" dictionary=\"en_GB.dic,my_custom.dic\" affix=\"en_GB.aff\" ignoreCase=\"false\" longestOnly=\"false\" /> Both parameters dictionary and affix are mandatory. Dictionaries for many languages are available through the OpenOffice project. See http://wiki.apache.org/solr/Hunspell This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hunspell.Dictionary.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hunspell.Dictionary.html",
    "title": "Class Dictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Dictionary In-memory structure for the dictionary (.dic) and affix (.aff) data of a hunspell dictionary. Inheritance System.Object Dictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hunspell Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Dictionary Constructors | Improve this Doc View Source Dictionary(Stream, IList<Stream>, Boolean) Creates a new Dictionary containing the information read from the provided System.IO.Stream s to hunspell affix and dictionary files. You have to dispose the provided System.IO.Stream s yourself. Declaration public Dictionary(Stream affix, IList<Stream> dictionaries, bool ignoreCase) Parameters Type Name Description System.IO.Stream affix System.IO.Stream for reading the hunspell affix file (won't be disposed). System.Collections.Generic.IList < System.IO.Stream > dictionaries System.IO.Stream for reading the hunspell dictionary files (won't be disposed). System.Boolean ignoreCase ignore case? Exceptions Type Condition System.IO.IOException Can be thrown while reading from the System.IO.Stream s System.Exception Can be thrown if the content of the files does not meet expected formats | Improve this Doc View Source Dictionary(Stream, Stream) Creates a new Dictionary containing the information read from the provided System.IO.Stream s to hunspell affix and dictionary files. You have to dispose the provided System.IO.Stream s yourself. Declaration public Dictionary(Stream affix, Stream dictionary) Parameters Type Name Description System.IO.Stream affix System.IO.Stream for reading the hunspell affix file (won't be disposed). System.IO.Stream dictionary System.IO.Stream for reading the hunspell dictionary file (won't be disposed). Exceptions Type Condition System.IO.IOException Can be thrown while reading from the System.IO.Stream s System.Exception Can be thrown if the content of the files does not meet expected formats"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.html",
    "title": "Namespace Lucene.Net.Analysis.Hu | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hu Classes HungarianAnalyzer Analyzer for Hungarian. HungarianLightStemFilter A TokenFilter that applies HungarianLightStemmer to stem Hungarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . HungarianLightStemFilterFactory Factory for HungarianLightStemFilter . <fieldType name=\"text_hulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.HungarianLightStemFilterFactory\"/> </analyzer> </fieldType> HungarianLightStemmer Light Stemmer for Hungarian. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.HungarianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.HungarianLightStemmer.html",
    "title": "Class HungarianLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HungarianLightStemmer Light Stemmer for Hungarian. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy Inheritance System.Object HungarianLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HungarianLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.html",
    "title": "Namespace Lucene.Net.Analysis.Hi | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Hi Classes HindiAnalyzer Analyzer for Hindi. You must specify the required LuceneVersion compatibility when creating HindiAnalyzer: As of 3.6, StandardTokenizer is used for tokenization HindiNormalizationFilter A TokenFilter that applies HindiNormalizer to normalize the orthography. In some cases the normalization may cause unrelated terms to conflate, so to prevent terms from being normalized use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . HindiNormalizationFilterFactory Factory for HindiNormalizationFilter . <fieldType name=\"text_hinormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiNormalizationFilterFactory\"/> </analyzer> </fieldType> HindiNormalizer Normalizer for Hindi. Normalizes text to remove some differences in spelling variations. Implements the Hindi-language specific algorithm specified in: Word normalization in Indian languages Prasad Pingali and Vasudeva Varma. http://web2py.iiit.ac.in/publications/default/download/inproceedings.pdf.3fe5b38c-02ee-41ce-9a8f-3e745670be32.pdf with the following additions from Hindi CLIR in Thirty Days Leah S. Larkey, Margaret E. Connell, and Nasreen AbdulJaleel. http://maroo.cs.umass.edu/pub/web/getpdf.php?id=454 : Internal Zero-width joiner and Zero-width non-joiners are removed In addition to chandrabindu, NA+halant is normalized to anusvara HindiStemFilter A TokenFilter that applies HindiStemmer to stem Hindi words. HindiStemFilterFactory Factory for HindiStemFilter . <fieldType name=\"text_histem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiStemFilterFactory\"/> </analyzer> </fieldType> HindiStemmer Light Stemmer for Hindi. Implements the algorithm specified in: A Lightweight Stemmer for Hindi Ananthakrishnan Ramanathan and Durgesh D Rao. http://computing.open.ac.uk/Sites/EACLSouthAsia/Papers/p6-Ramanathan.pdf"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.html",
    "title": "Class TernaryTree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TernaryTree Ternary Search Tree. A ternary search tree is a hybrid between a binary tree and a digital search tree (trie). Keys are limited to strings. A data value of type char is stored in each leaf node. It can be used as an index (or pointer) to the data. Branches that only contain one key are compressed to one node by storing a pointer to the trailer substring of the key. This class is intended to serve as base class or helper class to implement Dictionary collections or the like. Ternary trees have some nice properties as the following: the tree can be traversed in sorted order, partial matches (wildcard) can be implemented, retrieval of all keys within a given distance from the target, etc. The storage requirements are higher than a binary tree but a lot less than a trie. Performance is comparable with a hash table, sometimes it outperforms a hash function (most of the time can determine a miss faster than a hash). The main purpose of this java port is to serve as a base for implementing TeX's hyphenation algorithm (see The TeXBook, appendix H). Each language requires from 5000 to 15000 hyphenation patterns which will be keys in this tree. The strings patterns are usually small (from 2 to 5 characters), but each char in the tree is stored in a node. Thus memory usage is the main concern. We will sacrifice 'elegance' to keep memory requirements to the minimum. Using java's char type as pointer (yes, I know pointer it is a forbidden word in java) we can keep the size of the node to be just 8 bytes (3 pointers and the data char). This gives room for about 65000 nodes. In my tests the english patterns took 7694 nodes and the german patterns 10055 nodes, so I think we are safe. All said, this is a map with strings as keys and char as value. Pretty limited!. It can be extended to a general map by using the string representation of an object and using the char value as an index to an array that contains the object values. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object TernaryTree HyphenationTree Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TernaryTree Fields | Improve this Doc View Source BLOCK_SIZE Declaration protected const int BLOCK_SIZE = 2048 Field Value Type Description System.Int32 | Improve this Doc View Source m_eq Pointer to equal branch and to data when this node is a string terminator. Declaration protected char[] m_eq Field Value Type Description System.Char [] | Improve this Doc View Source m_freenode Declaration protected char m_freenode Field Value Type Description System.Char | Improve this Doc View Source m_hi Pointer to high branch. Declaration protected char[] m_hi Field Value Type Description System.Char [] | Improve this Doc View Source m_kv This vector holds the trailing of the keys when the branch is compressed. Declaration protected CharVector m_kv Field Value Type Description CharVector | Improve this Doc View Source m_length Declaration protected int m_length Field Value Type Description System.Int32 | Improve this Doc View Source m_lo Pointer to low branch and to rest of the key when it is stored directly in this node, we don't have unions in java! Declaration protected char[] m_lo Field Value Type Description System.Char [] | Improve this Doc View Source m_root Declaration protected char m_root Field Value Type Description System.Char | Improve this Doc View Source m_sc The character stored in this node: splitchar. Two special values are reserved: 0x0000 as string terminator 0xFFFF to indicate that the branch starting at this node is compressed This shouldn't be a problem if we give the usual semantics to strings since 0xFFFF is guaranteed not to be an Unicode character. Declaration protected char[] m_sc Field Value Type Description System.Char [] Properties | Improve this Doc View Source Length Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Balance() Balance the tree for best search performance Declaration public virtual void Balance() | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Find(Char[], Int32) Declaration public virtual int Find(char[] key, int start) Parameters Type Name Description System.Char [] key System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source Find(String) Declaration public virtual int Find(string key) Parameters Type Name Description System.String key Returns Type Description System.Int32 | Improve this Doc View Source Init() Declaration protected virtual void Init() | Improve this Doc View Source Insert(Char[], Int32, Char) Declaration public virtual void Insert(char[] key, int start, char val) Parameters Type Name Description System.Char [] key System.Int32 start System.Char val | Improve this Doc View Source Insert(String, Char) Branches are initially compressed, needing one node per key plus the size of the string key. They are decompressed as needed when another key with same prefix is inserted. This saves a lot of space, specially for long keys. Declaration public virtual void Insert(string key, char val) Parameters Type Name Description System.String key System.Char val | Improve this Doc View Source InsertBalanced(String[], Char[], Int32, Int32) Recursively insert the median first and then the median of the lower and upper halves, and so on in order to get a balanced tree. The array of keys is assumed to be sorted in ascending order. Declaration protected virtual void InsertBalanced(string[] k, char[] v, int offset, int n) Parameters Type Name Description System.String [] k System.Char [] v System.Int32 offset System.Int32 n | Improve this Doc View Source Keys() Declaration public virtual IEnumerator<string> Keys() Returns Type Description System.Collections.Generic.IEnumerator < System.String > | Improve this Doc View Source Knows(String) Declaration public virtual bool Knows(string key) Parameters Type Name Description System.String key Returns Type Description System.Boolean | Improve this Doc View Source PrintStats(TextWriter) Declaration public virtual void PrintStats(TextWriter out) Parameters Type Name Description System.IO.TextWriter out | Improve this Doc View Source StrCmp(Char[], Int32, Char[], Int32) Compares 2 null terminated char arrays Declaration public static int StrCmp(char[] a, int startA, char[] b, int startB) Parameters Type Name Description System.Char [] a System.Int32 startA System.Char [] b System.Int32 startB Returns Type Description System.Int32 | Improve this Doc View Source StrCmp(String, Char[], Int32) Compares a string with null terminated char array Declaration public static int StrCmp(string str, char[] a, int start) Parameters Type Name Description System.String str System.Char [] a System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source StrCpy(Char[], Int32, Char[], Int32) Declaration public static void StrCpy(char[] dst, int di, char[] src, int si) Parameters Type Name Description System.Char [] dst System.Int32 di System.Char [] src System.Int32 si | Improve this Doc View Source StrLen(Char[]) Declaration public static int StrLen(char[] a) Parameters Type Name Description System.Char [] a Returns Type Description System.Int32 | Improve this Doc View Source StrLen(Char[], Int32) Declaration public static int StrLen(char[] a, int start) Parameters Type Name Description System.Char [] a System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source TrimToSize() Each node stores a character (splitchar) which is part of some key(s). In a compressed branch (one that only contain a single string key) the trailer of the key which is not already in nodes is stored externally in the kv array. As items are inserted, key substrings decrease. Some substrings may completely disappear when the whole branch is totally decompressed. The tree is traversed to find the key substrings actually used. In addition, duplicate substrings are removed using a map (implemented with a TernaryTree!). Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.PatternParser.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.PatternParser.html",
    "title": "Class PatternParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternParser A XMLReader document handler to read and parse hyphenation patterns from a XML file. LUCENENET: This class has been refactored from its Java counterpart to use XmlReader rather than a SAX parser. Inheritance System.Object PatternParser Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternParser Constructors | Improve this Doc View Source PatternParser() Declaration public PatternParser() | Improve this Doc View Source PatternParser(IPatternConsumer) Declaration public PatternParser(IPatternConsumer consumer) Parameters Type Name Description IPatternConsumer consumer Properties | Improve this Doc View Source Consumer Declaration public virtual IPatternConsumer Consumer { get; set; } Property Value Type Description IPatternConsumer Methods | Improve this Doc View Source Characters(Char[], Int32, Int32) Receive notification of character data. The Parser will call this method to report each chunk of character data. Parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information. The application must not attempt to read from the array outside of the specified range. Declaration public virtual void Characters(char[] ch, int start, int length) Parameters Type Name Description System.Char [] ch System.Int32 start System.Int32 length | Improve this Doc View Source EndElement(String, String, String) Receive notification of the end of an element. The parser will invoke this method at the end of every element in the XML document; there will be a corresponding StartElement(String, String, String, IDictionary<String, String>) event for every EndElement(String, String, String) event (even when the element is empty). Declaration public virtual void EndElement(string uri, string local, string raw) Parameters Type Name Description System.String uri the Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed System.String local the local name (without prefix), or the empty string if Namespace processing is not being performed System.String raw | Improve this Doc View Source GetExceptionWord<T1>(IList<T1>) Declaration protected virtual string GetExceptionWord<T1>(IList<T1> ex) Parameters Type Name Description System.Collections.Generic.IList <T1> ex Returns Type Description System.String Type Parameters Name Description T1 | Improve this Doc View Source GetInterletterValues(String) Declaration protected static string GetInterletterValues(string pat) Parameters Type Name Description System.String pat Returns Type Description System.String | Improve this Doc View Source GetPattern(String) Declaration protected static string GetPattern(string word) Parameters Type Name Description System.String word Returns Type Description System.String | Improve this Doc View Source NormalizeException<T1>(IList<T1>) Declaration protected virtual IList<object> NormalizeException<T1>(IList<T1> ex) Parameters Type Name Description System.Collections.Generic.IList <T1> ex Returns Type Description System.Collections.Generic.IList < System.Object > Type Parameters Name Description T1 | Improve this Doc View Source Parse(FileInfo) Parses a hyphenation pattern file. Declaration public virtual void Parse(FileInfo file) Parameters Type Name Description System.IO.FileInfo file a System.IO.FileInfo object representing the file Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(FileInfo, Encoding) Parses a hyphenation pattern file. Declaration public virtual void Parse(FileInfo file, Encoding encoding) Parameters Type Name Description System.IO.FileInfo file a System.IO.FileInfo object representing the file System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(Stream) Parses a hyphenation pattern file. Declaration public virtual void Parse(Stream xmlStream) Parameters Type Name Description System.IO.Stream xmlStream The stream containing the XML data. The PatternParser scans the first bytes of the stream looking for a byte order mark or other sign of encoding. When encoding is determined, the encoding is used to continue reading the stream, and processing continues parsing the input as a stream of (Unicode) characters. Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(String) Parses a hyphenation pattern file. Declaration public virtual void Parse(string path) Parameters Type Name Description System.String path The complete file path to be read. Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(String, Encoding) Parses a hyphenation pattern file. Declaration public virtual void Parse(string path, Encoding encoding) Parameters Type Name Description System.String path The complete file path to be read. System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source Parse(XmlReader) Parses a hyphenation pattern file. Declaration public virtual void Parse(XmlReader source) Parameters Type Name Description System.Xml.XmlReader source System.Xml.XmlReader input source for the file Exceptions Type Condition System.IO.IOException In case of an exception while parsing | Improve this Doc View Source ReadToken(StringBuilder) Declaration protected virtual string ReadToken(StringBuilder chars) Parameters Type Name Description System.Text.StringBuilder chars Returns Type Description System.String | Improve this Doc View Source StartElement(String, String, String, IDictionary<String, String>) Receive notification of the beginning of an element. The Parser will invoke this method at the beginning of every element in the XML document; there will be a corresponding EndElement(String, String, String) event for every StartElement(String, String, String, IDictionary<String, String>) event (even when the element is empty). All of the element's content will be reported, in order, before the corresponding endElement event. Declaration public virtual void StartElement(string uri, string local, string raw, IDictionary<string, string> attrs) Parameters Type Name Description System.String uri the Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed System.String local the local name (without prefix), or the empty string if Namespace processing is not being performed System.String raw System.Collections.Generic.IDictionary < System.String , System.String > attrs the attributes attached to the element. If there are no attributes, it shall be an empty Attributes object. The value of this object after startElement returns is undefined"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.IPatternConsumer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.IPatternConsumer.html",
    "title": "Interface IPatternConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPatternConsumer This interface is used to connect the XML pattern file parser to the hyphenation tree. This interface has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IPatternConsumer Methods | Improve this Doc View Source AddClass(String) Add a character class. A character class defines characters that are considered equivalent for the purpose of hyphenation (e.g. \"aA\"). It usually means to ignore case. Declaration void AddClass(string chargroup) Parameters Type Name Description System.String chargroup character group | Improve this Doc View Source AddException(String, IList<Object>) Add a hyphenation exception. An exception replaces the result obtained by the algorithm for cases for which this fails or the user wants to provide his own hyphenation. A hyphenatedword is a vector of alternating String's and Hyphen instances Declaration void AddException(string word, IList<object> hyphenatedword) Parameters Type Name Description System.String word System.Collections.Generic.IList < System.Object > hyphenatedword | Improve this Doc View Source AddPattern(String, String) Add hyphenation patterns. Declaration void AddPattern(string pattern, string values) Parameters Type Name Description System.String pattern the pattern System.String values interletter values expressed as a string of digit characters."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.Hyphenation.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.Hyphenation.html",
    "title": "Class Hyphenation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Hyphenation This class represents a hyphenated word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object Hyphenation Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Hyphenation Properties | Improve this Doc View Source HyphenationPoints the hyphenation points Declaration public virtual int[] HyphenationPoints { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Length the number of hyphenation points in the word Declaration public virtual int Length { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.Hyphen.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.Hyphen.html",
    "title": "Class Hyphen | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Hyphen This class represents a hyphen. A 'full' hyphen is made of 3 parts: the pre-break text, post-break text and no-break. If no line-break is generated at this position, the no-break text is used, otherwise, pre-break and post-break are used. Typically, pre-break is equal to the hyphen character and the others are empty. However, this general scheme allows support for cases in some languages where words change spelling if they're split across lines, like german's 'backen' which hyphenates 'bak-ken'. BTW, this comes from TeX. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object Hyphen Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Hyphen Properties | Improve this Doc View Source NoBreak Declaration public string NoBreak { get; set; } Property Value Type Description System.String | Improve this Doc View Source PostBreak Declaration public string PostBreak { get; set; } Property Value Type Description System.String | Improve this Doc View Source PreBreak Declaration public string PreBreak { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.CharVector.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.CharVector.html",
    "title": "Class CharVector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharVector This class implements a simple char vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object CharVector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharVector Constructors | Improve this Doc View Source CharVector() Declaration public CharVector() | Improve this Doc View Source CharVector(Char[]) Declaration public CharVector(char[] a) Parameters Type Name Description System.Char [] a | Improve this Doc View Source CharVector(Char[], Int32) Declaration public CharVector(char[] a, int capacity) Parameters Type Name Description System.Char [] a System.Int32 capacity | Improve this Doc View Source CharVector(Int32) Declaration public CharVector(int capacity) Parameters Type Name Description System.Int32 capacity Properties | Improve this Doc View Source Array Declaration public virtual char[] Array { get; } Property Value Type Description System.Char [] | Improve this Doc View Source Capacity returns current capacity of array Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[Int32] LUCENENET indexer for .NET Declaration public virtual char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length return number of items in array Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Alloc(Int32) Declaration public virtual int Alloc(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 | Improve this Doc View Source Clear() Reset Vector but don't resize or clear elements Declaration public virtual void Clear() | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source TrimToSize() Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.ByteVector.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.ByteVector.html",
    "title": "Class ByteVector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteVector This class implements a simple byte vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object ByteVector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ByteVector Constructors | Improve this Doc View Source ByteVector() Declaration public ByteVector() | Improve this Doc View Source ByteVector(Byte[]) Declaration public ByteVector(byte[] a) Parameters Type Name Description System.Byte [] a | Improve this Doc View Source ByteVector(Byte[], Int32) Declaration public ByteVector(byte[] a, int capacity) Parameters Type Name Description System.Byte [] a System.Int32 capacity | Improve this Doc View Source ByteVector(Int32) Declaration public ByteVector(int capacity) Parameters Type Name Description System.Int32 capacity Properties | Improve this Doc View Source Array Declaration public virtual byte[] Array { get; } Property Value Type Description System.Byte [] | Improve this Doc View Source Capacity returns current capacity of array Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Item[Int32] LUCENENET indexer for .NET Declaration public virtual byte this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Byte | Improve this Doc View Source Length return number of items in array Declaration public virtual int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Alloc(Int32) This is to implement memory allocation in the array. Like malloc(). Declaration public virtual int Alloc(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 | Improve this Doc View Source TrimToSize() Declaration public virtual void TrimToSize()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.CompoundToken.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.CompoundToken.html",
    "title": "Class CompoundWordTokenFilterBase.CompoundToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundWordTokenFilterBase.CompoundToken Helper class to hold decompounded token information Inheritance System.Object CompoundWordTokenFilterBase.CompoundToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class CompoundToken Constructors | Improve this Doc View Source CompoundToken(CompoundWordTokenFilterBase, Int32, Int32) Construct the compound token based on a slice of the current m_termAtt . Declaration public CompoundToken(CompoundWordTokenFilterBase outerInstance, int offset, int length) Parameters Type Name Description CompoundWordTokenFilterBase outerInstance System.Int32 offset System.Int32 length Properties | Improve this Doc View Source EndOffset Declaration public int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public ICharSequence Text { get; } Property Value Type Description ICharSequence"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.html",
    "title": "Namespace Lucene.Net.Analysis.CommonGrams | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.CommonGrams Classes CommonGramsFilter Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. This is achieved through the use of PositionIncrement . Bigrams have a type of GRAM_TYPE Example: input:\"the quick brown fox\" output:|\"the\",\"the-quick\"|\"brown\"|\"fox\"| \"the-quick\" has a position increment of 0 so it is in the same position as \"the\" \"the-quick\" has a term.type() of \"gram\" CommonGramsFilterFactory Constructs a CommonGramsFilter . <fieldType name=\"text_cmmngrms\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsFilterFactory\" words=\"commongramsstopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> CommonGramsQueryFilter Wrap a CommonGramsFilter optimizing phrase queries by only returning single words when they are not a member of a bigram. Example: query input to CommonGramsFilter: \"the rain in spain falls mainly\" output of CommomGramsFilter/input to CommonGramsQueryFilter: |\"the, \"the-rain\"|\"rain\" \"rain-in\"|\"in, \"in-spain\"|\"spain\"|\"falls\"|\"mainly\" output of CommonGramsQueryFilter:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" CommonGramsQueryFilterFactory Construct CommonGramsQueryFilter . <fieldType name=\"text_cmmngrmsqry\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsQueryFilterFactory\" words=\"commongramsquerystopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.html",
    "title": "Namespace Lucene.Net.Analysis.Bg | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Bg Classes BulgarianAnalyzer Analyzer for Bulgarian. This analyzer implements light-stemming as specified by: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf BulgarianStemFilter A TokenFilter that applies BulgarianStemmer to stem Bulgarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . BulgarianStemFilterFactory Factory for BulgarianStemFilter . <fieldType name=\"text_bgstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BulgarianStemFilterFactory\"/> </analyzer> </fieldType> BulgarianStemmer Light Stemmer for Bulgarian. Implements the algorithm described in: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.BulgarianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.BulgarianStemmer.html",
    "title": "Class BulgarianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BulgarianStemmer Light Stemmer for Bulgarian. Implements the algorithm described in: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf Inheritance System.Object BulgarianStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BulgarianStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Bulgarian text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Snowball.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Snowball.html",
    "title": "Namespace Lucene.Net.Analysis.Snowball | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Snowball Classes SnowballAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter , StopFilter and SnowballFilter . Available stemmers are listed in org.tartarus.snowball.ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer , with the following addition: As of 3.1, uses TurkishLowerCaseFilter for Turkish language. SnowballFilter A filter that stems words using a Snowball-generated stemmer. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. NOTE : SnowballFilter expects lowercased text. For the Turkish language, see TurkishLowerCaseFilter . For other languages, see LowerCaseFilter . Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory SnowballPorterFilterFactory Factory for SnowballFilter , with configurable language Note: Use of the \"Lovins\" stemmer is not recommended, as it is implemented with reflection. <fieldType name=\"text_snowballstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SnowballPorterFilterFactory\" protected=\"protectedkeyword.txt\" language=\"English\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.html",
    "title": "Namespace Lucene.Net.Analysis.Sinks | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Sinks Classes DateRecognizerSinkFilter Attempts to parse the ToString() as a Date using either the System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) or System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) methods. If a format is passed, System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) will be used, and the format must strictly match one of the specified formats as specified in the MSDN documentation. If the value is a Date, it will add it to the sink. TeeSinkTokenFilter This TokenFilter provides the ability to set aside attribute states that have already been analyzed. This is useful in situations where multiple fields share many common analysis steps and then go their separate ways. It is also useful for doing things like entity extraction or proper noun analysis as part of the analysis workflow and saving off those tokens for use in another field. TeeSinkTokenFilter source1 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader1)); TeeSinkTokenFilter.SinkTokenStream sink1 = source1.NewSinkTokenStream(); TeeSinkTokenFilter.SinkTokenStream sink2 = source1.NewSinkTokenStream(); TeeSinkTokenFilter source2 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader2)); source2.AddSinkTokenStream(sink1); source2.AddSinkTokenStream(sink2); TokenStream final1 = new LowerCaseFilter(version, source1); TokenStream final2 = source2; TokenStream final3 = new EntityDetect(sink1); TokenStream final4 = new URLDetect(sink2); d.Add(new TextField(\"f1\", final1, Field.Store.NO)); d.Add(new TextField(\"f2\", final2, Field.Store.NO)); d.Add(new TextField(\"f3\", final3, Field.Store.NO)); d.Add(new TextField(\"f4\", final4, Field.Store.NO)); In this example, sink1 and sink2 will both get tokens from both reader1 and reader2 after whitespace tokenizer and now we can further wrap any of these in extra analysis, and more \"sources\" can be inserted if desired. It is important, that tees are consumed before sinks (in the above example, the field names must be less the sink's field names). If you are not sure, which stream is consumed first, you can simply add another sink and then pass all tokens to the sinks at once using ConsumeAllTokens() . This TokenFilter is exhausted after this. In the above example, change the example above to: ... TokenStream final1 = new LowerCaseFilter(version, source1.NewSinkTokenStream()); TokenStream final2 = source2.NewSinkTokenStream(); sink1.ConsumeAllTokens(); sink2.ConsumeAllTokens(); ... In this case, the fields can be added in any order, because the sources are not used anymore and all sinks are ready. Note, the EntityDetect and URLDetect TokenStreams are for the example and do not currently exist in Lucene. TeeSinkTokenFilter.SinkFilter A filter that decides which AttributeSource states to store in the sink. TeeSinkTokenFilter.SinkTokenStream TokenStream output from a tee with optional filtering. TokenRangeSinkFilter Counts the tokens as they go by and saves to the internal list those between the range of lower and upper, exclusive of upper TokenTypeSinkFilter Adds a token to the sink if it has a specific type."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkFilter.html",
    "title": "Class TeeSinkTokenFilter.SinkFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TeeSinkTokenFilter.SinkFilter A filter that decides which AttributeSource states to store in the sink. Inheritance System.Object TeeSinkTokenFilter.SinkFilter DateRecognizerSinkFilter TokenRangeSinkFilter TokenTypeSinkFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class SinkFilter Methods | Improve this Doc View Source Accept(AttributeSource) Returns true, iff the current state of the passed-in AttributeSource shall be stored in the sink. Declaration public abstract bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean | Improve this Doc View Source Reset() Called by Reset() . This method does nothing by default and can optionally be overridden. Declaration public virtual void Reset()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Shingle.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Shingle.html",
    "title": "Namespace Lucene.Net.Analysis.Shingle | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Shingle Classes ShingleAnalyzerWrapper A ShingleAnalyzerWrapper wraps a ShingleFilter around another Analyzer . A shingle is another name for a token based n-gram. ShingleFilter A ShingleFilter constructs shingles (token n-grams) from a token stream. In other words, it creates combinations of tokens as a single token. For example, the sentence \"please divide this sentence into shingles\" might be tokenized into shingles \"please divide\", \"divide this\", \"this sentence\", \"sentence into\", and \"into shingles\". This filter handles position increments > 1 by inserting filler tokens (tokens with termtext \"_\"). It does not handle a position increment of 0. ShingleFilterFactory Factory for ShingleFilter . <fieldType name=\"text_shingle\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ShingleFilterFactory\" minShingleSize=\"2\" maxShingleSize=\"2\" outputUnigrams=\"true\" outputUnigramsIfNoShingles=\"false\" tokenSeparator=\" \" fillerToken=\"_\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.html",
    "title": "Namespace Lucene.Net.Analysis.Ru | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ru Classes RussianAnalyzer Analyzer for Russian language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating RussianAnalyzer : As of 3.1, StandardTokenizer is used, Snowball stemming is done with SnowballFilter , and Snowball stopwords are used by default. RussianLetterTokenizer A RussianLetterTokenizer is a Tokenizer that extends LetterTokenizer by also allowing the basic Latin digits 0-9. You must specify the required LuceneVersion compatibility when creating RussianLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. RussianLetterTokenizerFactory RussianLightStemFilter A TokenFilter that applies RussianLightStemmer to stem Russian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . RussianLightStemFilterFactory Factory for RussianLightStemFilter . <fieldType name=\"text_rulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RussianLightStemFilterFactory\"/> </analyzer> </fieldType> RussianLightStemmer Light Stemmer for Russian. This stemmer implements the following algorithm: Indexing and Searching Strategies for the Russian Language. Ljiljana Dolamic and Jacques Savoy."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.html",
    "title": "Namespace Lucene.Net.Analysis.Lv | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Lv Classes LatvianAnalyzer Analyzer for Latvian. LatvianStemFilter A TokenFilter that applies LatvianStemmer to stem Latvian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . LatvianStemFilterFactory Factory for LatvianStemFilter . <fieldType name=\"text_lvstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.LatvianStemFilterFactory\"/> </analyzer> </fieldType> LatvianStemmer Light stemmer for Latvian. This is a light version of the algorithm in Karlis Kreslin's PhD thesis A stemming algorithm for Latvian with the following modifications: Only explicitly stems noun and adjective morphology Stricter length/vowel checks for the resulting stems (verb etc suffix stripping is removed) Removes only the primary inflectional suffixes: case and number for nouns ; case, number, gender, and definitiveness for adjectives. Palatalization is only handled when a declension II,V,VI noun suffix is removed."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.LatvianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.LatvianStemmer.html",
    "title": "Class LatvianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LatvianStemmer Light stemmer for Latvian. This is a light version of the algorithm in Karlis Kreslin's PhD thesis A stemming algorithm for Latvian with the following modifications: Only explicitly stems noun and adjective morphology Stricter length/vowel checks for the resulting stems (verb etc suffix stripping is removed) Removes only the primary inflectional suffixes: case and number for nouns ; case, number, gender, and definitiveness for adjectives. Palatalization is only handled when a declension II,V,VI noun suffix is removed. Inheritance System.Object LatvianStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LatvianStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stem a latvian word. returns the new adjusted length. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.html",
    "title": "Namespace Lucene.Net.Analysis.Ja | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Kuromoji is a morphological analyzer for Japanese text. This module provides support for Japanese text analysis, including features such as part-of-speech tagging, lemmatization, and compound word analysis. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. Classes GraphvizFormatter Outputs the dot (graphviz) string for the viterbi lattice. JapaneseAnalyzer Analyzer for Japanese that uses morphological analysis. JapaneseBaseFormFilter Replaces term text with the IBaseFormAttribute . This acts as a lemmatizer for verbs and adjectives. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . JapaneseBaseFormFilterFactory Factory for JapaneseBaseFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> JapaneseIterationMarkCharFilter Normalizes Japanese horizontal iteration marks (odoriji) to their expanded form. JapaneseIterationMarkCharFilterFactory Factory for JapaneseIterationMarkCharFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"false\"> <analyzer> <charFilter class=\"solr.JapaneseIterationMarkCharFilterFactory normalizeKanji=\"true\" normalizeKana=\"true\"/> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> </analyzer> </fieldType> JapaneseKatakanaStemFilter A TokenFilter that normalizes common katakana spelling variations ending in a long sound character by removing this character (U+30FC). Only katakana words longer than a minimum length are stemmed (default is four). JapaneseKatakanaStemFilterFactory Factory for JapaneseKatakanaStemFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseKatakanaStemFilterFactory\" minimumLength=\"4\"/> </analyzer> </fieldType> JapanesePartOfSpeechStopFilter Removes tokens that match a set of part-of-speech tags. JapanesePartOfSpeechStopFilterFactory Factory for JapanesePartOfSpeechStopFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapanesePartOfSpeechStopFilterFactory\" tags=\"stopTags.txt\" enablePositionIncrements=\"true\"/> </analyzer> </fieldType> JapaneseReadingFormFilter A TokenFilter that replaces the term attribute with the reading of a token in either katakana or romaji form. The default reading form is katakana. JapaneseReadingFormFilterFactory Factory for JapaneseReadingFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseReadingFormFilterFactory\" useRomaji=\"false\"/> </analyzer> </fieldType> JapaneseTokenizer Tokenizer for Japanese that uses morphological analysis. JapaneseTokenizerFactory Factory for JapaneseTokenizer . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\" mode=\"NORMAL\" userDictionary=\"user.txt\" userDictionaryEncoding=\"UTF-8\" discardPunctuation=\"true\" /> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Token Analyzed token with morphological data from its dictionary. Enums JapaneseTokenizerMode Tokenization mode: this determines how the tokenizer handles compound and unknown words. JapaneseTokenizerType Token type reflecting the original source of this token"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.Util Classes BinaryDictionaryWriter CharacterDefinitionWriter ConnectionCostsBuilder ConnectionCostsWriter CSVUtil Utility class for parsing CSV text DictionaryBuilder TokenInfoDictionaryBuilder TokenInfoDictionaryWriter ToStringUtil Utility class for english translations of morphological data, used only for debugging. UnknownDictionaryBuilder UnknownDictionaryWriter Enums DictionaryBuilder.DictionaryFormat"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryBuilder.html",
    "title": "Class UnknownDictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionaryBuilder Inheritance System.Object UnknownDictionaryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionaryBuilder Constructors | Improve this Doc View Source UnknownDictionaryBuilder(String) Declaration public UnknownDictionaryBuilder(string encoding) Parameters Type Name Description System.String encoding Methods | Improve this Doc View Source Build(String) Declaration public virtual UnknownDictionaryWriter Build(string dirname) Parameters Type Name Description System.String dirname Returns Type Description UnknownDictionaryWriter | Improve this Doc View Source ReadCharacterDefinition(String, UnknownDictionaryWriter) Declaration public virtual void ReadCharacterDefinition(string filename, UnknownDictionaryWriter dictionary) Parameters Type Name Description System.String filename UnknownDictionaryWriter dictionary | Improve this Doc View Source ReadDictionaryFile(String) Declaration public virtual UnknownDictionaryWriter ReadDictionaryFile(string filename) Parameters Type Name Description System.String filename Returns Type Description UnknownDictionaryWriter | Improve this Doc View Source ReadDictionaryFile(String, String) Declaration public virtual UnknownDictionaryWriter ReadDictionaryFile(string filename, string encoding) Parameters Type Name Description System.String filename System.String encoding Returns Type Description UnknownDictionaryWriter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.ToStringUtil.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.ToStringUtil.html",
    "title": "Class ToStringUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToStringUtil Utility class for english translations of morphological data, used only for debugging. Inheritance System.Object ToStringUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public static class ToStringUtil Methods | Improve this Doc View Source GetInflectedFormTranslation(String) Get the english form of inflected form Declaration public static string GetInflectedFormTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetInflectionTypeTranslation(String) Get the english form of inflection type Declaration public static string GetInflectionTypeTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetPOSTranslation(String) Get the english form of a POS tag Declaration public static string GetPOSTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetRomanization(String) Romanize katakana with modified hepburn Declaration public static string GetRomanization(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetRomanization(StringBuilder, String) Romanize katakana with modified hepburn Declaration public static void GetRomanization(StringBuilder builder, string s) Parameters Type Name Description System.Text.StringBuilder builder System.String s"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchLightStemmer.html",
    "title": "Class FrenchLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchLightStemmer Light Stemmer for French. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy Inheritance System.Object FrenchLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.html",
    "title": "Namespace Lucene.Net.Analysis.Fi | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fi Classes FinnishAnalyzer Analyzer for Finnish. FinnishLightStemFilter A TokenFilter that applies FinnishLightStemmer to stem Finnish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . FinnishLightStemFilterFactory Factory for FinnishLightStemFilter . <fieldType name=\"text_filgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.FinnishLightStemFilterFactory\"/> </analyzer> </fieldType> FinnishLightStemmer Light Stemmer for Finnish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.FinnishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.FinnishLightStemmer.html",
    "title": "Class FinnishLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FinnishLightStemmer Light Stemmer for Finnish. This stemmer implements the algorithm described in: Report on CLEF-2003 Monolingual Tracks Jacques Savoy Inheritance System.Object FinnishLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FinnishLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.html",
    "title": "Namespace Lucene.Net.Analysis.Fa | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Fa Classes PersianAnalyzer Analyzer for Persian. This Analyzer uses PersianCharFilter which implies tokenizing around zero-width non-joiner in addition to whitespace. Some persian-specific variant forms (such as farsi yeh and keheh) are standardized. \"Stemming\" is accomplished via stopwords. PersianCharFilter CharFilter that replaces instances of Zero-width non-joiner with an ordinary space. PersianCharFilterFactory Factory for PersianCharFilter . <fieldType name=\"text_fa\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> </analyzer> </fieldType> PersianNormalizationFilter A TokenFilter that applies PersianNormalizer to normalize the orthography. PersianNormalizationFilterFactory Factory for PersianNormalizationFilter . <fieldType name=\"text_fanormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.PersianNormalizationFilterFactory\"/> </analyzer> </fieldType> PersianNormalizer Normalizer for Persian. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of various heh + hamza forms and heh goal to heh. Normalization of farsi yeh and yeh barree to arabic yeh Normalization of persian keheh to arabic kaf"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermGroupFacetCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermGroupFacetCollector.html",
    "title": "Class TermGroupFacetCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermGroupFacetCollector An implementation of AbstractGroupFacetCollector that computes grouped facets based on the indexed terms from the FieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractGroupFacetCollector TermGroupFacetCollector Implements ICollector Inherited Members AbstractGroupFacetCollector.m_groupField AbstractGroupFacetCollector.m_facetField AbstractGroupFacetCollector.m_facetPrefix AbstractGroupFacetCollector.m_segmentResults AbstractGroupFacetCollector.m_segmentFacetCounts AbstractGroupFacetCollector.m_segmentTotalCount AbstractGroupFacetCollector.m_startFacetOrd AbstractGroupFacetCollector.m_endFacetOrd AbstractGroupFacetCollector.MergeSegmentResults(Int32, Int32, Boolean) AbstractGroupFacetCollector.CreateSegmentResult() AbstractGroupFacetCollector.SetScorer(Scorer) AbstractGroupFacetCollector.Collect(Int32) AbstractGroupFacetCollector.SetNextReader(AtomicReaderContext) AbstractGroupFacetCollector.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public abstract class TermGroupFacetCollector : AbstractGroupFacetCollector, ICollector Methods | Improve this Doc View Source CreateTermGroupFacetCollector(String, String, Boolean, BytesRef, Int32) Factory method for creating the right implementation based on the fact whether the facet field contains multiple tokens per documents. Declaration public static TermGroupFacetCollector CreateTermGroupFacetCollector(string groupField, string facetField, bool facetFieldMultivalued, BytesRef facetPrefix, int initialSize) Parameters Type Name Description System.String groupField The group field System.String facetField The facet field System.Boolean facetFieldMultivalued Whether the facet field has multiple tokens per document BytesRef facetPrefix The facet prefix a facet entry should start with to be included. System.Int32 initialSize The initial allocation size of the internal int set and group facet list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Returns Type Description TermGroupFacetCollector TermGroupFacetCollector implementation Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermSecondPassGroupingCollector.html",
    "title": "Class TermSecondPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect grouped docs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector < BytesRef > TermSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector < BytesRef > ICollector Inherited Members AbstractSecondPassGroupingCollector<BytesRef>.m_groupMap AbstractSecondPassGroupingCollector<BytesRef>.m_groupDocs AbstractSecondPassGroupingCollector<BytesRef>.SetScorer(Scorer) AbstractSecondPassGroupingCollector<BytesRef>.Collect(Int32) AbstractSecondPassGroupingCollector<BytesRef>.AcceptsDocsOutOfOrder AbstractSecondPassGroupingCollector<BytesRef>.GetTopGroups(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermSecondPassGroupingCollector : AbstractSecondPassGroupingCollector<BytesRef>, IAbstractSecondPassGroupingCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermSecondPassGroupingCollector(String, IEnumerable<ISearchGroup<BytesRef>>, Sort, Sort, Int32, Boolean, Boolean, Boolean) Declaration public TermSecondPassGroupingCollector(string groupField, IEnumerable<ISearchGroup<BytesRef>> groups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields) Parameters Type Name Description System.String groupField System.Collections.Generic.IEnumerable < ISearchGroup < BytesRef >> groups Sort groupSort Sort withinGroupSort System.Int32 maxDocsPerGroup System.Boolean getScores System.Boolean getMaxScores System.Boolean fillSortFields Methods | Improve this Doc View Source RetrieveGroup(Int32) Declaration protected override AbstractSecondPassGroupingCollector.SearchGroupDocs<BytesRef> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs < BytesRef > Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.BytesRef>.RetrieveGroup(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups-1.html",
    "title": "Class TopGroups<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopGroups<TGroupValue> Represents result returned by a grouping search. @lucene.experimental Inheritance System.Object TopGroups<TGroupValue> Implements ITopGroups <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class TopGroups<TGroupValue> : ITopGroups<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source TopGroups(ITopGroups<TGroupValue>, Nullable<Int32>) Declaration public TopGroups(ITopGroups<TGroupValue> oldTopGroups, int? totalGroupCount) Parameters Type Name Description ITopGroups <TGroupValue> oldTopGroups System.Nullable < System.Int32 > totalGroupCount | Improve this Doc View Source TopGroups(SortField[], SortField[], Int32, Int32, IGroupDocs<TGroupValue>[], Single) Declaration public TopGroups(SortField[] groupSort, SortField[] withinGroupSort, int totalHitCount, int totalGroupedHitCount, IGroupDocs<TGroupValue>[] groups, float maxScore) Parameters Type Name Description SortField [] groupSort SortField [] withinGroupSort System.Int32 totalHitCount System.Int32 totalGroupedHitCount IGroupDocs <TGroupValue>[] groups System.Single maxScore Properties | Improve this Doc View Source Groups Group results in groupSort order Declaration public IGroupDocs<TGroupValue>[] Groups { get; } Property Value Type Description IGroupDocs <TGroupValue>[] | Improve this Doc View Source GroupSort How groups are sorted against each other Declaration public SortField[] GroupSort { get; } Property Value Type Description SortField [] | Improve this Doc View Source MaxScore Highest score across all hits, or System.Single.NaN if scores were not computed. Declaration public float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalGroupCount The total number of unique groups. If null this value is not computed. Declaration public int? TotalGroupCount { get; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source TotalGroupedHitCount Number of documents grouped into the topN groups Declaration public int TotalGroupedHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHitCount Number of documents matching the search Declaration public int TotalHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source WithinGroupSort How docs are sorted within each group Declaration public SortField[] WithinGroupSort { get; } Property Value Type Description SortField [] Implements ITopGroups<TGroupValue>"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.DefaultEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.DefaultEncoder.html",
    "title": "Class DefaultEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultEncoder Simple IEncoder implementation that does not modify the output Inheritance System.Object DefaultEncoder Implements IEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class DefaultEncoder : IEncoder Constructors | Improve this Doc View Source DefaultEncoder() Declaration public DefaultEncoder() Methods | Improve this Doc View Source EncodeText(String) Declaration public virtual string EncodeText(string originalText) Parameters Type Name Description System.String originalText Returns Type Description System.String Implements IEncoder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.GradientFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.GradientFormatter.html",
    "title": "Class GradientFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GradientFormatter Formats text with different color intensity depending on the score of the term. Inheritance System.Object GradientFormatter SpanGradientFormatter Implements IFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class GradientFormatter : IFormatter Constructors | Improve this Doc View Source GradientFormatter(Single, String, String, String, String) Sets the color range for the IDF scores Declaration public GradientFormatter(float maxScore, string minForegroundColor, string maxForegroundColor, string minBackgroundColor, string maxBackgroundColor) Parameters Type Name Description System.Single maxScore The score (and above) displayed as maxColor (See MaxTermWeight which can be used to callibrate scoring scale) System.String minForegroundColor The hex color used for representing IDF scores of zero eg FFFFFF (white) or null if no foreground color required System.String maxForegroundColor The largest hex color used for representing IDF scores eg 000000 (black) or null if no foreground color required System.String minBackgroundColor The hex color used for representing IDF scores of zero eg FFFFFF (white) or null if no background color required System.String maxBackgroundColor The largest hex color used for representing IDF scores eg 000000 (black) or null if no background color required Fields | Improve this Doc View Source m_bgBMax Declaration protected int m_bgBMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgBMin Declaration protected int m_bgBMin Field Value Type Description System.Int32 | Improve this Doc View Source m_bgGMax Declaration protected int m_bgGMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgGMin Declaration protected int m_bgGMin Field Value Type Description System.Int32 | Improve this Doc View Source m_bgRMax Declaration protected int m_bgRMax Field Value Type Description System.Int32 | Improve this Doc View Source m_bgRMin Declaration protected int m_bgRMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgBMax Declaration protected int m_fgBMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgBMin Declaration protected int m_fgBMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgGMax Declaration protected int m_fgGMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgGMin Declaration protected int m_fgGMin Field Value Type Description System.Int32 | Improve this Doc View Source m_fgRMax Declaration protected int m_fgRMax Field Value Type Description System.Int32 | Improve this Doc View Source m_fgRMin Declaration protected int m_fgRMin Field Value Type Description System.Int32 | Improve this Doc View Source m_highlightBackground Declaration protected bool m_highlightBackground Field Value Type Description System.Boolean | Improve this Doc View Source m_highlightForeground Declaration protected bool m_highlightForeground Field Value Type Description System.Boolean Methods | Improve this Doc View Source GetBackgroundColorString(Single) Declaration protected virtual string GetBackgroundColorString(float score) Parameters Type Name Description System.Single score Returns Type Description System.String | Improve this Doc View Source GetForegroundColorString(Single) Declaration protected virtual string GetForegroundColorString(float score) Parameters Type Name Description System.Single score Returns Type Description System.String | Improve this Doc View Source HexToInt32(String) Converts a hex string into an System.Int32 . NOTE: This was hexToInt() in Lucene Declaration public static int HexToInt32(string hex) Parameters Type Name Description System.String hex A string in capital or lower case hex, of no more then 16 characters. Returns Type Description System.Int32 Exceptions Type Condition System.FormatException if the string is more than 16 characters long, or if any character is not in the set [0-9a-fA-f] | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration public virtual string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Implements IFormatter"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.BoostingQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.BoostingQuery.html",
    "title": "Class BoostingQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostingQuery The BoostingQuery class can be used to effectively demote results that match a given query. Unlike the \"NOT\" clause, this still selects documents that contain undesirable terms, but reduces their overall score: Query balancedQuery = new BoostingQuery(positiveQuery, negativeQuery, 0.01f); In this scenario the positiveQuery contains the mandatory, desirable criteria which is used to select all matching documents, and the negativeQuery contains the undesirable elements which are simply used to lessen the scores. Documents that match the negativeQuery have their score multiplied by the supplied \"boost\" parameter, so this should be less than 1 to achieve a demoting effect This code was originally made available here: [WWW] http://marc.theaimsgroup.com/?l=lucene-user&m=108058407130459&w=2 and is documented here: http://wiki.apache.org/lucene-java/CommunityContributions Inheritance System.Object Query BoostingQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class BoostingQuery : Query Constructors | Improve this Doc View Source BoostingQuery(Query, Query, Single) Declaration public BoostingQuery(Query match, Query context, float boost) Parameters Type Name Description Query match Query context System.Single boost Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.ChainedFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.ChainedFilter.html",
    "title": "Class ChainedFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChainedFilter Allows multiple Filter s to be chained. Logical operations such as NOT and XOR are applied between filters. One operation can be used for all filters, or a specific operation can be declared for each filter. Order in which filters are called depends on the position of the filter in the chain. It's probably more efficient to place the most restrictive filters/least computationally-intensive filters first. Inheritance System.Object Filter ChainedFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class ChainedFilter : Filter Constructors | Improve this Doc View Source ChainedFilter(Filter[]) Ctor. Declaration public ChainedFilter(Filter[] chain) Parameters Type Name Description Filter [] chain The chain of filters | Improve this Doc View Source ChainedFilter(Filter[], Int32) Ctor. Declaration public ChainedFilter(Filter[] chain, int logic) Parameters Type Name Description Filter [] chain The chain of filters System.Int32 logic Logical operation to apply to ALL filters | Improve this Doc View Source ChainedFilter(Filter[], Int32[]) Ctor. Declaration public ChainedFilter(Filter[] chain, int[] logicArray) Parameters Type Name Description Filter [] chain The chain of filters System.Int32 [] logicArray Logical operations to apply between filters Fields | Improve this Doc View Source AND Declaration public const int AND = 1 Field Value Type Description System.Int32 | Improve this Doc View Source ANDNOT Declaration public const int ANDNOT = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Logical operation when none is declared. Defaults to OR. Declaration public const int DEFAULT = 0 Field Value Type Description System.Int32 | Improve this Doc View Source OR Declaration public const int OR = 0 Field Value Type Description System.Int32 | Improve this Doc View Source XOR Declaration public const int XOR = 3 Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) GetDocIdSet(AtomicReaderContext, IBits) . Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CommonTermsQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CommonTermsQuery.html",
    "title": "Class CommonTermsQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommonTermsQuery A query that executes high-frequency terms in a optional sub-query to prevent slow queries due to \"common\" terms like stopwords. This query builds 2 queries off the Add(Term) added terms: low-frequency terms are added to a required boolean clause and high-frequency terms are added to an optional boolean clause. The optional clause is only executed if the required \"low-frequency\" clause matches. Scores produced by this query will be slightly different than plain BooleanQuery scorer mainly due to differences in the Coord(Int32, Int32) number of leaf queries in the required boolean clause. In most cases, high-frequency terms are unlikely to significantly contribute to the document score unless at least one of the low-frequency terms are matched. This query can improve query execution times significantly if applicable. CommonTermsQuery has several advantages over stopword filtering at index or query time since a term can be \"classified\" based on the actual document frequency in the index and can prevent slow queries even across domains without specialized stopword files. Note: if the query only contains high-frequency terms the query is rewritten into a plain conjunction query ie. all high-frequency terms need to match in order to match a document. Collection initializer note: To create and populate a CommonTermsQuery in a single statement, you can use the following example as a guide: var query = new CommonTermsQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; Inheritance System.Object Query CommonTermsQuery Implements System.Collections.Generic.IEnumerable < Term > System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CommonTermsQuery : Query, IEnumerable<Term>, IEnumerable Constructors | Improve this Doc View Source CommonTermsQuery(Occur, Occur, Single) Creates a new CommonTermsQuery Declaration public CommonTermsQuery(Occur highFreqOccur, Occur lowFreqOccur, float maxTermFrequency) Parameters Type Name Description Occur highFreqOccur Occur used for high frequency terms Occur lowFreqOccur Occur used for low frequency terms System.Single maxTermFrequency a value in [0..1) (or absolute number >=1) representing the maximum threshold of a terms document frequency to be considered a low frequency term. Exceptions Type Condition System.ArgumentException if MUST_NOT is pass as lowFreqOccur or highFreqOccur | Improve this Doc View Source CommonTermsQuery(Occur, Occur, Single, Boolean) Creates a new CommonTermsQuery Declaration public CommonTermsQuery(Occur highFreqOccur, Occur lowFreqOccur, float maxTermFrequency, bool disableCoord) Parameters Type Name Description Occur highFreqOccur Occur used for high frequency terms Occur lowFreqOccur Occur used for low frequency terms System.Single maxTermFrequency a value in [0..1) (or absolute number >=1) representing the maximum threshold of a terms document frequency to be considered a low frequency term. System.Boolean disableCoord disables Coord(Int32, Int32) in scoring for the low / high frequency sub-queries Exceptions Type Condition System.ArgumentException if MUST_NOT is pass as lowFreqOccur or highFreqOccur Fields | Improve this Doc View Source m_disableCoord Declaration protected readonly bool m_disableCoord Field Value Type Description System.Boolean | Improve this Doc View Source m_highFreqBoost Declaration protected float m_highFreqBoost Field Value Type Description System.Single | Improve this Doc View Source m_highFreqMinNrShouldMatch Declaration protected float m_highFreqMinNrShouldMatch Field Value Type Description System.Single | Improve this Doc View Source m_highFreqOccur Declaration protected readonly Occur m_highFreqOccur Field Value Type Description Occur | Improve this Doc View Source m_lowFreqBoost Declaration protected float m_lowFreqBoost Field Value Type Description System.Single | Improve this Doc View Source m_lowFreqMinNrShouldMatch Declaration protected float m_lowFreqMinNrShouldMatch Field Value Type Description System.Single | Improve this Doc View Source m_lowFreqOccur Declaration protected readonly Occur m_lowFreqOccur Field Value Type Description Occur | Improve this Doc View Source m_maxTermFrequency Declaration protected readonly float m_maxTermFrequency Field Value Type Description System.Single | Improve this Doc View Source m_terms Declaration protected readonly IList<Term> m_terms Field Value Type Description System.Collections.Generic.IList < Term > Properties | Improve this Doc View Source HighFreqMinimumNumberShouldMatch Gets or Sets a minimum number of the high frequent optional BooleanClauses which must be satisfied in order to produce a match on the low frequency terms query part. This method accepts a float value in the range [0..1) as a fraction of the actual query terms in the low frequent clause or a number >=1 as an absolut number of clauses that need to match. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Declaration public virtual float HighFreqMinimumNumberShouldMatch { get; set; } Property Value Type Description System.Single | Improve this Doc View Source IsCoordDisabled Returns true iff Coord(Int32, Int32) is disabled in scoring for the high and low frequency query instance. The top level query will always disable coords. Declaration public virtual bool IsCoordDisabled { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowFreqMinimumNumberShouldMatch Gets or Sets a minimum number of the low frequent optional BooleanClauses which must be satisfied in order to produce a match on the low frequency terms query part. This method accepts a float value in the range [0..1) as a fraction of the actual query terms in the low frequent clause or a number >=1 as an absolut number of clauses that need to match. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Declaration public virtual float LowFreqMinimumNumberShouldMatch { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Add(Term) Adds a term to the CommonTermsQuery Declaration public virtual void Add(Term term) Parameters Type Name Description Term term the term to add | Improve this Doc View Source BuildQuery(Int32, TermContext[], Term[]) Declaration protected virtual Query BuildQuery(int maxDoc, TermContext[] contextArray, Term[] queryTerms) Parameters Type Name Description System.Int32 maxDoc TermContext [] contextArray Term [] queryTerms Returns Type Description Query | Improve this Doc View Source CalcHighFreqMinimumNumberShouldMatch(Int32) Declaration protected virtual int CalcHighFreqMinimumNumberShouldMatch(int numOptional) Parameters Type Name Description System.Int32 numOptional Returns Type Description System.Int32 | Improve this Doc View Source CalcLowFreqMinimumNumberShouldMatch(Int32) Declaration protected virtual int CalcLowFreqMinimumNumberShouldMatch(int numOptional) Parameters Type Name Description System.Int32 numOptional Returns Type Description System.Int32 | Improve this Doc View Source CollectTermContext(IndexReader, IList<AtomicReaderContext>, TermContext[], Term[]) Declaration public virtual void CollectTermContext(IndexReader reader, IList<AtomicReaderContext> leaves, TermContext[] contextArray, Term[] queryTerms) Parameters Type Name Description IndexReader reader System.Collections.Generic.IList < AtomicReaderContext > leaves TermContext [] contextArray Term [] queryTerms | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the m_terms collection. Declaration public IEnumerator<Term> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Term > An enumerator that can be used to iterate through the m_terms collection. | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source NewTermQuery(Term, TermContext) Builds a new TermQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual Query NewTermQuery(Term term, TermContext context) Parameters Type Name Description Term term term TermContext context the TermContext to be used to create the low level term query. Can be null . Returns Type Description Query new TermQuery instance | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the m_terms collection. Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator An enumerator that can be used to iterate through the m_terms collection. Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreQuery.html",
    "title": "Class CustomScoreQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CustomScoreQuery Query that sets document score as a programmatic function of several (sub) scores: the score of its subQuery (any query) (optional) the score of its FunctionQuery (or queries). Subclasses can modify the computation by overriding GetCustomScoreProvider(AtomicReaderContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query CustomScoreQuery Inherited Members Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CustomScoreQuery : Query Constructors | Improve this Doc View Source CustomScoreQuery(Query) Create a CustomScoreQuery over input subQuery . Declaration public CustomScoreQuery(Query subQuery) Parameters Type Name Description Query subQuery the sub query whose scored is being customized. Must not be null . | Improve this Doc View Source CustomScoreQuery(Query, FunctionQuery) Create a CustomScoreQuery over input subQuery and a FunctionQuery . Declaration public CustomScoreQuery(Query subQuery, FunctionQuery scoringQuery) Parameters Type Name Description Query subQuery the sub query whose score is being customized. Must not be null . FunctionQuery scoringQuery a value source query whose scores are used in the custom score computation. This parameter is optional - it can be null. | Improve this Doc View Source CustomScoreQuery(Query, FunctionQuery[]) Create a CustomScoreQuery over input subQuery and a FunctionQuery . Declaration public CustomScoreQuery(Query subQuery, params FunctionQuery[] scoringQueries) Parameters Type Name Description Query subQuery the sub query whose score is being customized. Must not be null . FunctionQuery [] scoringQueries value source queries whose scores are used in the custom score computation. This parameter is optional - it can be null or even an empty array. Properties | Improve this Doc View Source IsStrict Checks if this is strict custom scoring. In strict custom scoring, the ValueSource part does not participate in weight normalization. This may be useful when one wants full control over how scores are modified, and does not care about normalizing by the ValueSource part. One particular case where this is useful if for testing this query. Note: only has effect when the ValueSource part is not null . Declaration public virtual bool IsStrict { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Name A short name of this query, used in ToString(String) . Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source ScoringQueries The scoring queries that only affect the score of CustomScoreQuery . Declaration public virtual Query[] ScoringQueries { get; } Property Value Type Description Query [] | Improve this Doc View Source SubQuery The sub-query that CustomScoreQuery wraps, affecting both the score and which documents match. Declaration public virtual Query SubQuery { get; } Property Value Type Description Query Methods | Improve this Doc View Source Clone() Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetCustomScoreProvider(AtomicReaderContext) Returns a CustomScoreProvider that calculates the custom scores for the given IndexReader . The default implementation returns a default implementation as specified in the docs of CustomScoreProvider . @since 2.9.2 Declaration protected virtual CustomScoreProvider GetCustomScoreProvider(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description CustomScoreProvider | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.BoostedQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.BoostedQuery.html",
    "title": "Class BoostedQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostedQuery Query that is boosted by a ValueSource Inheritance System.Object Query BoostedQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class BoostedQuery : Query Constructors | Improve this Doc View Source BoostedQuery(Query, ValueSource) Declaration public BoostedQuery(Query subQuery, ValueSource boostVal) Parameters Type Name Description Query subQuery ValueSource boostVal Properties | Improve this Doc View Source Query Declaration public virtual Query Query { get; } Property Value Type Description Query | Improve this Doc View Source ValueSource Declaration public virtual ValueSource ValueSource { get; } Property Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.BoolDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.BoolDocValues.html",
    "title": "Class BoolDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoolDocValues Abstract FunctionValues implementation which supports retrieving System.Boolean values. Implementations can control how the System.Boolean values are loaded through BoolVal(Int32) Inheritance System.Object FunctionValues BoolDocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class BoolDocValues : FunctionValues Constructors | Improve this Doc View Source BoolDocValues(ValueSource) Declaration public BoolDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public abstract override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.DocTermsIndexException.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.DocTermsIndexException.html",
    "title": "Class DocTermsIndexDocValues.DocTermsIndexException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermsIndexDocValues.DocTermsIndexException Custom System.Exception to be thrown when the DocTermsIndex for a field cannot be generated Inheritance System.Object System.Exception DocTermsIndexDocValues.DocTermsIndexException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public sealed class DocTermsIndexException : Exception Constructors | Improve this Doc View Source DocTermsIndexException(String, Exception) Declaration public DocTermsIndexException(string fieldName, Exception cause) Parameters Type Name Description System.String fieldName System.Exception cause"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DocTermsIndexDocValues.html",
    "title": "Class DocTermsIndexDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermsIndexDocValues Serves as base class for FunctionValues based on DocTermsIndex. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object FunctionValues DocTermsIndexDocValues Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class DocTermsIndexDocValues : FunctionValues Constructors | Improve this Doc View Source DocTermsIndexDocValues(ValueSource, AtomicReaderContext, String) Declaration public DocTermsIndexDocValues(ValueSource vs, AtomicReaderContext context, string field) Parameters Type Name Description ValueSource vs AtomicReaderContext context System.String field Fields | Improve this Doc View Source m_spare Declaration protected readonly BytesRef m_spare Field Value Type Description BytesRef | Improve this Doc View Source m_spareChars Declaration protected readonly CharsRef m_spareChars Field Value Type Description CharsRef | Improve this Doc View Source m_termsIndex Declaration protected readonly SortedDocValues m_termsIndex Field Value Type Description SortedDocValues | Improve this Doc View Source m_val Declaration protected readonly MutableValueStr m_val Field Value Type Description MutableValueStr | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Properties | Improve this Doc View Source NumOrd Declaration public override int NumOrd { get; } Property Value Type Description System.Int32 Overrides FunctionValues.NumOrd Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source BytesVal(Int32, BytesRef) Declaration public override bool BytesVal(int doc, BytesRef target) Parameters Type Name Description System.Int32 doc BytesRef target Returns Type Description System.Boolean Overrides FunctionValues.BytesVal(Int32, BytesRef) | Improve this Doc View Source Exists(Int32) Declaration public override bool Exists(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.Exists(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source ObjectVal(Int32) Declaration public abstract override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source OrdVal(Int32) Declaration public override int OrdVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.OrdVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32) | Improve this Doc View Source ToTerm(String) Declaration protected abstract string ToTerm(string readableValue) Parameters Type Name Description System.String readableValue Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DoubleDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.DoubleDocValues.html",
    "title": "Class DoubleDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleDocValues Abstract FunctionValues implementation which supports retrieving System.Double values. Implementations can control how the System.Double values are loaded through DoubleVal(Int32) Inheritance System.Object FunctionValues DoubleDocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class DoubleDocValues : FunctionValues Constructors | Improve this Doc View Source DoubleDocValues(ValueSource) Declaration public DoubleDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public abstract override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int32DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int32DocValues.html",
    "title": "Class Int32DocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32DocValues Abstract FunctionValues implementation which supports retrieving System.Int32 values. Implementations can control how the System.Int32 values are loaded through Int32Val(Int32) NOTE: This was IntDocValues in Lucene Inheritance System.Object FunctionValues Int32DocValues Inherited Members FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class Int32DocValues : FunctionValues Constructors | Improve this Doc View Source Int32DocValues(ValueSource) Declaration public Int32DocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public abstract override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int64DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.Int64DocValues.html",
    "title": "Class Int64DocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64DocValues Abstract FunctionValues implementation which supports retrieving System.Int64 values. Implementations can control how the System.Int64 values are loaded through Int64Val(Int32) NOTE: This was LongDocValues in Lucene Inheritance System.Object FunctionValues Int64DocValues Inherited Members FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class Int64DocValues : FunctionValues Constructors | Improve this Doc View Source Int64DocValues(ValueSource) Declaration public Int64DocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source ExternalToInt64(String) NOTE: This was externalToLong() in Lucene Declaration protected virtual long ExternalToInt64(string extVal) Parameters Type Name Description System.String extVal Returns Type Description System.Int64 | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public override ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer Overrides FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) Declaration public abstract override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizer.html",
    "title": "Class ThaiTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiTokenizer Tokenizer that use ICU4N.Text.BreakIterator to tokenize Thai text. Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase ThaiTokenizer Implements System.IDisposable Inherited Members SegmentingTokenizerBase.BUFFERMAX SegmentingTokenizerBase.m_buffer SegmentingTokenizerBase.m_offset SegmentingTokenizerBase.IncrementToken() SegmentingTokenizerBase.Reset() SegmentingTokenizerBase.End() SegmentingTokenizerBase.IsSafeEnd(Char) Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public class ThaiTokenizer : SegmentingTokenizerBase, IDisposable Constructors | Improve this Doc View Source ThaiTokenizer(AttributeSource.AttributeFactory, TextReader) Creates a new ThaiTokenizer , supplying the AttributeSource.AttributeFactory Declaration public ThaiTokenizer(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader | Improve this Doc View Source ThaiTokenizer(TextReader) Creates a new ThaiTokenizer Declaration public ThaiTokenizer(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Methods | Improve this Doc View Source IncrementWord() Declaration protected override bool IncrementWord() Returns Type Description System.Boolean Overrides SegmentingTokenizerBase.IncrementWord() | Improve this Doc View Source SetNextSentence(Int32, Int32) Declaration protected override void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Overrides SegmentingTokenizerBase.SetNextSentence(Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizerFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiTokenizerFactory.html",
    "title": "Class ThaiTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiTokenizerFactory Factory for ThaiTokenizer . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ThaiTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ThaiTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public class ThaiTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ThaiTokenizerFactory(IDictionary<String, String>) Creates a new ThaiTokenizerFactory Declaration public ThaiTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader reader) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilter.html",
    "title": "Class ThaiWordFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiWordFilter TokenFilter that use ICU4N.Text.BreakIterator to break each Token that is Thai into separate Token(s) for each Thai word. Please note: Since matchVersion 3.1 on, this filter no longer lowercases non-thai text. ThaiAnalyzer will insert a LowerCaseFilter before this filter so the behaviour of the Analyzer does not change. With version 3.1, the filter handles position increments correctly. Inheritance System.Object AttributeSource TokenStream TokenFilter ThaiWordFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax [Obsolete(\"Use ThaiTokenizer instead.\")] public sealed class ThaiWordFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ThaiWordFilter(LuceneVersion, TokenStream) Creates a new ThaiWordFilter with the specified match version. Declaration public ThaiWordFilter(LuceneVersion matchVersion, TokenStream input) Parameters Type Name Description LuceneVersion matchVersion TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenStreamFromTermPositionVector.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenStreamFromTermPositionVector.html",
    "title": "Class TokenStreamFromTermPositionVector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStreamFromTermPositionVector TokenStream created from a term vector field. Inheritance System.Object AttributeSource TokenStream TokenStreamFromTermPositionVector Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public sealed class TokenStreamFromTermPositionVector : TokenStream, IDisposable Constructors | Improve this Doc View Source TokenStreamFromTermPositionVector(Terms) Constructor Declaration public TokenStreamFromTermPositionVector(Terms vector) Parameters Type Name Description Terms vector Terms that contains the data for creating the TokenStream . Must have positions and offsets. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTerm.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTerm.html",
    "title": "Class WeightedSpanTerm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedSpanTerm Lightweight class to hold term, weight, and positions used for scoring this term. Inheritance System.Object WeightedTerm WeightedSpanTerm Inherited Members WeightedTerm.Term WeightedTerm.Weight System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedSpanTerm : WeightedTerm Constructors | Improve this Doc View Source WeightedSpanTerm(Single, String) Declaration public WeightedSpanTerm(float weight, string term) Parameters Type Name Description System.Single weight System.String term | Improve this Doc View Source WeightedSpanTerm(Single, String, Boolean) Declaration public WeightedSpanTerm(float weight, string term, bool positionSensitive) Parameters Type Name Description System.Single weight System.String term System.Boolean positionSensitive Properties | Improve this Doc View Source IsPositionSensitive Declaration public virtual bool IsPositionSensitive { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source PositionSpans Declaration public virtual IList<PositionSpan> PositionSpans { get; } Property Value Type Description System.Collections.Generic.IList < PositionSpan > Methods | Improve this Doc View Source AddPositionSpans(IList<PositionSpan>) Declaration public virtual void AddPositionSpans(IList<PositionSpan> positionSpans) Parameters Type Name Description System.Collections.Generic.IList < PositionSpan > positionSpans | Improve this Doc View Source CheckPosition(Int32) Checks to see if this term is valid at position . Declaration public virtual bool CheckPosition(int position) Parameters Type Name Description System.Int32 position to check against valid term postions Returns Type Description System.Boolean true iff this term is a hit at this position"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.PositionCheckingMap-1.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.WeightedSpanTermExtractor.PositionCheckingMap-1.html",
    "title": "Class WeightedSpanTermExtractor.PositionCheckingMap<K> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedSpanTermExtractor.PositionCheckingMap<K> This class makes sure that if both position sensitive and insensitive versions of the same term are added, the position insensitive one wins. Inheritance System.Object WeightedSpanTermExtractor.PositionCheckingMap<K> Implements System.Collections.Generic.IDictionary <K, WeightedSpanTerm > System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm >> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm >> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax protected class PositionCheckingMap<K> : IDictionary<K, WeightedSpanTerm>, ICollection<KeyValuePair<K, WeightedSpanTerm>>, IEnumerable<KeyValuePair<K, WeightedSpanTerm>>, IEnumerable Type Parameters Name Description K Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[K] Declaration public WeightedSpanTerm this[K key] { get; set; } Parameters Type Name Description K key Property Value Type Description WeightedSpanTerm | Improve this Doc View Source Keys Declaration public ICollection<K> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <K> | Improve this Doc View Source Values Declaration public ICollection<WeightedSpanTerm> Values { get; } Property Value Type Description System.Collections.Generic.ICollection < WeightedSpanTerm > Methods | Improve this Doc View Source Add(K, WeightedSpanTerm) Declaration public void Add(K key, WeightedSpanTerm value) Parameters Type Name Description K key WeightedSpanTerm value | Improve this Doc View Source Add(KeyValuePair<K, WeightedSpanTerm>) Declaration public void Add(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm > item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(KeyValuePair<K, WeightedSpanTerm>) Declaration public bool Contains(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm > item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(K) Declaration public bool ContainsKey(K key) Parameters Type Name Description K key Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<K, WeightedSpanTerm>[], Int32) Declaration public void CopyTo(KeyValuePair<K, WeightedSpanTerm>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm >[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<K, WeightedSpanTerm>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm >> | Improve this Doc View Source Remove(K) Declaration public bool Remove(K key) Parameters Type Name Description K key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<K, WeightedSpanTerm>) Declaration public bool Remove(KeyValuePair<K, WeightedSpanTerm> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <K, WeightedSpanTerm > item Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(K, out WeightedSpanTerm) Declaration public bool TryGetValue(K key, out WeightedSpanTerm value) Parameters Type Name Description K key WeightedSpanTerm value Returns Type Description System.Boolean Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.html",
    "title": "Class LruTaxonomyWriterCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LruTaxonomyWriterCache LRU ITaxonomyWriterCache - good choice for huge taxonomies. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LruTaxonomyWriterCache Implements ITaxonomyWriterCache System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class LruTaxonomyWriterCache : ITaxonomyWriterCache, IDisposable Constructors | Improve this Doc View Source LruTaxonomyWriterCache(Int32) Creates this with LRU_HASHED method. Declaration public LruTaxonomyWriterCache(int cacheSize) Parameters Type Name Description System.Int32 cacheSize | Improve this Doc View Source LruTaxonomyWriterCache(Int32, LruTaxonomyWriterCache.LRUType) Creates this with the specified method. Declaration public LruTaxonomyWriterCache(int cacheSize, LruTaxonomyWriterCache.LRUType lruType) Parameters Type Name Description System.Int32 cacheSize LruTaxonomyWriterCache.LRUType lruType Properties | Improve this Doc View Source IsFull Declaration public virtual bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source Get(FacetLabel) Declaration public virtual int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Declaration public virtual bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean Implements ITaxonomyWriterCache System.IDisposable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameHashInt32CacheLRU.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.NameHashInt32CacheLRU.html",
    "title": "Class NameHashInt32CacheLRU | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NameHashInt32CacheLRU An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. It uses as key, hash of the path instead of the path. This way the cache takes less RAM, but correctness depends on assuming no collisions. NOTE: this was NameHashIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NameInt32CacheLRU NameHashInt32CacheLRU Inherited Members NameInt32CacheLRU.Limit NameInt32CacheLRU.Count System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class NameHashInt32CacheLRU : NameInt32CacheLRU"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternReplaceFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternReplaceFilterFactory.html",
    "title": "Class PatternReplaceFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternReplaceFilterFactory Factory for PatternReplaceFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternReplaceFilterFactory\" pattern=\"([^a-z])\" replacement=\"\" replace=\"all\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PatternReplaceFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternReplaceFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PatternReplaceFilterFactory(IDictionary<String, String>) Creates a new PatternReplaceFilterFactory Declaration public PatternReplaceFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PatternReplaceFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternTokenizer.html",
    "title": "Class PatternTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternTokenizer This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. Inheritance System.Object AttributeSource TokenStream Tokenizer PatternTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source PatternTokenizer(AttributeSource.AttributeFactory, TextReader, Regex, Int32) creates a new PatternTokenizer returning tokens from group (-1 for split functionality) Declaration public PatternTokenizer(AttributeSource.AttributeFactory factory, TextReader input, Regex pattern, int group) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Text.RegularExpressions.Regex pattern System.Int32 group | Improve this Doc View Source PatternTokenizer(TextReader, Regex, Int32) creates a new PatternTokenizer returning tokens from group (-1 for split functionality) Declaration public PatternTokenizer(TextReader input, Regex pattern, int group) Parameters Type Name Description System.IO.TextReader input System.Text.RegularExpressions.Regex pattern System.Int32 group Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable See Also System.Text.RegularExpressions.Regex"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternTokenizerFactory.html",
    "title": "Class PatternTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternTokenizerFactory Factory for PatternTokenizer . This tokenizer uses regex pattern matching to construct distinct tokens for the input stream. It takes two arguments: \"pattern\" and \"group\". \"pattern\" is the regular expression. \"group\" says which group to extract into tokens. group=-1 (the default) is equivalent to \"split\". In this case, the tokens will be equivalent to the output from (without empty tokens): System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Using group >= 0 selects the matching group as the token. For example, if you have: pattern = \\'([^\\']+)\\' group = 0 input = aaa 'bbb' 'ccc' the output will be two tokens: 'bbb' and 'ccc' (including the ' marks). With the same input but using group=1, the output would be: bbb and ccc (no ' marks) NOTE: This Tokenizer does not output tokens that are of zero length. <fieldType name=\"text_ptn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.PatternTokenizerFactory\" pattern=\"\\'([^\\']+)\\'\" group=\"1\"/> </analyzer> </fieldType> @since solr1.2 Inheritance System.Object AbstractAnalysisFactory TokenizerFactory PatternTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source PatternTokenizerFactory(IDictionary<String, String>) Creates a new PatternTokenizerFactory Declaration public PatternTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source GROUP Declaration public const string GROUP = \"group\" Field Value Type Description System.String | Improve this Doc View Source m_group Declaration protected readonly int m_group Field Value Type Description System.Int32 | Improve this Doc View Source m_pattern Declaration protected readonly Regex m_pattern Field Value Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source PATTERN Declaration public const string PATTERN = \"pattern\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Split the input using configured pattern Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) See Also PatternTokenizer"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeScheduler.html",
    "title": "Class MergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergeScheduler Expert: IndexWriter uses an instance implementing this interface to execute the merges selected by a MergePolicy . The default MergeScheduler is . Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any IndexWriter instance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergeScheduler NoMergeScheduler SerialMergeScheduler TaskMergeScheduler Implements IMergeScheduler System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class MergeScheduler : IMergeScheduler, IDisposable Constructors | Improve this Doc View Source MergeScheduler() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected MergeScheduler() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Dispose this MergeScheduler. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Dispose this MergeScheduler. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Run the merges provided by NextMerge() . Declaration public abstract void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer the IndexWriter to obtain the merges from. MergeTrigger trigger the MergeTrigger that caused this merge to happen System.Boolean newMergesFound true iff any new merges were found by the caller; otherwise false Implements IMergeScheduler System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.Term.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Term.html",
    "title": "Class Term | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Term A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occurred in. Note that terms may represent more than words from text fields, but also things like dates, email addresses, urls, etc. Inheritance System.Object Term Implements System.IComparable < Term > System.IEquatable < Term > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class Term : IComparable<Term>, IEquatable<Term> Constructors | Improve this Doc View Source Term(String) Constructs a Term with the given field and empty text. this serves two purposes: 1) reuse of a Term with the same field. 2) pattern for a query. Declaration public Term(string fld) Parameters Type Name Description System.String fld field's name | Improve this Doc View Source Term(String, BytesRef) Constructs a Term with the given field and bytes. Note that a null field or null bytes value results in undefined behavior for most Lucene APIs that accept a Term parameter. WARNING: the provided BytesRef is not copied, but used directly. Therefore the bytes should not be modified after construction, for example, you should clone a copy by DeepCopyOf(BytesRef) rather than pass reused bytes from a TermsEnum . Declaration public Term(string fld, BytesRef bytes) Parameters Type Name Description System.String fld BytesRef bytes | Improve this Doc View Source Term(String, String) Constructs a Term with the given field and text. Note that a null field or null text value results in undefined behavior for most Lucene APIs that accept a Term parameter. Declaration public Term(string fld, string text) Parameters Type Name Description System.String fld System.String text Properties | Improve this Doc View Source Bytes Returns the bytes of this term. Declaration public BytesRef Bytes { get; } Property Value Type Description BytesRef | Improve this Doc View Source Field Returns the field of this term. The field indicates the part of a document which this term came from. Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(Term) Compares two terms, returning a negative integer if this term belongs before the argument, zero if this term is equal to the argument, and a positive integer if this term belongs after the argument. The ordering of terms is first by field, then by text. Declaration public int CompareTo(Term other) Parameters Type Name Description Term other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Term) Declaration public bool Equals(Term other) Parameters Type Name Description Term other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Text() Returns the text of this term. In the case of words, this is simply the text of the word. In the case of dates and other types, this is an encoding of the object as a string. Declaration public string Text() Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(BytesRef) Returns human-readable form of the term text. If the term is not unicode, the raw bytes will be printed instead. Declaration public static string ToString(BytesRef termText) Parameters Type Name Description BytesRef termText Returns Type Description System.String Implements System.IComparable<T> System.IEquatable<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.IMaxNonCompetitiveBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IMaxNonCompetitiveBoostAttribute.html",
    "title": "Interface IMaxNonCompetitiveBoostAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMaxNonCompetitiveBoostAttribute Add this IAttribute to a fresh AttributeSource before calling GetTermsEnum(Terms, AttributeSource) . FuzzyQuery is using this to control its internal behaviour to only return competitive terms. Please note: this attribute is intended to be added by the MultiTermQuery.RewriteMethod to an empty AttributeSource that is shared for all segments during query rewrite. This attribute source is passed to all segment enums on GetTermsEnum(Terms, AttributeSource) . TopTermsRewrite<Q> uses this attribute to inform all enums about the current boost, that is not competitive. This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IMaxNonCompetitiveBoostAttribute : IAttribute Properties | Improve this Doc View Source CompetitiveTerm This is the term or null of the term that triggered the boost change. Declaration BytesRef CompetitiveTerm { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source MaxNonCompetitiveBoost This is the maximum boost that would not be competitive. Declaration float MaxNonCompetitiveBoost { get; set; } Property Value Type Description System.Single Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.ByteArrayOutputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.ByteArrayOutputStream.html",
    "title": "Class ByteArrayOutputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteArrayOutputStream Inheritance System.Object System.IO.Stream System.IO.MemoryStream ByteArrayOutputStream Implements System.IDisposable Inherited Members System.IO.MemoryStream.CopyToAsync(System.IO.Stream, System.Int32, System.Threading.CancellationToken) System.IO.MemoryStream.Dispose(System.Boolean) System.IO.MemoryStream.Flush() System.IO.MemoryStream.FlushAsync(System.Threading.CancellationToken) System.IO.MemoryStream.Read(System.Byte[], System.Int32, System.Int32) System.IO.MemoryStream.ReadAsync(System.Byte[], System.Int32, System.Int32, System.Threading.CancellationToken) System.IO.MemoryStream.ReadByte() System.IO.MemoryStream.Seek(System.Int64, System.IO.SeekOrigin) System.IO.MemoryStream.SetLength(System.Int64) System.IO.MemoryStream.ToArray() System.IO.MemoryStream.TryGetBuffer(System.ArraySegment<System.Byte>) System.IO.MemoryStream.Write(System.Byte[], System.Int32, System.Int32) System.IO.MemoryStream.WriteAsync(System.Byte[], System.Int32, System.Int32, System.Threading.CancellationToken) System.IO.MemoryStream.WriteByte(System.Byte) System.IO.MemoryStream.WriteTo(System.IO.Stream) System.IO.MemoryStream.CanRead System.IO.MemoryStream.CanSeek System.IO.MemoryStream.CanWrite System.IO.MemoryStream.Capacity System.IO.MemoryStream.Length System.IO.MemoryStream.Position System.IO.Stream.Null System.IO.Stream.CopyTo(System.IO.Stream) System.IO.Stream.CopyTo(System.IO.Stream, System.Int32) System.IO.Stream.CopyToAsync(System.IO.Stream) System.IO.Stream.CopyToAsync(System.IO.Stream, System.Int32) System.IO.Stream.Dispose() System.IO.Stream.FlushAsync() System.IO.Stream.ReadAsync(System.Byte[], System.Int32, System.Int32) System.IO.Stream.WriteAsync(System.Byte[], System.Int32, System.Int32) System.IO.Stream.CanTimeout System.IO.Stream.ReadTimeout System.IO.Stream.WriteTimeout System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class ByteArrayOutputStream : MemoryStream, IDisposable Constructors | Improve this Doc View Source ByteArrayOutputStream() Declaration public ByteArrayOutputStream() | Improve this Doc View Source ByteArrayOutputStream(Int32) Declaration public ByteArrayOutputStream(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object) StreamExtensions.Write(Stream, Char[]) StreamExtensions.ReadChars(Stream, Int32) StreamExtensions.Write(Stream, Int32) StreamExtensions.ReadInt32(Stream) StreamExtensions.Write(Stream, Int64) StreamExtensions.ReadInt64(Stream)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.ByteBuffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.ByteBuffer.html",
    "title": "Class ByteBuffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBuffer A buffer for bytes. A byte buffer can be created in either one of the following ways: Allocate(Int32) a new byte array and create a buffer based on it AllocateDirect(Int32) a memory block and create a direct buffer based on it Wrap(Byte[]) an existing byte array to create a new buffer Inheritance System.Object Buffer ByteBuffer Implements System.IComparable < ByteBuffer > Inherited Members Buffer.Capacity Buffer.Clear() Buffer.Flip() Buffer.HasRemaining Buffer.IsReadOnly Buffer.Limit Buffer.SetLimit(Int32) Buffer.Mark() Buffer.Position Buffer.SetPosition(Int32) Buffer.Remaining Buffer.Reset() Buffer.Rewind() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public abstract class ByteBuffer : Buffer, IComparable<ByteBuffer> Properties | Improve this Doc View Source Array Returns the byte array which this buffer is based on, if there is one. Declaration public byte[] Array { get; } Property Value Type Description System.Byte [] the byte array which this buffer is based on. Exceptions Type Condition ReadOnlyBufferException if this buffer is based on a read-only array. System.InvalidOperationException if this buffer is not based on an array. | Improve this Doc View Source ArrayOffset Returns the offset of the byte array which this buffer is based on, if there is one. The offset is the index of the array which corresponds to the zero position of the buffer. Declaration public int ArrayOffset { get; } Property Value Type Description System.Int32 Exceptions Type Condition ReadOnlyBufferException if this buffer is based on a read-only array. System.InvalidOperationException if this buffer is not based on an array. | Improve this Doc View Source HasArray Indicates whether this buffer is based on a byte array and provides read/write access. Declaration public bool HasArray { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsDirect Indicates whether this buffer is direct. Declaration public abstract bool IsDirect { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Order Returns the byte order used by this buffer when converting bytes from/to other primitive types. The default byte order of byte buffer is always BIG_ENDIAN . Declaration public ByteOrder Order { get; set; } Property Value Type Description ByteOrder | Improve this Doc View Source ProtectedArray Child class implements this method to realize Array . Declaration protected abstract byte[] ProtectedArray { get; } Property Value Type Description System.Byte [] See Also Array | Improve this Doc View Source ProtectedArrayOffset Child class implements this method to realize ArrayOffset . Declaration protected abstract int ProtectedArrayOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ProtectedHasArray Child class implements this method to realize HasArray . Declaration protected abstract bool ProtectedHasArray { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Allocate(Int32) Creates a byte buffer based on a newly allocated byte array. Declaration public static ByteBuffer Allocate(int capacity) Parameters Type Name Description System.Int32 capacity the capacity of the new buffer Returns Type Description ByteBuffer The created byte buffer. Exceptions Type Condition System.ArgumentException If the capacity < 0 . | Improve this Doc View Source AllocateDirect(Int32) Creates a direct byte buffer based on a newly allocated memory block. (NOT IMPLEMENTED IN LUCENE.NET) Declaration public static ByteBuffer AllocateDirect(int capacity) Parameters Type Name Description System.Int32 capacity the capacity of the new buffer Returns Type Description ByteBuffer The new byte buffer Exceptions Type Condition System.ArgumentException If the capacity < 0 . | Improve this Doc View Source AsInt64Buffer() Returns a long buffer which is based on the remaining content of this byte buffer. The new buffer's position is zero, its limit and capacity is the number of remaining bytes divided by eight, and its mark is not set. The new buffer's read-only property and byte order are the same as this buffer's. The new buffer is direct if this byte buffer is direct. The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the other. The two buffer's position, limit and mark are independent. Declaration public abstract Int64Buffer AsInt64Buffer() Returns Type Description Int64Buffer a long buffer which is based on the content of this byte buffer. | Improve this Doc View Source AsReadOnlyBuffer() Returns a read-only buffer that shares its content with this buffer. The returned buffer is guaranteed to be a new instance, even if this buffer is read-only itself. The new buffer's position, limit, capacity and mark are the same as this buffer. The new buffer shares its content with this buffer, which means this buffer's change of content will be visible to the new buffer. The two buffer's position, limit and mark are independent. Declaration public abstract ByteBuffer AsReadOnlyBuffer() Returns Type Description ByteBuffer a read-only version of this buffer. | Improve this Doc View Source Compact() Compacts this byte buffer. The remaining bytes will be moved to the head of the buffer, starting from position zero. Then the position is set to Remaining ; the limit is set to capacity; the mark is cleared. Declaration public abstract ByteBuffer Compact() Returns Type Description ByteBuffer this buffer. Exceptions Type Condition ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source CompareTo(ByteBuffer) Compares the remaining bytes of this buffer to another byte buffer's remaining bytes. Declaration public virtual int CompareTo(ByteBuffer otherBuffer) Parameters Type Name Description ByteBuffer otherBuffer another byte buffer. Returns Type Description System.Int32 a negative value if this is less than other ; 0 if this equals to other ; a positive value if this is greater than other . | Improve this Doc View Source Duplicate() Returns a duplicated buffer that shares its content with this buffer. The duplicated buffer's position, limit, capacity and mark are the same as this buffer's. The duplicated buffer's read-only property and byte order are the same as this buffer's too. The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the other. The two buffer's position, limit and mark are independent. Declaration public abstract ByteBuffer Duplicate() Returns Type Description ByteBuffer a duplicated buffer that shares its content with this buffer. | Improve this Doc View Source Equals(Object) Checks whether this byte buffer is equal to another object. If other is not a byte buffer then false is returned. Two byte buffers are equal if and only if their remaining bytes are exactly the same. Position, limit, capacity and mark are not considered. Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other the object to compare with this byte buffer. Returns Type Description System.Boolean true if this byte buffer is equal to other , false otherwise. Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Get() Returns the byte at the current position and increases the position by 1. Declaration public abstract byte Get() Returns Type Description System.Byte the byte at the current position. Exceptions Type Condition BufferUnderflowException if the position is equal or greater than limit. | Improve this Doc View Source Get(Byte[]) Reads bytes from the current position into the specified byte array and increases the position by the number of bytes read. Calling this method has the same effect as Get(dest, 0, dest.Length) . Declaration public virtual ByteBuffer Get(byte[] dest) Parameters Type Name Description System.Byte [] dest the destination byte array. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferUnderflowException if dest.Length is greater than Remaining . | Improve this Doc View Source Get(Byte[], Int32, Int32) Reads bytes from the current position into the specified byte array, starting at the specified offset, and increases the position by the number of bytes read. Declaration public virtual ByteBuffer Get(byte[] dest, int off, int len) Parameters Type Name Description System.Byte [] dest the target byte array. System.Int32 off the offset of the byte array, must not be negative and not greater than dest.Length . System.Int32 len the number of bytes to read, must not be negative and not greater than dest.Length - off Returns Type Description ByteBuffer this buffer. Exceptions Type Condition System.IndexOutOfRangeException if either off or len is invalid. BufferUnderflowException if len is greater than Remaining . | Improve this Doc View Source Get(Int32) Returns the byte at the specified index and does not change the position. Declaration public abstract byte Get(int index) Parameters Type Name Description System.Int32 index the index, must not be negative and less than limit. Returns Type Description System.Byte the byte at the specified index. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. | Improve this Doc View Source GetChar() Returns the char at the current position and increases the position by 2. The 2 bytes starting at the current position are composed into a char according to the current byte order and returned. Declaration public abstract char GetChar() Returns Type Description System.Char the char at the current position. Exceptions Type Condition BufferUnderflowException if the position is greater than limit - 2 . | Improve this Doc View Source GetChar(Int32) Returns the char at the specified index. The 2 bytes starting from the specified index are composed into a char according to the current byte order and returned. The position is not changed. Declaration public abstract char GetChar(int index) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 2 . Returns Type Description System.Char the char at the specified index. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. | Improve this Doc View Source GetDouble() Returns the double at the current position and increases the position by 8. The 8 bytes starting from the current position are composed into a double according to the current byte order and returned. Declaration public abstract double GetDouble() Returns Type Description System.Double the double at the current position. Exceptions Type Condition BufferUnderflowException if the position is greater than limit - 8 . | Improve this Doc View Source GetDouble(Int32) Returns the System.Double at the specified index. The 8 bytes starting at the specified index are composed into a System.Double according to the current byte order and returned. The position is not changed. Declaration public abstract double GetDouble(int index) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 8 . Returns Type Description System.Double the System.Double at the specified index. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. | Improve this Doc View Source GetHashCode() Calculates this buffer's hash code from the remaining chars. The position, limit, capacity and mark don't affect the hash code. Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code calculated from the remaining bytes. Overrides System.Object.GetHashCode() | Improve this Doc View Source GetInt16() Returns the System.Int16 at the current position and increases the position by 2. The 2 bytes starting at the current position are composed into a System.Int16 according to the current byte order and returned. NOTE: This was getShort() in the JDK Declaration public abstract short GetInt16() Returns Type Description System.Int16 the System.Int16 at the current position. Exceptions Type Condition BufferUnderflowException if the position is greater than limit - 2 . | Improve this Doc View Source GetInt16(Int32) Returns the System.Int16 at the specified index. The 2 bytes starting at the specified index are composed into a System.Int16 according to the current byte order and returned. The position is not changed. NOTE: This was getShort() in the JDK Declaration public abstract short GetInt16(int index) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 2 . Returns Type Description System.Int16 the System.Int16 at the specified index. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. | Improve this Doc View Source GetInt32() Returns the System.Int32 at the current position and increases the position by 4. The 4 bytes starting at the current position are composed into a System.Int32 according to the current byte order and returned. NOTE: This was getInt() in the JDK Declaration public abstract int GetInt32() Returns Type Description System.Int32 the System.Int32 at the current position. Exceptions Type Condition BufferUnderflowException if the position is greater than limit - 4 . | Improve this Doc View Source GetInt32(Int32) Returns the System.Int32 at the specified index. The 4 bytes starting at the specified index are composed into a System.Int32 according to the current byte order and returned. The position is not changed. NOTE: This was getInt() in the JDK Declaration public abstract int GetInt32(int index) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 4 . Returns Type Description System.Int32 the System.Int32 at the specified index. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. | Improve this Doc View Source GetInt64() Returns the System.Int64 at the current position and increases the position by 8. The 8 bytes starting at the current position are composed into a System.Int64 according to the current byte order and returned. NOTE: This was getLong() in the JDK Declaration public abstract long GetInt64() Returns Type Description System.Int64 the System.Int64 at the current position. Exceptions Type Condition BufferUnderflowException if the position is greater than limit - 8 . | Improve this Doc View Source GetInt64(Int32) Returns the System.Int64 at the specified index. The 8 bytes starting at the specified index are composed into a System.Int64 according to the current byte order and returned. The position is not changed. NOTE: This was getLong() in the JDK Declaration public abstract long GetInt64(int index) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 8 . Returns Type Description System.Int64 the System.Int64 at the specified index. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. | Improve this Doc View Source GetSingle() Returns the System.Single at the current position and increases the position by 4. The 4 bytes starting at the current position are composed into a System.Single according to the current byte order and returned. NOTE: This was getFloat() in the JDK Declaration public abstract float GetSingle() Returns Type Description System.Single the System.Single at the current position. Exceptions Type Condition BufferUnderflowException if the position is greater than limit - 4 . | Improve this Doc View Source GetSingle(Int32) Returns the System.Single at the specified index. The 4 bytes starting at the specified index are composed into a System.Single according to the current byte order and returned. The position is not changed. NOTE: This was getFloat() in the JDK Declaration public abstract float GetSingle(int index) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 4 . Returns Type Description System.Single the System.Single at the specified index. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. | Improve this Doc View Source Put(ByteBuffer) Writes all the remaining bytes of the src byte buffer to this buffer's current position, and increases both buffers' position by the number of bytes copied. Declaration public virtual ByteBuffer Put(ByteBuffer src) Parameters Type Name Description ByteBuffer src the source byte buffer. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if src.Remaining is greater than this buffer's Remaining . System.ArgumentException if src is this buffer. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source Put(Byte) Writes the given byte to the current position and increases the position by 1. Declaration public abstract ByteBuffer Put(byte b) Parameters Type Name Description System.Byte b the byte to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if position is equal or greater than limit. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source Put(Byte[]) Writes bytes in the given byte array to the current position and increases the position by the number of bytes written. Calling this method has the same effect as Put(src, 0, src.Length) . Declaration public ByteBuffer Put(byte[] src) Parameters Type Name Description System.Byte [] src the source byte array. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if Remaining is less than src.Length . ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source Put(Byte[], Int32, Int32) Writes bytes in the given byte array, starting from the specified offset, to the current position and increases the position by the number of bytes written. Declaration public virtual ByteBuffer Put(byte[] src, int off, int len) Parameters Type Name Description System.Byte [] src the source byte array. System.Int32 off the offset of byte array, must not be negative and not greater than src.Length . System.Int32 len the number of bytes to write, must not be negative and not greater than src.Length - off . Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if Remaining is less than len . System.IndexOutOfRangeException if either off or len is invalid. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source Put(Int32, Byte) Write a System.Byte to the specified index of this buffer without changing the position. Declaration public abstract ByteBuffer Put(int index, byte b) Parameters Type Name Description System.Int32 index the index, must not be negative and less than the limit. System.Byte b the System.Byte to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutChar(Char) Writes the given System.Char to the current position and increases the position by 2. The System.Char is converted to bytes using the current byte order. Declaration public abstract ByteBuffer PutChar(char value) Parameters Type Name Description System.Char value the System.Char to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if position is greater than limit - 2 . ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutChar(Int32, Char) Writes the given System.Char to the specified index of this buffer. The System.Char is converted to bytes using the current byte order. The position is not changed. Declaration public abstract ByteBuffer PutChar(int index, char value) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 2 . System.Char value the System.Char to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutDouble(Double) Writes the given System.Double to the current position and increases the position by 8. The System.Double is converted to bytes using the current byte order. Declaration public abstract ByteBuffer PutDouble(double value) Parameters Type Name Description System.Double value the System.Double to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if position is greater than limit - 8 . ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutDouble(Int32, Double) Writes the given System.Double to the specified index of this buffer. The System.Double is converted to bytes using the current byte order. The position is not changed. Declaration public abstract ByteBuffer PutDouble(int index, double value) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 8 . System.Double value the System.Double to write. Returns Type Description ByteBuffer Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutInt16(Int16) Writes the given System.Int16 to the current position and increases the position by 2. The System.Int16 is converted to bytes using the current byte order. NOTE: This was putShort() in the JDK Declaration public abstract ByteBuffer PutInt16(short value) Parameters Type Name Description System.Int16 value the System.Int16 to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if position is greater than limit - 2 . ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutInt16(Int32, Int16) Writes the given System.Int16 to the specified index of this buffer. The System.Int16 is converted to bytes using the current byte order. The position is not changed. NOTE: This was putShort() in the JDK Declaration public abstract ByteBuffer PutInt16(int index, short value) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 2 . System.Int16 value the System.Int16 to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutInt32(Int32) Writes the given System.Int32 to the current position and increases the position by 4. The System.Int32 is converted to bytes using the current byte order. NOTE: This was putInt() in the JDK Declaration public abstract ByteBuffer PutInt32(int value) Parameters Type Name Description System.Int32 value the System.Int32 to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if position is greater than limit - 4 . ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutInt32(Int32, Int32) Writes the given System.Int32 to the specified index of this buffer. The System.Int32 is converted to bytes using the current byte order. The position is not changed. NOTE: This was putInt() in the JDK Declaration public abstract ByteBuffer PutInt32(int index, int value) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 4 . System.Int32 value the System.Int32 to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutInt64(Int32, Int64) Writes the given System.Int64 to the specified index of this buffer. The System.Int64 is converted to bytes using the current byte order. The position is not changed. NOTE: This was putLong() in the JDK Declaration public abstract ByteBuffer PutInt64(int index, long value) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 8 . System.Int64 value the System.Int64 to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutInt64(Int64) Writes the given System.Int64 to the current position and increases the position by 8. The System.Int64 is converted to bytes using the current byte order. NOTE: This was putLong() in the JDK Declaration public abstract ByteBuffer PutInt64(long value) Parameters Type Name Description System.Int64 value the System.Int64 to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if position is greater than limit - 8 . ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutSingle(Int32, Single) Writes the given System.Single to the specified index of this buffer. The System.Single is converted to bytes using the current byte order. The position is not changed. NOTE: This was putSingle() in the JDK Declaration public abstract ByteBuffer PutSingle(int index, float value) Parameters Type Name Description System.Int32 index the index, must not be negative and equal or less than limit - 4 . System.Single value the System.Single to write. Returns Type Description ByteBuffer Exceptions Type Condition System.IndexOutOfRangeException if index is invalid. ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source PutSingle(Single) Writes the given System.Single to the current position and increases the position by 4. The System.Single is converted to bytes using the current byte order. NOTE: This was putSingle() in the JDK Declaration public abstract ByteBuffer PutSingle(float value) Parameters Type Name Description System.Single value the System.Single to write. Returns Type Description ByteBuffer this buffer. Exceptions Type Condition BufferOverflowException if position is greater than limit - 4 . ReadOnlyBufferException if no changes may be made to the contents of this buffer. | Improve this Doc View Source SetOrder(ByteOrder) Sets the byte order of this buffer. Declaration public ByteBuffer SetOrder(ByteOrder byteOrder) Parameters Type Name Description ByteOrder byteOrder the byte order to set. Returns Type Description ByteBuffer this buffer. | Improve this Doc View Source Slice() Returns a sliced buffer that shares its content with this buffer. The sliced buffer's capacity will be this buffer's Remaining , and it's zero position will correspond to this buffer's current position. The new buffer's position will be 0, limit will be its capacity, and its mark is cleared. The new buffer's read-only property and byte order are the same as this buffer's. The new buffer shares its content with this buffer, which means either buffer's change of content will be visible to the other. The two buffer's position, limit and mark are independent. Declaration public abstract ByteBuffer Slice() Returns Type Description ByteBuffer A sliced buffer that shares its content with this buffer. | Improve this Doc View Source ToString() Returns a string representing the state of this byte buffer. Declaration public override string ToString() Returns Type Description System.String A string representing the state of this byte buffer. Overrides System.Object.ToString() | Improve this Doc View Source Wrap(Byte[]) Creates a new byte buffer by wrapping the given byte array. Calling this method has the same effect as Wrap(array, 0, array.Length) . Declaration public static ByteBuffer Wrap(byte[] array) Parameters Type Name Description System.Byte [] array The byte array which the new buffer will be based on Returns Type Description ByteBuffer The new byte buffer | Improve this Doc View Source Wrap(Byte[], Int32, Int32) Creates a new byte buffer by wrapping the given byte array. The new buffer's position will be start , limit will be start + len , capacity will be the length of the array. Declaration public static ByteBuffer Wrap(byte[] array, int start, int length) Parameters Type Name Description System.Byte [] array The byte array which the new buffer will be based on. System.Int32 start The start index, must not be negative and not greater than array.Length . System.Int32 length The length, must not be negative and not greater than array.Length - start . Returns Type Description ByteBuffer The new byte buffer Exceptions Type Condition System.IndexOutOfRangeException if either start or length are invalid. Implements System.IComparable<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianAnalyzer.html",
    "title": "Class PersianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianAnalyzer Analyzer for Persian. This Analyzer uses PersianCharFilter which implies tokenizing around zero-width non-joiner in addition to whitespace. Some persian-specific variant forms (such as farsi yeh and keheh) are standardized. \"Stemming\" is accomplished via stopwords. Inheritance System.Object Analyzer StopwordAnalyzerBase PersianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PersianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source PersianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PersianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source PersianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public PersianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Persian stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html . The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String | Improve this Doc View Source STOPWORDS_COMMENT The comment character in the stopwords file. All lines prefixed with this will be ignored Declaration public const string STOPWORDS_COMMENT = \"#\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , ArabicNormalizationFilter , PersianNormalizationFilter and Persian Stop words Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source InitReader(String, TextReader) Wraps the System.IO.TextReader with PersianCharFilter Declaration protected override TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description System.IO.TextReader Overrides Analyzer.InitReader(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseTokenizerFactory.html",
    "title": "Class JapaneseTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseTokenizerFactory Factory for JapaneseTokenizer . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\" mode=\"NORMAL\" userDictionary=\"user.txt\" userDictionaryEncoding=\"UTF-8\" discardPunctuation=\"true\" /> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory JapaneseTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseTokenizerFactory : TokenizerFactory, IResourceLoaderAware Constructors | Improve this Doc View Source JapaneseTokenizerFactory(IDictionary<String, String>) Creates a new JapaneseTokenizerFactory . Declaration public JapaneseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.SingleEncoder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.SingleEncoder.html",
    "title": "Class SingleEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleEncoder Encode a character array System.Single as a BytesRef . NOTE: This was FloatEncoder in Lucene Inheritance System.Object AbstractEncoder SingleEncoder Implements IPayloadEncoder Inherited Members AbstractEncoder.Encode(Char[]) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SingleEncoder : AbstractEncoder, IPayloadEncoder Methods | Improve this Doc View Source Encode(Char[], Int32, Int32) Declaration public override BytesRef Encode(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length Returns Type Description BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder See Also EncodeSingle(Single, Byte[], Int32)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilter.html",
    "title": "Class TokenOffsetPayloadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenOffsetPayloadTokenFilter Adds the StartOffset and EndOffset First 4 bytes are the start Inheritance System.Object AttributeSource TokenStream TokenFilter TokenOffsetPayloadTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenOffsetPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TokenOffsetPayloadTokenFilter(TokenStream) Declaration public TokenOffsetPayloadTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilterFactory.html",
    "title": "Class TokenOffsetPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenOffsetPayloadTokenFilterFactory Factory for TokenOffsetPayloadTokenFilter . <fieldType name=\"text_tokenoffset\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TokenOffsetPayloadTokenFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TokenOffsetPayloadTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenOffsetPayloadTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source TokenOffsetPayloadTokenFilterFactory(IDictionary<String, String>) Creates a new TokenOffsetPayloadTokenFilterFactory Declaration public TokenOffsetPayloadTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts.html",
    "title": "Class FastTaxonomyFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastTaxonomyFacetCounts Computes facets counts, assuming the default encoding into DocValues was used. @lucene.experimental Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets FastTaxonomyFacetCounts Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class FastTaxonomyFacetCounts : Int32TaxonomyFacets Constructors | Improve this Doc View Source FastTaxonomyFacetCounts(TaxonomyReader, FacetsConfig, FacetsCollector) Create FastTaxonomyFacetCounts , which also counts all facet labels. Declaration public FastTaxonomyFacetCounts(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source FastTaxonomyFacetCounts(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create FastTaxonomyFacetCounts , using the specified indexFieldName for ordinals. Use this if you had set SetIndexFieldName(String, String) to change the index field name for certain dimensions. Declaration public FastTaxonomyFacetCounts(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField.html",
    "title": "Class Int32AssociationFacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32AssociationFacetField Add an instance of this to your Document to add a facet label associated with an System.Int32 . Use TaxonomyFacetSumInt32Associations to aggregate int values per facet label at search time. NOTE: This was IntAssociationFacetField in Lucene @lucene.experimental Inheritance System.Object Field AssociationFacetField Int32AssociationFacetField Implements IIndexableField Inherited Members AssociationFacetField.TYPE AssociationFacetField.Dim AssociationFacetField.Path AssociationFacetField.Assoc Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class Int32AssociationFacetField : AssociationFacetField, IIndexableField Constructors | Improve this Doc View Source Int32AssociationFacetField(Int32, String, String[]) Creates this from dim and path and an int association Declaration public Int32AssociationFacetField(int assoc, string dim, params string[] path) Parameters Type Name Description System.Int32 assoc System.String dim System.String [] path Methods | Improve this Doc View Source BytesRefToInt32(BytesRef) Decodes a previously encoded System.Int32 . NOTE: This was bytesRefToInt() in Lucene Declaration public static int BytesRefToInt32(BytesRef b) Parameters Type Name Description BytesRef b Returns Type Description System.Int32 | Improve this Doc View Source Int32ToBytesRef(Int32) Encodes an System.Int32 as a 4-byte BytesRef , big-endian. NOTE: This was intToBytesRef() in Lucene Declaration public static BytesRef Int32ToBytesRef(int v) Parameters Type Name Description System.Int32 v Returns Type Description BytesRef | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AssociationFacetField.ToString() Implements IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.html",
    "title": "Class Int32TaxonomyFacets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32TaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords int[] . NOTE: This was IntTaxonomyFacets in Lucene Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets FastTaxonomyFacetCounts TaxonomyFacetCounts TaxonomyFacetSumInt32Associations Inherited Members TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class Int32TaxonomyFacets : TaxonomyFacets Constructors | Improve this Doc View Source Int32TaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected Int32TaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_values Per-ordinal value. Declaration protected readonly int[] m_values Field Value Type Description System.Int32 [] Methods | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[]) | Improve this Doc View Source Rollup() Rolls up any single-valued hierarchical dimensions. Declaration protected virtual void Rollup()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ITaxonomyWriter.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ITaxonomyWriter.html",
    "title": "Interface ITaxonomyWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITaxonomyWriter ITaxonomyWriter is the interface which the faceted-search library uses to dynamically build the taxonomy at indexing time. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers and a single writer to be active concurrently. Readers follow so-called \"point in time\" semantics, i.e., a reader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called. Faceted search keeps two indices - namely Lucene's main index, and this taxonomy index. When one or more readers are active concurrently with the writer, care must be taken to avoid an inconsistency between the state of these two indices: When writing to the indices, the taxonomy must always be committed to disk before the main index, because the main index refers to categories listed in the taxonomy. Such control can best be achieved by turning off the main index's \"autocommit\" feature, and explicitly calling Commit() for both indices (first for the taxonomy, then for the main index). In old versions of Lucene (2.2 or earlier), when autocommit could not be turned off, a more complicated solution needs to be used. E.g., use some sort of (possibly inter-process) locking to ensure that a reader is being opened only right after both indices have been flushed (and before anything else is written to them). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inherited Members System.IDisposable.Dispose() ITwoPhaseCommit.PrepareCommit() ITwoPhaseCommit.Commit() ITwoPhaseCommit.Rollback() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public interface ITaxonomyWriter : IDisposable, ITwoPhaseCommit Properties | Improve this Doc View Source CommitData Returns the commit user data map that was set on SetCommitData(IDictionary<String, String>) . Declaration IDictionary<string, string> CommitData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Count Count returns the number of categories in the taxonomy. Because categories are numbered consecutively starting with 0, it means the taxonomy contains ordinals 0 through Count -1. Note that the number returned by Count is often slightly higher than the number of categories inserted into the taxonomy; This is because when a category is added to the taxonomy, its ancestors are also added automatically (including the root, which always get ordinal 0). Declaration int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddCategory(FacetLabel) AddCategory(FacetLabel) adds a category with a given path name to the taxonomy, and returns its ordinal. If the category was already present in the taxonomy, its existing ordinal is returned. Before adding a category, AddCategory(FacetLabel) makes sure that all its ancestor categories exist in the taxonomy as well. As result, the ordinal of a category is guaranteed to be smaller then the ordinal of any of its descendants. Declaration int AddCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetParent(Int32) GetParent(Int32) returns the ordinal of the parent category of the category with the given ordinal. When a category is specified as a path name, finding the path of its parent is as trivial as dropping the last component of the path. GetParent(Int32) is functionally equivalent to calling GetPath(Int32) on the given ordinal, dropping the last component of the path, and then calling GetOrdinal(FacetLabel) to get an ordinal back. If the given ordinal is the ROOT_ORDINAL , an INVALID_ORDINAL is returned. If the given ordinal is a top-level category, the ROOT_ORDINAL is returned. If an invalid ordinal is given (negative or beyond the last available ordinal), an System.IndexOutOfRangeException is thrown. However, it is expected that GetParent(Int32) will only be called for ordinals which are already known to be in the taxonomy. TODO (Facet): instead of a GetParent(Int32) method, consider having a GetCategory(categorypath, prefixlen) which is similar to AddCategory(FacetLabel) except it doesn't add new categories; This method can be used to get the ordinals of all prefixes of the given category, and it can use exactly the same code and cache used by AddCategory(FacetLabel) so it means less code. Declaration int GetParent(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description System.Int32 | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Sets the commit user data map. That method is considered a transaction and will be committed ( Commit() ) even if no other changes were made to the writer instance. NOTE: the map is cloned internally, therefore altering the map's contents after calling this method has no effect. Declaration void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > commitUserData"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ScaleSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ScaleSingleFunction.html",
    "title": "Class ScaleSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScaleSingleFunction Scales values to be between min and max . This implementation currently traverses all of the source values to obtain their min and max. This implementation currently cannot distinguish when documents have been deleted or documents that have no value, and 0.0 values will be used for these cases. This means that if values are normally all greater than 0.0, one can still end up with 0.0 as the min value to map from. In these cases, an appropriate map() function could be used as a workaround to change 0.0 to a value in the real range. NOTE: This was ScaleFloatFunction in Lucene Inheritance System.Object ValueSource ScaleSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ScaleSingleFunction : ValueSource Constructors | Improve this Doc View Source ScaleSingleFunction(ValueSource, Single, Single) Declaration public ScaleSingleFunction(ValueSource source, float min, float max) Parameters Type Name Description ValueSource source System.Single min System.Single max Fields | Improve this Doc View Source m_max Declaration protected readonly float m_max Field Value Type Description System.Single | Improve this Doc View Source m_min Declaration protected readonly float m_min Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleBoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleBoolFunction.html",
    "title": "Class SimpleBoolFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleBoolFunction BoolFunction implementation which applies an extendible System.Boolean function to the values of a single wrapped ValueSource . Functions this can be used for include whether a field has a value or not, or inverting the System.Boolean value of the wrapped ValueSource . Inheritance System.Object ValueSource BoolFunction SimpleBoolFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SimpleBoolFunction : BoolFunction Constructors | Improve this Doc View Source SimpleBoolFunction(ValueSource) Declaration public SimpleBoolFunction(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues) Declaration protected abstract bool Func(int doc, FunctionValues vals) Parameters Type Name Description System.Int32 doc FunctionValues vals Returns Type Description System.Boolean | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SimpleSingleFunction.html",
    "title": "Class SimpleSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleSingleFunction A simple System.Single function with a single argument NOTE: This was SimpleFloatFunction in Lucene Inheritance System.Object ValueSource SingularFunction SimpleSingleFunction Inherited Members SingularFunction.m_source SingularFunction.Name SingularFunction.GetDescription() SingularFunction.GetHashCode() SingularFunction.Equals(Object) SingularFunction.CreateWeight(IDictionary, IndexSearcher) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SimpleSingleFunction : SingularFunction Constructors | Improve this Doc View Source SimpleSingleFunction(ValueSource) Declaration public SimpleSingleFunction(ValueSource source) Parameters Type Name Description ValueSource source Methods | Improve this Doc View Source Func(Int32, FunctionValues) Declaration protected abstract float Func(int doc, FunctionValues vals) Parameters Type Name Description System.Int32 doc FunctionValues vals Returns Type Description System.Single | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingleFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingleFieldSource.html",
    "title": "Class SingleFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleFieldSource Obtains System.Single field values from GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was FloatFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource SingleFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SingleFieldSource : FieldCacheSource Constructors | Improve this Doc View Source SingleFieldSource(String) Declaration public SingleFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source SingleFieldSource(String, FieldCache.ISingleParser) Declaration public SingleFieldSource(string field, FieldCache.ISingleParser parser) Parameters Type Name Description System.String field FieldCache.ISingleParser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.ISingleParser m_parser Field Value Type Description FieldCache.ISingleParser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingularFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SingularFunction.html",
    "title": "Class SingularFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingularFunction A function with a single (one) argument. NOTE: This was SingleFunction in Lucene, changed to avoid conusion with operations on the datatype System.Single . Inheritance System.Object ValueSource SingularFunction SimpleSingleFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class SingularFunction : ValueSource Constructors | Improve this Doc View Source SingularFunction(ValueSource) Declaration public SingularFunction(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumSingleFunction.html",
    "title": "Class SumSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SumSingleFunction SumSingleFunction returns the sum of its components. NOTE: This was SumFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction SumSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SumSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source SumSingleFunction(ValueSource[]) Declaration public SumSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumTotalTermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.SumTotalTermFreqValueSource.html",
    "title": "Class SumTotalTermFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SumTotalTermFreqValueSource SumTotalTermFreqValueSource returns the number of tokens. (sum of term freqs across all documents, across all terms). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource SumTotalTermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class SumTotalTermFreqValueSource : ValueSource Constructors | Improve this Doc View Source SumTotalTermFreqValueSource(String) Declaration public SumTotalTermFreqValueSource(string indexedField) Parameters Type Name Description System.String indexedField Fields | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TermFreqValueSource.html",
    "title": "Class TermFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermFreqValueSource Function that returns Freq for the supplied term in every document. If the term does not exist in the document, returns 0. If frequencies are omitted, returns 1. Inheritance System.Object ValueSource DocFreqValueSource TermFreqValueSource TFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TermFreqValueSource : DocFreqValueSource Constructors | Improve this Doc View Source TermFreqValueSource(String, String, String, BytesRef) Declaration public TermFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides DocFreqValueSource.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides DocFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CorruptIndexException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CorruptIndexException.html",
    "title": "Class CorruptIndexException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CorruptIndexException This exception is thrown when Lucene detects an inconsistency in the index. Inheritance System.Object System.Exception System.IO.IOException CorruptIndexException IndexFormatTooNewException IndexFormatTooOldException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CorruptIndexException : IOException Constructors | Improve this Doc View Source CorruptIndexException(String) Constructor. Declaration public CorruptIndexException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source CorruptIndexException(String, Exception) Constructor. Declaration public CorruptIndexException(string message, Exception ex) Parameters Type Name Description System.String message System.Exception ex Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharFilterFactory.html",
    "title": "Class CharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharFilterFactory Abstract parent class for analysis factories that create CharFilter instances. Inheritance System.Object AbstractAnalysisFactory CharFilterFactory HTMLStripCharFilterFactory MappingCharFilterFactory PersianCharFilterFactory JapaneseIterationMarkCharFilterFactory PatternReplaceCharFilterFactory Inherited Members AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CharFilterFactory : AbstractAnalysisFactory Constructors | Improve this Doc View Source CharFilterFactory(IDictionary<String, String>) Initialize this factory via a set of key-value pairs. Declaration protected CharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source AvailableCharFilters returns a list of all available charfilter names Declaration public static ICollection<string> AvailableCharFilters { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source Create(TextReader) Wraps the given System.IO.TextReader with a CharFilter . Declaration public abstract TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader | Improve this Doc View Source ForName(String, IDictionary<String, String>) looks up a charfilter by name from the host project's dependent assemblies Declaration public static CharFilterFactory ForName(string name, IDictionary<string, string> args) Parameters Type Name Description System.String name System.Collections.Generic.IDictionary < System.String , System.String > args Returns Type Description CharFilterFactory | Improve this Doc View Source LookupClass(String) looks up a charfilter class by name from the host project's dependent assemblies Declaration public static Type LookupClass(string name) Parameters Type Name Description System.String name Returns Type Description System.Type | Improve this Doc View Source ReloadCharFilters() Reloads the factory list. Changes to the factories are visible after the method ends, all iterators ( AvailableCharFilters ,...) stay consistent. NOTE: Only new factories are added, existing ones are never removed or replaced. This method is expensive and should only be called for discovery of new factories on the given classpath/classloader! Declaration public static void ReloadCharFilters()"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.BufferOverflowException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.BufferOverflowException.html",
    "title": "Class BufferOverflowException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferOverflowException Inheritance System.Object System.Exception BufferOverflowException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public sealed class BufferOverflowException : Exception Constructors | Improve this Doc View Source BufferOverflowException() Declaration public BufferOverflowException() Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.BufferUnderflowException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.BufferUnderflowException.html",
    "title": "Class BufferUnderflowException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferUnderflowException Inheritance System.Object System.Exception BufferUnderflowException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public sealed class BufferUnderflowException : Exception Constructors | Improve this Doc View Source BufferUnderflowException() Declaration public BufferUnderflowException() Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.SimpleStringInterner.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SimpleStringInterner.html",
    "title": "Class SimpleStringInterner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleStringInterner Simple lockless and memory barrier free String intern cache that is guaranteed to return the same String instance as String.intern() does. Inheritance System.Object StringInterner SimpleStringInterner Inherited Members StringInterner.Intern(Char[], Int32, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class SimpleStringInterner : StringInterner Constructors | Improve this Doc View Source SimpleStringInterner(Int32, Int32) Declaration public SimpleStringInterner(int tableSize, int maxChainLength) Parameters Type Name Description System.Int32 tableSize Size of the hash table, should be a power of two. System.Int32 maxChainLength Maximum length of each bucket, after which the oldest item inserted is dropped. Methods | Improve this Doc View Source Intern(String) Declaration public override string Intern(string s) Parameters Type Name Description System.String s Returns Type Description System.String Overrides StringInterner.Intern(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringBuilderCharSequenceWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringBuilderCharSequenceWrapper.html",
    "title": "Class StringBuilderCharSequenceWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringBuilderCharSequenceWrapper An adapter for System.Text.StringBuilder that implements ICharSequence Inheritance System.Object StringBuilderCharSequenceWrapper Implements ICharSequence Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class StringBuilderCharSequenceWrapper : ICharSequence Constructors | Improve this Doc View Source StringBuilderCharSequenceWrapper(StringBuilder) Declaration public StringBuilderCharSequenceWrapper(StringBuilder wrappedValue) Parameters Type Name Description System.Text.StringBuilder wrappedValue Properties | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements ICharSequence Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringCharSequenceWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringCharSequenceWrapper.html",
    "title": "Class StringCharSequenceWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringCharSequenceWrapper An adapter for System.String that implements ICharSequence Inheritance System.Object StringCharSequenceWrapper Implements ICharSequence Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class StringCharSequenceWrapper : ICharSequence Constructors | Improve this Doc View Source StringCharSequenceWrapper(String) Declaration public StringCharSequenceWrapper(string wrappedValue) Parameters Type Name Description System.String wrappedValue Fields | Improve this Doc View Source Empty Declaration public static readonly StringCharSequenceWrapper Empty Field Value Type Description StringCharSequenceWrapper Properties | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements ICharSequence Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.LimitedConcurrencyLevelTaskScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.LimitedConcurrencyLevelTaskScheduler.html",
    "title": "Class LimitedConcurrencyLevelTaskScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitedConcurrencyLevelTaskScheduler Provides a task scheduler that ensures a maximum concurrency level while running on top of the thread pool. Source: https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler(v=vs.110).aspx Inheritance System.Object System.Threading.Tasks.TaskScheduler LimitedConcurrencyLevelTaskScheduler Inherited Members System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext() System.Threading.Tasks.TaskScheduler.TryExecuteTask(System.Threading.Tasks.Task) System.Threading.Tasks.TaskScheduler.Current System.Threading.Tasks.TaskScheduler.Default System.Threading.Tasks.TaskScheduler.Id System.Threading.Tasks.TaskScheduler.UnobservedTaskException System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class LimitedConcurrencyLevelTaskScheduler : TaskScheduler Constructors | Improve this Doc View Source LimitedConcurrencyLevelTaskScheduler(Int32) Declaration public LimitedConcurrencyLevelTaskScheduler(int maxDegreeOfParallelism) Parameters Type Name Description System.Int32 maxDegreeOfParallelism Properties | Improve this Doc View Source MaximumConcurrencyLevel Declaration public override sealed int MaximumConcurrencyLevel { get; } Property Value Type Description System.Int32 Overrides System.Threading.Tasks.TaskScheduler.MaximumConcurrencyLevel Methods | Improve this Doc View Source GetScheduledTasks() Declaration protected override sealed IEnumerable<Task> GetScheduledTasks() Returns Type Description System.Collections.Generic.IEnumerable < System.Threading.Tasks.Task > Overrides System.Threading.Tasks.TaskScheduler.GetScheduledTasks() | Improve this Doc View Source QueueTask(Task) Declaration protected override sealed void QueueTask(Task task) Parameters Type Name Description System.Threading.Tasks.Task task Overrides System.Threading.Tasks.TaskScheduler.QueueTask(System.Threading.Tasks.Task) | Improve this Doc View Source TryDequeue(Task) Declaration protected override sealed bool TryDequeue(Task task) Parameters Type Name Description System.Threading.Tasks.Task task Returns Type Description System.Boolean Overrides System.Threading.Tasks.TaskScheduler.TryDequeue(System.Threading.Tasks.Task) | Improve this Doc View Source TryExecuteTaskInline(Task, Boolean) Declaration protected override sealed bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued) Parameters Type Name Description System.Threading.Tasks.Task task System.Boolean taskWasPreviouslyQueued Returns Type Description System.Boolean Overrides System.Threading.Tasks.TaskScheduler.TryExecuteTaskInline(System.Threading.Tasks.Task, System.Boolean) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseAnalyzer.html",
    "title": "Class ChineseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChineseAnalyzer An Analyzer that tokenizes text with ChineseTokenizer and filters with ChineseFilter Inheritance System.Object Analyzer ChineseAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardAnalyzer instead, which has the same functionality.\")] public sealed class ChineseAnalyzer : Analyzer, IDisposable Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a ChineseTokenizer filtered with ChineseFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseFilter.html",
    "title": "Class ChineseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChineseFilter A TokenFilter with a stop word table. Numeric tokens are removed. English tokens must be larger than 1 character. One Chinese character as one Chinese word. TO DO: Add Chinese stop words, such as \\ue400 Dictionary based Chinese word extraction Intelligent Chinese word extraction Inheritance System.Object AttributeSource TokenStream TokenFilter ChineseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StopFilter instead, which has the same functionality.\")] public sealed class ChineseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ChineseFilter(TokenStream) Declaration public ChineseFilter(TokenStream in) Parameters Type Name Description TokenStream in Fields | Improve this Doc View Source STOP_WORDS Declaration public static readonly string[] STOP_WORDS Field Value Type Description System.String [] Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseFilterFactory.html",
    "title": "Class ChineseFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChineseFilterFactory Factory for ChineseFilter Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ChineseFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use StopFilterFactory instead.\")] public class ChineseFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ChineseFilterFactory(IDictionary<String, String>) Creates a new ChineseFilterFactory Declaration public ChineseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.html",
    "title": "Class DirectoryTaxonomyReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryTaxonomyReader A TaxonomyReader which retrieves stored taxonomy information from a Directory . Reading from the on-disk index on every method call is too slow, so this implementation employs caching: Some methods cache recent requests and their results, while other methods prefetch all the data into memory and then provide answers directly from in-memory tables. See the documentation of individual methods for comments on their performance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TaxonomyReader DirectoryTaxonomyReader Implements System.IDisposable Inherited Members TaxonomyReader.ROOT_ORDINAL TaxonomyReader.INVALID_ORDINAL TaxonomyReader.OpenIfChanged<T>(T) TaxonomyReader.EnsureOpen() TaxonomyReader.Dispose() TaxonomyReader.Dispose(Boolean) TaxonomyReader.DecRef() TaxonomyReader.GetChildren(Int32) TaxonomyReader.GetOrdinal(String, String[]) TaxonomyReader.RefCount TaxonomyReader.IncRef() TaxonomyReader.TryIncRef() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public class DirectoryTaxonomyReader : TaxonomyReader, IDisposable Constructors | Improve this Doc View Source DirectoryTaxonomyReader(DirectoryTaxonomyWriter) Opens a DirectoryTaxonomyReader over the given DirectoryTaxonomyWriter (for NRT). Declaration public DirectoryTaxonomyReader(DirectoryTaxonomyWriter taxoWriter) Parameters Type Name Description DirectoryTaxonomyWriter taxoWriter The DirectoryTaxonomyWriter from which to obtain newly added categories, in real-time. | Improve this Doc View Source DirectoryTaxonomyReader(Directory) Open for reading a taxonomy stored in a given Directory . Declaration public DirectoryTaxonomyReader(Directory directory) Parameters Type Name Description Directory directory The Directory in which the taxonomy resides. Exceptions Type Condition CorruptIndexException if the Taxonomy is corrupt. System.IO.IOException if another error occurred. Properties | Improve this Doc View Source CommitUserData Declaration public override IDictionary<string, string> CommitUserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > Overrides TaxonomyReader.CommitUserData | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides TaxonomyReader.Count | Improve this Doc View Source ParallelTaxonomyArrays Declaration public override ParallelTaxonomyArrays ParallelTaxonomyArrays { get; } Property Value Type Description ParallelTaxonomyArrays Overrides TaxonomyReader.ParallelTaxonomyArrays Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides TaxonomyReader.DoClose() | Improve this Doc View Source DoOpenIfChanged() Implements the opening of a new DirectoryTaxonomyReader instance if the taxonomy has changed. NOTE: the returned DirectoryTaxonomyReader shares the ordinal and category caches with this reader. This is not expected to cause any issues, unless the two instances continue to live. The reader guarantees that the two instances cannot affect each other in terms of correctness of the caches, however if the size of the cache is changed through SetCacheSize(Int32) , it will affect both reader instances. Declaration protected override TaxonomyReader DoOpenIfChanged() Returns Type Description TaxonomyReader Overrides TaxonomyReader.DoOpenIfChanged() | Improve this Doc View Source GetOrdinal(FacetLabel) Declaration public override int GetOrdinal(FacetLabel cp) Parameters Type Name Description FacetLabel cp Returns Type Description System.Int32 Overrides TaxonomyReader.GetOrdinal(FacetLabel) | Improve this Doc View Source GetPath(Int32) Declaration public override FacetLabel GetPath(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description FacetLabel Overrides TaxonomyReader.GetPath(Int32) | Improve this Doc View Source OpenIndexReader(IndexWriter) Open the DirectoryReader from this IndexWriter . Declaration protected virtual DirectoryReader OpenIndexReader(IndexWriter writer) Parameters Type Name Description IndexWriter writer Returns Type Description DirectoryReader | Improve this Doc View Source OpenIndexReader(Directory) Open the DirectoryReader from this Directory . Declaration protected virtual DirectoryReader OpenIndexReader(Directory directory) Parameters Type Name Description Directory directory Returns Type Description DirectoryReader | Improve this Doc View Source SetCacheSize(Int32) SetCacheSize(Int32) controls the maximum allowed size of each of the caches used by GetPath(Int32) and GetOrdinal(FacetLabel) . Currently, if the given size is smaller than the current size of a cache, it will not shrink, and rather we be limited to its current size. Declaration public virtual void SetCacheSize(int size) Parameters Type Name Description System.Int32 size the new maximum cache size, in number of entries. | Improve this Doc View Source ToString(Int32) Returns ordinal -> label mapping, up to the provided max ordinal or number of ordinals, whichever is smaller. Declaration public virtual string ToString(int max) Parameters Type Name Description System.Int32 max Returns Type Description System.String Implements System.IDisposable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DiskOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DiskOrdinalMap.html",
    "title": "Class DirectoryTaxonomyWriter.DiskOrdinalMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter.DiskOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained on file system Inheritance System.Object DirectoryTaxonomyWriter.DiskOrdinalMap Implements DirectoryTaxonomyWriter.IOrdinalMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public sealed class DiskOrdinalMap : DirectoryTaxonomyWriter.IOrdinalMap Constructors | Improve this Doc View Source DiskOrdinalMap(String) Sole constructor. Declaration public DiskOrdinalMap(string tmpfile) Parameters Type Name Description System.String tmpfile Methods | Improve this Doc View Source AddDone() Declaration public void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Declaration public int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Declaration public void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize Implements DirectoryTaxonomyWriter.IOrdinalMap"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIne.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIne.html",
    "title": "Class BasicModelIne | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelIne Tf-idf model of randomness, based on a mixture of Poisson and inverse document frequency. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIne Inherited Members BasicModel.Explain(BasicStats, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIne : BasicModel Constructors | Improve this Doc View Source BasicModelIne() Sole constructor: parameter-free Declaration public BasicModelIne() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragListBuilder.html",
    "title": "Class SimpleFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFragListBuilder A simple implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder SimpleFragListBuilder Implements IFragListBuilder Inherited Members BaseFragListBuilder.MARGIN_DEFAULT BaseFragListBuilder.MIN_FRAG_CHAR_SIZE_FACTOR BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) BaseFragListBuilder.AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragListBuilder : BaseFragListBuilder, IFragListBuilder Constructors | Improve this Doc View Source SimpleFragListBuilder() Declaration public SimpleFragListBuilder() | Improve this Doc View Source SimpleFragListBuilder(Int32) Declaration public SimpleFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) CreateFieldFragList(FieldPhraseList, Int32) Declaration public override FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Overrides BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, Int32) Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SimpleFragmentsBuilder.html",
    "title": "Class SimpleFragmentsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFragmentsBuilder A simple implementation of FragmentsBuilder. Inheritance System.Object BaseFragmentsBuilder SimpleFragmentsBuilder Implements IFragmentsBuilder Inherited Members BaseFragmentsBuilder.m_preTags BaseFragmentsBuilder.m_postTags BaseFragmentsBuilder.COLORED_PRE_TAGS BaseFragmentsBuilder.COLORED_POST_TAGS BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) BaseFragmentsBuilder.CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) BaseFragmentsBuilder.CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) BaseFragmentsBuilder.GetFields(IndexReader, Int32, String) BaseFragmentsBuilder.MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) BaseFragmentsBuilder.GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) BaseFragmentsBuilder.GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) BaseFragmentsBuilder.DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) BaseFragmentsBuilder.MultiValuedSeparator BaseFragmentsBuilder.IsDiscreteMultiValueHighlighting BaseFragmentsBuilder.GetPreTag(Int32) BaseFragmentsBuilder.GetPostTag(Int32) BaseFragmentsBuilder.GetPreTag(String[], Int32) BaseFragmentsBuilder.GetPostTag(String[], Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragmentsBuilder : BaseFragmentsBuilder, IFragmentsBuilder Constructors | Improve this Doc View Source SimpleFragmentsBuilder() a constructor. Declaration public SimpleFragmentsBuilder() | Improve this Doc View Source SimpleFragmentsBuilder(IBoundaryScanner) Declaration public SimpleFragmentsBuilder(IBoundaryScanner bs) Parameters Type Name Description IBoundaryScanner bs | Improve this Doc View Source SimpleFragmentsBuilder(String[], String[]) a constructor. Declaration public SimpleFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags array of pre-tags for markup terms. System.String [] postTags array of post-tags for markup terms. | Improve this Doc View Source SimpleFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration public SimpleFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner bs) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner bs Methods | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) do nothing. return the source list. Declaration public override IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > src Returns Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > Overrides BaseFragmentsBuilder.GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SingleFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.SingleFragListBuilder.html",
    "title": "Class SingleFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleFragListBuilder An implementation class of IFragListBuilder that generates one FieldFragList.WeightedFragInfo object. Typical use case of this class is that you can get an entire field contents by using both of this class and SimpleFragmentsBuilder . FastVectorHighlighter h = new FastVectorHighlighter( true, true, new SingleFragListBuilder(), new SimpleFragmentsBuilder() ); Inheritance System.Object SingleFragListBuilder Implements IFragListBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SingleFragListBuilder : IFragListBuilder Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) Declaration public virtual FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFieldFragList.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFieldFragList.html",
    "title": "Class WeightedFieldFragList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedFieldFragList A weighted implementation of FieldFragList . Inheritance System.Object FieldFragList WeightedFieldFragList Inherited Members FieldFragList.FragInfos System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFieldFragList : FieldFragList Constructors | Improve this Doc View Source WeightedFieldFragList(Int32) a constructor. Declaration public WeightedFieldFragList(int fragCharSize) Parameters Type Name Description System.Int32 fragCharSize the length (number of chars) of a fragment Methods | Improve this Doc View Source Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>) . Declaration public override void Add(int startOffset, int endOffset, IList<FieldPhraseList.WeightedPhraseInfo> phraseInfoList) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo > phraseInfoList Overrides FieldFragList.Add(Int32, Int32, IList<FieldPhraseList.WeightedPhraseInfo>)"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.WeightedFragListBuilder.html",
    "title": "Class WeightedFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeightedFragListBuilder A weighted implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder WeightedFragListBuilder Implements IFragListBuilder Inherited Members BaseFragListBuilder.MARGIN_DEFAULT BaseFragListBuilder.MIN_FRAG_CHAR_SIZE_FACTOR BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) BaseFragListBuilder.AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedFragListBuilder : BaseFragListBuilder, IFragListBuilder Constructors | Improve this Doc View Source WeightedFragListBuilder() Declaration public WeightedFragListBuilder() | Improve this Doc View Source WeightedFragListBuilder(Int32) Declaration public WeightedFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Methods | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) CreateFieldFragList(FieldPhraseList, Int32) Declaration public override FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Overrides BaseFragListBuilder.CreateFieldFragList(FieldPhraseList, Int32) Implements IFragListBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldDateResolutionFCListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldDateResolutionFCListener.html",
    "title": "Class FieldDateResolutionFCListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldDateResolutionFCListener This listener listens for every field configuration request and assign a DATE_RESOLUTION to the equivalent FieldConfig based on a defined map: fieldName -> DateTools.Resolution stored in FIELD_DATE_RESOLUTION_MAP . Inheritance System.Object FieldDateResolutionFCListener Implements IFieldConfigListener Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldDateResolutionFCListener : IFieldConfigListener Constructors | Improve this Doc View Source FieldDateResolutionFCListener(QueryConfigHandler) Declaration public FieldDateResolutionFCListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also DATE_RESOLUTION FIELD_DATE_RESOLUTION_MAP FieldConfig IFieldConfigListener"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumberDateFormat.html",
    "title": "Class NumberDateFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumberDateFormat This NumberFormat parses System.Int64 into date strings and vice-versa. It uses the given dateFormat and System.Globalization.CultureInfo to parse and format dates, but before, it converts System.Int64 to System.DateTime objects or vice-versa. Note that the System.Int64 value the dates are parsed into and out of represent the number of milliseconds since January 1, 1970 0:00:00, also known as the \"epoch\". Inheritance System.Object NumberFormat NumberDateFormat Inherited Members NumberFormat.locale NumberFormat.GetNumberFormat() NumberFormat.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumberDateFormat : NumberFormat Constructors | Improve this Doc View Source NumberDateFormat(DateFormat, DateFormat, CultureInfo) Constructs a NumberDateFormat object using the given dateStyle , timeStyle , and locale . Declaration public NumberDateFormat(DateFormat dateStyle, DateFormat timeStyle, CultureInfo locale) Parameters Type Name Description DateFormat dateStyle DateFormat timeStyle System.Globalization.CultureInfo locale | Improve this Doc View Source NumberDateFormat(String, CultureInfo) Constructs a NumberDateFormat object using the given dateFormat and locale . Declaration public NumberDateFormat(string dateFormat, CultureInfo locale) Parameters Type Name Description System.String dateFormat Date format used to parse and format dates System.Globalization.CultureInfo locale Fields | Improve this Doc View Source EPOCH Declaration public const long EPOCH = 621355968000000000L Field Value Type Description System.Int64 Properties | Improve this Doc View Source TimeZone Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description System.TimeZoneInfo Methods | Improve this Doc View Source Format(Double) Declaration public override string Format(double number) Parameters Type Name Description System.Double number Returns Type Description System.String Overrides NumberFormat.Format(Double) | Improve this Doc View Source Format(Int64) Declaration public override string Format(long number) Parameters Type Name Description System.Int64 number Returns Type Description System.String Overrides NumberFormat.Format(Int64) | Improve this Doc View Source Format(Object) Declaration public override string Format(object number) Parameters Type Name Description System.Object number Returns Type Description System.String Overrides NumberFormat.Format(Object) | Improve this Doc View Source GetDateFormat() Returns the .NET date format that will be used to Format the date. Note that parsing the date uses System.DateTime.ParseExact(System.String,System.String,System.IFormatProvider) . Declaration public string GetDateFormat() Returns Type Description System.String | Improve this Doc View Source GetDateFormat(DateFormat, DateFormat, CultureInfo) Declaration public static string GetDateFormat(DateFormat dateStyle, DateFormat timeStyle, CultureInfo locale) Parameters Type Name Description DateFormat dateStyle DateFormat timeStyle System.Globalization.CultureInfo locale Returns Type Description System.String | Improve this Doc View Source Parse(String) Declaration public override object Parse(string source) Parameters Type Name Description System.String source Returns Type Description System.Object Overrides NumberFormat.Parse(String) | Improve this Doc View Source SetDateFormat(String) Declaration public void SetDateFormat(string dateFormat) Parameters Type Name Description System.String dateFormat"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericFieldConfigListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.NumericFieldConfigListener.html",
    "title": "Class NumericFieldConfigListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericFieldConfigListener This listener is used to listen to FieldConfig requests in QueryConfigHandler and add NUMERIC_CONFIG based on the NUMERIC_CONFIG_MAP set in the QueryConfigHandler . Inheritance System.Object NumericFieldConfigListener Implements IFieldConfigListener Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericFieldConfigListener : IFieldConfigListener Constructors | Improve this Doc View Source NumericFieldConfigListener(QueryConfigHandler) Constructs a NumericFieldConfigListener object using the given QueryConfigHandler . Declaration public NumericFieldConfigListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config the QueryConfigHandler it will listen too Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also NumericConfig QueryConfigHandler NUMERIC_CONFIG NUMERIC_CONFIG_MAP"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.StandardQueryConfigHandler.html",
    "title": "Class StandardQueryConfigHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardQueryConfigHandler This query configuration handler is used for almost every processor defined in the StandardQueryNodeProcessorPipeline processor pipeline. It holds configuration methods that reproduce the configuration methods that could be set on the old lucene 2.4 QueryParser class. Inheritance System.Object AbstractQueryConfig QueryConfigHandler StandardQueryConfigHandler Inherited Members QueryConfigHandler.GetFieldConfig(String) QueryConfigHandler.AddFieldConfigListener(IFieldConfigListener) AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryConfigHandler : QueryConfigHandler Constructors | Improve this Doc View Source StandardQueryConfigHandler() Declaration public StandardQueryConfigHandler() See Also StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode-1.html",
    "title": "Class AbstractRangeQueryNode<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractRangeQueryNode<T> This class should be extended by nodes intending to represent range queries. Inheritance System.Object QueryNode AbstractRangeQueryNode<T> NumericRangeQueryNode TermRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class AbstractRangeQueryNode<T> : QueryNode, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode where T : IFieldableNode Type Parameters Name Description T the type of the range query bounds (lower and upper) Constructors | Improve this Doc View Source AbstractRangeQueryNode() Constructs an AbstractRangeQueryNode<T> , it should be invoked only by its extenders. Declaration protected AbstractRangeQueryNode() Properties | Improve this Doc View Source Field Gets or Sets the field associated with this node. Declaration public virtual string Field { get; set; } Property Value Type Description System.String See Also IFieldableNode | Improve this Doc View Source IsLowerInclusive Gets whether the lower bound is inclusive or exclusive. Declaration public virtual bool IsLowerInclusive { get; } Property Value Type Description System.Boolean Remarks true if the lower bound is inclusive, otherwise, false | Improve this Doc View Source IsUpperInclusive Gets whether the upper bound is inclusive or exclusive. Declaration public virtual bool IsUpperInclusive { get; } Property Value Type Description System.Boolean Remarks true if the upper bound is inclusive, otherwise, false | Improve this Doc View Source LowerBound Gets the lower bound node. Declaration public virtual IFieldableNode LowerBound { get; } Property Value Type Description IFieldableNode | Improve this Doc View Source UpperBound Gets the upper bound node. Declaration public virtual IFieldableNode UpperBound { get; } Property Value Type Description IFieldableNode Methods | Improve this Doc View Source SetBounds(T, T, Boolean, Boolean) Sets the lower and upper bounds. Declaration public virtual void SetBounds(T lower, T upper, bool lowerInclusive, bool upperInclusive) Parameters Type Name Description T lower the lower bound, null if lower bound is open T upper the upper bound, null if upper bound is open System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false See Also LowerBound UpperBound IsLowerInclusive IsUpperInclusive | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.BooleanModifierNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.BooleanModifierNode.html",
    "title": "Class BooleanModifierNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanModifierNode A BooleanModifierNode has the same behaviour as ModifierQueryNode , it only indicates that this modifier was added by GroupQueryNodeProcessor and not by the user. Inheritance System.Object QueryNode ModifierQueryNode BooleanModifierNode Implements IQueryNode Inherited Members ModifierQueryNode.GetChild() ModifierQueryNode.Modifier ModifierQueryNode.ToString() ModifierQueryNode.ToQueryString(IEscapeQuerySyntax) ModifierQueryNode.CloneTree() ModifierQueryNode.SetChild(IQueryNode) QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanModifierNode : ModifierQueryNode, IQueryNode Constructors | Improve this Doc View Source BooleanModifierNode(IQueryNode, Modifier) Declaration public BooleanModifierNode(IQueryNode node, Modifier mod) Parameters Type Name Description IQueryNode node Modifier mod Implements IQueryNode See Also ModifierQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.IAbstractRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.IAbstractRangeQueryNode.html",
    "title": "Interface IAbstractRangeQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractRangeQueryNode LUCENENET specific interface used to identify an AbstractRangeQueryNode without referring to its generic closing type Inherited Members IRangeQueryNode<IFieldableNode>.LowerBound IRangeQueryNode<IFieldableNode>.UpperBound IRangeQueryNode.IsLowerInclusive IRangeQueryNode.IsUpperInclusive IFieldableNode.Field IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IAbstractRangeQueryNode : IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.MultiPhraseQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.MultiPhraseQueryNode.html",
    "title": "Class MultiPhraseQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiPhraseQueryNode A MultiPhraseQueryNode indicates that its children should be used to build a MultiPhraseQuery instead of PhraseQuery . Inheritance System.Object QueryNode MultiPhraseQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiPhraseQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source MultiPhraseQueryNode() Declaration public MultiPhraseQueryNode() Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode.html",
    "title": "Class NumericQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericQueryNode This query node represents a field query that holds a numeric value. It is similar to FieldQueryNode , however the Value returns an System.Object representing a .NET numeric type. Inheritance System.Object QueryNode NumericQueryNode Implements IFieldValuePairQueryNode < System.Object > IFieldableNode IValueQueryNode < System.Object > IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericQueryNode : QueryNode, IFieldValuePairQueryNode<object>, IFieldableNode, IValueQueryNode<object>, IQueryNode Constructors | Improve this Doc View Source NumericQueryNode(String, Object, NumberFormat) Creates a NumericQueryNode object using the given field, System.Object (representing a .NET numeric type) value and NumberFormat used to convert the value to System.String . Declaration public NumericQueryNode(string field, object value, NumberFormat numberFormat) Parameters Type Name Description System.String field the field associated with this query node System.Object value the value hold by this node NumberFormat numberFormat the NumberFormat used to convert the value to System.String Properties | Improve this Doc View Source Field Gets or Sets the field associated with this node. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source NumberFormat Gets or Sets the NumberFormat used to convert the value to System.String . Declaration public virtual NumberFormat NumberFormat { get; set; } Property Value Type Description NumberFormat | Improve this Doc View Source Value Gets or Sets the numeric value as System.Object representing a .NET numeric type. Declaration public virtual object Value { get; set; } Property Value Type Description System.Object Methods | Improve this Doc View Source GetTermEscaped(IEscapeQuerySyntax) This method is used to get the value converted to System.String and escaped using the given IEscapeQuerySyntax . Declaration protected string GetTermEscaped(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper The IEscapeQuerySyntax used to escape the value System.String Returns Type Description System.String The value converted to System.String and escaped | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode See Also NumericConfig"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericRangeQueryNode.html",
    "title": "Class NumericRangeQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQueryNode This query node represents a range query composed by NumericQueryNode bounds, which means the bound values are System.Object s representing a .NET numeric type. Inheritance System.Object QueryNode AbstractRangeQueryNode < NumericQueryNode > NumericRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members AbstractRangeQueryNode<NumericQueryNode>.Field AbstractRangeQueryNode<NumericQueryNode>.LowerBound AbstractRangeQueryNode<NumericQueryNode>.UpperBound AbstractRangeQueryNode<NumericQueryNode>.IsLowerInclusive AbstractRangeQueryNode<NumericQueryNode>.IsUpperInclusive AbstractRangeQueryNode<NumericQueryNode>.SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean) AbstractRangeQueryNode<NumericQueryNode>.ToQueryString(IEscapeQuerySyntax) QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNode : AbstractRangeQueryNode<NumericQueryNode>, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source NumericRangeQueryNode(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Constructs a NumericRangeQueryNode object using the given NumericQueryNode as its bounds and NumericConfig . Declaration public NumericRangeQueryNode(NumericQueryNode lower, NumericQueryNode upper, bool lowerInclusive, bool upperInclusive, NumericConfig numericConfig) Parameters Type Name Description NumericQueryNode lower the lower bound NumericQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false NumericConfig numericConfig the NumericConfig that represents associated with the upper and lower bounds See Also SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Properties | Improve this Doc View Source NumericConfig Gets the NumericConfig associated with the lower and upper bounds. Declaration public virtual NumericConfig NumericConfig { get; set; } Property Value Type Description NumericConfig Methods | Improve this Doc View Source SetBounds(NumericQueryNode, NumericQueryNode, Boolean, Boolean, NumericConfig) Sets the upper and lower bounds of this range query node and the NumericConfig associated with these bounds. Declaration public virtual void SetBounds(NumericQueryNode lower, NumericQueryNode upper, bool lowerInclusive, bool upperInclusive, NumericConfig numericConfig) Parameters Type Name Description NumericQueryNode lower the lower bound NumericQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false NumericConfig numericConfig the NumericConfig that represents associated with the upper and lower bounds | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.QueryParsers.Flexible.Standard.Nodes.AbstractRangeQueryNode<Lucene.Net.QueryParsers.Flexible.Standard.Nodes.NumericQueryNode>.ToString() Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode See Also NumericQueryNode AbstractRangeQueryNode <T>"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.ParseException.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParseException Inheritance System.Object System.Exception ParseException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Expressions.JS Assembly : Lucene.Net.Expressions.dll Syntax public class ParseException : Exception Constructors | Improve this Doc View Source ParseException(String, Int32) Declaration public ParseException(string message, int charPositionInLine) Parameters Type Name Description System.String message System.Int32 charPositionInLine"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.SimpleBindings.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.SimpleBindings.html",
    "title": "Class SimpleBindings | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleBindings Simple class that binds expression variable names to SortField s or other Expression s. Example usage: SimpleBindings bindings = new SimpleBindings(); // document's text relevance score bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // integer NumericDocValues field (or from FieldCache) bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // another expression bindings.Add(\"recency\", myRecencyExpression); // create a sort field in reverse order Sort sort = new Sort(expr.GetSortField(bindings, true)); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Bindings SimpleBindings Inherited Members Bindings.GetScoreValueSource() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public sealed class SimpleBindings : Bindings Constructors | Improve this Doc View Source SimpleBindings() Creates a new empty Bindings Declaration public SimpleBindings() Methods | Improve this Doc View Source Add(SortField) Adds a SortField to the bindings. Declaration public void Add(SortField sortField) Parameters Type Name Description SortField sortField Remarks Adds a SortField to the bindings. This can be used to reference a DocValuesField, a field from FieldCache, the document's score, etc. | Improve this Doc View Source Add(String, Expression) Adds an Expression to the bindings. Declaration public void Add(string name, Expression expression) Parameters Type Name Description System.String name Expression expression Remarks Adds an Expression to the bindings. This can be used to reference expressions from other expressions. | Improve this Doc View Source GetValueSource(String) Declaration public override ValueSource GetValueSource(string name) Parameters Type Name Description System.String name Returns Type Description ValueSource Overrides Bindings.GetValueSource(String) | Improve this Doc View Source Validate() Traverses the graph of bindings, checking there are no cycles or missing references Declaration public void Validate() Exceptions Type Condition System.ArgumentException if the bindings is inconsistent"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillDownQuery.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillDownQuery.html",
    "title": "Class DrillDownQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DrillDownQuery A Query for drill-down over facet categories. You should call Add(String, String[]) for every group of categories you want to drill-down over. NOTE: if you choose to create your own Query by calling Term(String, String, String[]) , it is recommended to wrap it with ConstantScoreQuery and set the Boost to 0.0f , so that it does not affect the scores of the documents. @lucene.experimental Inheritance System.Object Query DrillDownQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class DrillDownQuery : Query Constructors | Improve this Doc View Source DrillDownQuery(FacetsConfig) Creates a new DrillDownQuery without a base query, to perform a pure browsing query (equivalent to using MatchAllDocsQuery as base). Declaration public DrillDownQuery(FacetsConfig config) Parameters Type Name Description FacetsConfig config | Improve this Doc View Source DrillDownQuery(FacetsConfig, Query) Creates a new DrillDownQuery over the given base query. Can be null , in which case the result Query from Rewrite(IndexReader) will be a pure browsing query, filtering on the added categories only. Declaration public DrillDownQuery(FacetsConfig config, Query baseQuery) Parameters Type Name Description FacetsConfig config Query baseQuery Methods | Improve this Doc View Source Add(String, Filter) Expert: add a custom drill-down Filter, e.g. when drilling down after range faceting. Declaration public void Add(string dim, Filter subFilter) Parameters Type Name Description System.String dim Filter subFilter | Improve this Doc View Source Add(String, Query) Expert: add a custom drill-down subQuery. Use this when you have a separate way to drill-down on the dimension than the indexed facet ordinals. Declaration public void Add(string dim, Query subQuery) Parameters Type Name Description System.String dim Query subQuery | Improve this Doc View Source Add(String, String[]) Adds one dimension of drill downs; if you pass the same dimension more than once it is OR'd with the previous cofnstraints on that dimension, and all dimensions are AND'd against each other and the base query. Declaration public void Add(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader r) Parameters Type Name Description IndexReader r Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source Term(String, String, String[]) Creates a drill-down term. Declaration public static Term Term(string field, string dim, params string[] path) Parameters Type Name Description System.String field System.String dim System.String [] path Returns Type Description Term | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetField.html",
    "title": "Class FacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetField Add an instance of this to your Document for every facet label. NOTE: you must call Build(Document) before you add the document to IndexWriter . Inheritance System.Object Field FacetField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetField : Field, IIndexableField Constructors | Improve this Doc View Source FacetField(String, String[]) Creates the this from dim and path . Declaration public FacetField(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Properties | Improve this Doc View Source Dim Dimension for this field. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Path Path for this field. Declaration public string[] Path { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.ToString() | Improve this Doc View Source VerifyLabel(String) Verifies the label is not null or empty string. @lucene.internal Declaration public static void VerifyLabel(string label) Parameters Type Name Description System.String label Implements IIndexableField"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupDocs-1.html",
    "title": "Class GroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupDocs<TGroupValue> Represents one group in the results. @lucene.experimental Inheritance System.Object GroupDocs<TGroupValue> Implements IGroupDocs <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupDocs<TGroupValue> : IGroupDocs<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source GroupDocs(Single, Single, Int32, ScoreDoc[], TGroupValue, Object[]) Declaration public GroupDocs(float score, float maxScore, int totalHits, ScoreDoc[] scoreDocs, TGroupValue groupValue, object[] groupSortValues) Parameters Type Name Description System.Single score System.Single maxScore System.Int32 totalHits ScoreDoc [] scoreDocs TGroupValue groupValue System.Object [] groupSortValues Properties | Improve this Doc View Source GroupSortValues Matches the groupSort passed to AbstractFirstPassGroupingCollector<TGroupValue> . Declaration public object[] GroupSortValues { get; } Property Value Type Description System.Object [] | Improve this Doc View Source GroupValue The groupField value for all docs in this group; this may be null if hits did not have the groupField. Declaration public TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source MaxScore Max score in this group Declaration public float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source Score Overall aggregated score of this group (currently only set by join queries). Declaration public float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs Hits; this may be FieldDoc instances if the withinGroupSort sorted by fields. Declaration public ScoreDoc[] ScoreDocs { get; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits Total hits within this group Declaration public int TotalHits { get; } Property Value Type Description System.Int32 Implements IGroupDocs<TGroupValue>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.DefaultPhraseSlopQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.DefaultPhraseSlopQueryNodeProcessor.html",
    "title": "Class DefaultPhraseSlopQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultPhraseSlopQueryNodeProcessor This processor verifies if PHRASE_SLOP is defined in the QueryConfigHandler . If it is, it looks for every TokenizedPhraseQueryNode and MultiPhraseQueryNode that does not have any SlopQueryNode applied to it and creates an SlopQueryNode and apply to it. The new SlopQueryNode has the same slop value defined in the configuration. Inheritance System.Object QueryNodeProcessor DefaultPhraseSlopQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class DefaultPhraseSlopQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source DefaultPhraseSlopQueryNodeProcessor() Declaration public DefaultPhraseSlopQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected override void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Overrides QueryNodeProcessor.ProcessChildren(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also SlopQueryNode PHRASE_SLOP"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.FuzzyQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.FuzzyQueryNodeProcessor.html",
    "title": "Class FuzzyQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyQueryNodeProcessor This processor iterates the query node tree looking for every FuzzyQueryNode , when this kind of node is found, it checks on the query configuration for FUZZY_CONFIG , gets the fuzzy prefix length and default similarity from it and set to the fuzzy node. For more information about fuzzy prefix length check: FuzzyQuery . Inheritance System.Object QueryNodeProcessor FuzzyQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also FUZZY_CONFIG FuzzyQuery FuzzyQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.GroupQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.GroupQueryNodeProcessor.html",
    "title": "Class GroupQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupQueryNodeProcessor The ISyntaxParser generates query node trees that consider the boolean operator precedence, but Lucene current syntax does not support boolean precedence, so this processor remove all the precedence and apply the equivalent modifier according to the boolean operation defined on an specific query node. If there is a GroupQueryNode in the query node tree, the query node tree is not merged with the one above it. Example: TODO: describe a good example to show how this processor works Inheritance System.Object GroupQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax [Obsolete(\"Use BooleanQuery2ModifierNodeProcessor instead\")] public class GroupQueryNodeProcessor : IQueryNodeProcessor Constructors | Improve this Doc View Source GroupQueryNodeProcessor() Declaration public GroupQueryNodeProcessor() Methods | Improve this Doc View Source GetQueryConfigHandler() Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Implements IQueryNodeProcessor See Also StandardQueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.LowercaseExpandedTermsQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.LowercaseExpandedTermsQueryNodeProcessor.html",
    "title": "Class LowercaseExpandedTermsQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LowercaseExpandedTermsQueryNodeProcessor This processor verifies if LOWERCASE_EXPANDED_TERMS is defined in the QueryConfigHandler . If it is and the expanded terms should be lower-cased, it looks for every WildcardQueryNode , FuzzyQueryNode and children of a IRangeQueryNode and lower-case its term. Inheritance System.Object QueryNodeProcessor LowercaseExpandedTermsQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class LowercaseExpandedTermsQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source LowercaseExpandedTermsQueryNodeProcessor() Declaration public LowercaseExpandedTermsQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also LOWERCASE_EXPANDED_TERMS"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.ComplexPhraseQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.ComplexPhraseQuery.html",
    "title": "Class ComplexPhraseQueryParser.ComplexPhraseQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ComplexPhraseQueryParser.ComplexPhraseQuery Used to handle the query content in between quotes and produced Span-based interpretations of the clauses. Inheritance System.Object Query ComplexPhraseQueryParser.ComplexPhraseQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.ComplexPhrase Assembly : Lucene.Net.QueryParser.dll Syntax public class ComplexPhraseQuery : Query Constructors | Improve this Doc View Source ComplexPhraseQuery(String, String, Int32, Boolean) Declaration public ComplexPhraseQuery(string field, string phrasedQueryStringContents, int slopFactor, bool inOrder) Parameters Type Name Description System.String field System.String phrasedQueryStringContents System.Int32 slopFactor System.Boolean inOrder Properties | Improve this Doc View Source Field Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ParsePhraseElements(ComplexPhraseQueryParser) Declaration protected void ParsePhraseElements(ComplexPhraseQueryParser qp) Parameters Type Name Description ComplexPhraseQueryParser qp | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.ComplexPhraseQueryParser.html",
    "title": "Class ComplexPhraseQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ComplexPhraseQueryParser QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\". Performs potentially multiple passes over Query text to parse any nested logic in PhraseQueries. - First pass takes any PhraseQuery content between quotes and stores for subsequent pass. All other query content is parsed as normal - Second pass parses any stored PhraseQuery content, checking all embedded clauses are referring to the same field and therefore can be rewritten as Span queries. All PhraseQuery clauses are expressed as ComplexPhraseQuery objects This could arguably be done in one pass using a new QueryParser but here I am working within the constraints of the existing parser as a base class. This currently simply feeds all phrase content through an analyzer to select phrase terms - any \"special\" syntax such as * ~ * etc are not given special status Inheritance System.Object QueryBuilder QueryParserBase QueryParser ComplexPhraseQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.ComplexPhrase Assembly : Lucene.Net.QueryParser.dll Syntax public class ComplexPhraseQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source ComplexPhraseQueryParser(LuceneVersion, String, Analyzer) Declaration public ComplexPhraseQueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion System.String f Analyzer a Properties | Improve this Doc View Source InOrder When InOrder is true, the search terms must exists in the documents as the same order as in query. Choose between ordered (true) or un-ordered (false) proximity search. Declaration public virtual bool InOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetFieldQuery(String, String, Int32) Declaration protected override Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Int32) | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field System.String termStr System.Single minSimilarity Returns Type Description Query Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source GetWildcardQuery(String, String) Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetWildcardQuery(String, String) | Improve this Doc View Source NewRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query NewRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source NewTermQuery(Term) Declaration protected override Query NewTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description Query Overrides QueryBuilder.NewTermQuery(Term) | Improve this Doc View Source Parse(String) Declaration public override Query Parse(string query) Parameters Type Name Description System.String query Returns Type Description Query Overrides QueryParserBase.Parse(String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtendableQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtendableQueryParser.html",
    "title": "Class ExtendableQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExtendableQueryParser The ExtendableQueryParser enables arbitrary query parser extension based on a customizable field naming scheme. The lucene query syntax allows implicit and explicit field definitions as query prefix followed by a colon (':') character. The ExtendableQueryParser allows to encode extension keys into the field symbol associated with a registered instance of ParserExtension . A customizable separation character separates the extension key from the actual field symbol. The ExtendableQueryParser splits ( SplitExtensionField(String, String) ) the extension key from the field symbol and tries to resolve the associated ParserExtension . If the parser can't resolve the key or the field token does not contain a separation character, ExtendableQueryParser yields the same behavior as its super class QueryParser . Otherwise, if the key is associated with a ParserExtension instance, the parser builds an instance of ExtensionQuery to be processed by Parse(ExtensionQuery) .If a extension field does not contain a field part the default field for the query will be used. To guarantee that an extension field is processed with its associated extension, the extension query part must escape any special characters like '*' or '['. If the extension query contains any whitespace characters, the extension query part must be enclosed in quotes. Example ('_' used as separation character): title_customExt:\"Apache Lucene\\?\" OR content_customExt:prefix\\* Search on the default field: _customExt:\"Apache Lucene\\?\" OR _customExt:prefix\\* The ExtendableQueryParser itself does not implement the logic how field and extension key are separated or ordered. All logic regarding the extension key and field symbol parsing is located in Extensions . Customized extension schemes should be implemented by sub-classing Extensions . For details about the default encoding scheme see Extensions . Inheritance System.Object QueryBuilder QueryParserBase QueryParser ExtendableQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetWildcardQuery(String, String) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.GetFuzzyQuery(String, String, Single) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class ExtendableQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source ExtendableQueryParser(LuceneVersion, String, Analyzer) Creates a new ExtendableQueryParser instance Declaration public ExtendableQueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion the lucene version to use. System.String f the default query field Analyzer a the analyzer used to find terms in a query string | Improve this Doc View Source ExtendableQueryParser(LuceneVersion, String, Analyzer, Extensions) Creates a new ExtendableQueryParser instance Declaration public ExtendableQueryParser(LuceneVersion matchVersion, string f, Analyzer a, Extensions ext) Parameters Type Name Description LuceneVersion matchVersion the lucene version to use. System.String f the default query field Analyzer a the analyzer used to find terms in a query string Extensions ext the query parser extensions Properties | Improve this Doc View Source ExtensionFieldDelimiter Returns the extension field delimiter character. Declaration public virtual char ExtensionFieldDelimiter { get; } Property Value Type Description System.Char the extension field delimiter character. Methods | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected override Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Boolean) Implements ICommonQueryParserConfiguration See Also Extensions ParserExtension ExtensionQuery"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiStemFilterFactory.html",
    "title": "Class HindiStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiStemFilterFactory Factory for HindiStemFilter . <fieldType name=\"text_histem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HindiStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source HindiStemFilterFactory(IDictionary<String, String>) Creates a new HindiStemFilterFactory Declaration public HindiStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Nl.DutchAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Nl.DutchAnalyzer.html",
    "title": "Class DutchAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DutchAnalyzer Analyzer for Dutch language. Supports an external list of stopwords (words that will not be indexed at all), an external list of exclusions (word that will not be stemmed, but indexed) and an external list of word-stem pairs that overrule the algorithm (dictionary stemming). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating DutchAnalyzer : As of 3.6, DutchAnalyzer(LuceneVersion, CharArraySet) and DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) also populate the default entries for the stem override dictionary As of 3.1, Snowball stemming is done with SnowballFilter, LowerCaseFilter is used prior to StopFilter, and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer DutchAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DutchAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source DutchAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ) and a few default entries for the stem exclusion table. Declaration public DutchAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionTable | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet, CharArrayMap<String>) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable, CharArrayMap<string> stemOverrideDict) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionTable CharArrayMap < System.String > stemOverrideDict Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Dutch stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"dutch_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Returns a (possibly reused) TokenStream which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader aReader) Parameters Type Name Description System.String fieldName System.IO.TextReader aReader Returns Type Description TokenStreamComponents A TokenStream built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, StemmerOverrideFilter , and SnowballFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Nl.DutchStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Nl.DutchStemFilter.html",
    "title": "Class DutchStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DutchStemFilter A TokenFilter that stems Dutch words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a DutchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter DutchStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use Snowball.SnowballFilter with Tartarus.Snowball.Ext.DutchStemmer instead, which has the same functionality. This filter will be removed in Lucene 5.0\")] public sealed class DutchStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DutchStemFilter(TokenStream) Declaration public DutchStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Input TokenStream | Improve this Doc View Source DutchStemFilter(TokenStream, IDictionary<String, String>) Declaration public DutchStemFilter(TokenStream in, IDictionary<string, string> stemdictionary) Parameters Type Name Description TokenStream in Input TokenStream System.Collections.Generic.IDictionary < System.String , System.String > stemdictionary Dictionary of word stem pairs, that overrule the algorithm Properties | Improve this Doc View Source StemDictionary Set dictionary for stemming, this dictionary overrules the algorithm, so you can correct for a particular unwanted word-stem pair. Declaration public CharArrayMap<string> StemDictionary { get; set; } Property Value Type Description CharArrayMap < System.String > | Improve this Doc View Source Stemmer Set a alternative/custom DutchStemmer for this filter. Declaration public DutchStemmer Stemmer { get; set; } Property Value Type Description DutchStemmer Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also KeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianAnalyzer.html",
    "title": "Class NorwegianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianAnalyzer Analyzer for Norwegian. Inheritance System.Object Analyzer StopwordAnalyzerBase NorwegianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public NorwegianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public NorwegianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source NorwegianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public NorwegianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Norwegian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"norwegian_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianLightStemFilter.html",
    "title": "Class NorwegianLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianLightStemFilter A TokenFilter that applies NorwegianLightStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter NorwegianLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NorwegianLightStemFilter(TokenStream) Calls NorwegianLightStemFilter(TokenStream, NorwegianStandard) NorwegianLightStemFilter(input, BOKMAAL) Declaration public NorwegianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input the source TokenStream to filter | Improve this Doc View Source NorwegianLightStemFilter(TokenStream, NorwegianStandard) Creates a new NorwegianLightStemFilter Declaration public NorwegianLightStemFilter(TokenStream input, NorwegianStandard flags) Parameters Type Name Description TokenStream input the source TokenStream to filter NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianLightStemFilterFactory.html",
    "title": "Class NorwegianLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianLightStemFilterFactory Factory for NorwegianLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianLightStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory NorwegianLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source NorwegianLightStemFilterFactory(IDictionary<String, String>) Creates a new NorwegianLightStemFilterFactory Declaration public NorwegianLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianMinimalStemFilter.html",
    "title": "Class NorwegianMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianMinimalStemFilter A TokenFilter that applies NorwegianMinimalStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter NorwegianMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NorwegianMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NorwegianMinimalStemFilter(TokenStream) Calls NorwegianLightStemFilter(TokenStream, NorwegianStandard) - NorwegianMinimalStemFilter(input, BOKMAAL) Declaration public NorwegianMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source NorwegianMinimalStemFilter(TokenStream, NorwegianStandard) Creates a new NorwegianLightStemFilter Declaration public NorwegianMinimalStemFilter(TokenStream input, NorwegianStandard flags) Parameters Type Name Description TokenStream input the source TokenStream to filter NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianMinimalStemFilterFactory.html",
    "title": "Class NorwegianMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianMinimalStemFilterFactory Factory for NorwegianMinimalStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianMinimalStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory NorwegianMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source NorwegianMinimalStemFilterFactory(IDictionary<String, String>) Creates a new NorwegianMinimalStemFilterFactory Declaration public NorwegianMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Path.PathHierarchyTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Path.PathHierarchyTokenizer.html",
    "title": "Class PathHierarchyTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PathHierarchyTokenizer Tokenizer for path-like hierarchies. Take something like: /something/something/else and make: /something /something/something /something/something/else Inheritance System.Object AttributeSource TokenStream Tokenizer PathHierarchyTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Path Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PathHierarchyTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source PathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Char, Char, Int32) Declaration public PathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Char, Char, Int32) Declaration public PathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(TextReader) Declaration public PathHierarchyTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Char, Char) Declaration public PathHierarchyTokenizer(TextReader input, char delimiter, char replacement) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Char replacement | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Char, Char, Int32) Declaration public PathHierarchyTokenizer(TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Int32) Declaration public PathHierarchyTokenizer(TextReader input, int skip) Parameters Type Name Description System.IO.TextReader input System.Int32 skip | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Int32, Char) Declaration public PathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter | Improve this Doc View Source PathHierarchyTokenizer(TextReader, Int32, Char, Char, Int32) Declaration public PathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement System.Int32 skip Fields | Improve this Doc View Source DEFAULT_DELIMITER Declaration public const char DEFAULT_DELIMITER = '/' Field Value Type Description System.Char | Improve this Doc View Source DEFAULT_SKIP Declaration public const int DEFAULT_SKIP = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Path.PathHierarchyTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Path.PathHierarchyTokenizerFactory.html",
    "title": "Class PathHierarchyTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PathHierarchyTokenizerFactory Factory for PathHierarchyTokenizer . This factory is typically configured for use only in the index Analyzer (or only in the query Analyzer, but never both). For example, in the configuration below a query for Books/NonFic will match documents indexed with values like Books/NonFic , Books/NonFic/Law , Books/NonFic/Science/Physics , etc. But it will not match documents indexed with values like Books , or Books/Fic ... <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> </fieldType> In this example however we see the oposite configuration, so that a query for Books/NonFic/Science/Physics would match documents containing Books/NonFic , Books/NonFic/Science , or Books/NonFic/Science/Physics , but not Books/NonFic/Science/Physics/Theory or Books/NonFic/Law . <fieldType name=\"descendent_path\" class=\"solr.TextField\"> <analyzer type=\"index\"> <tokenizer class=\"solr.KeywordTokenizerFactory\" /> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.PathHierarchyTokenizerFactory\" delimiter=\"/\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory PathHierarchyTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Path Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PathHierarchyTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source PathHierarchyTokenizerFactory(IDictionary<String, String>) Creates a new PathHierarchyTokenizerFactory Declaration public PathHierarchyTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Path.ReversePathHierarchyTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Path.ReversePathHierarchyTokenizer.html",
    "title": "Class ReversePathHierarchyTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReversePathHierarchyTokenizer Tokenizer for domain-like hierarchies. Take something like: www.site.co.uk and make: www.site.co.uk site.co.uk co.uk uk Inheritance System.Object AttributeSource TokenStream Tokenizer ReversePathHierarchyTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Path Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ReversePathHierarchyTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader) Declaration public ReversePathHierarchyTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Char, Char) Declaration public ReversePathHierarchyTokenizer(TextReader input, char delimiter, char replacement) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Char replacement | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(TextReader input, char delimiter, char replacement, int skip) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Char replacement System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Char, Int32) Declaration public ReversePathHierarchyTokenizer(TextReader input, char delimiter, int skip) Parameters Type Name Description System.IO.TextReader input System.Char delimiter System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Int32) Declaration public ReversePathHierarchyTokenizer(TextReader input, int skip) Parameters Type Name Description System.IO.TextReader input System.Int32 skip | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Int32, Char) Declaration public ReversePathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Int32, Char, Char) Declaration public ReversePathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter, char replacement) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement | Improve this Doc View Source ReversePathHierarchyTokenizer(TextReader, Int32, Char, Char, Int32) Declaration public ReversePathHierarchyTokenizer(TextReader input, int bufferSize, char delimiter, char replacement, int skip) Parameters Type Name Description System.IO.TextReader input System.Int32 bufferSize System.Char delimiter System.Char replacement System.Int32 skip Fields | Improve this Doc View Source DEFAULT_DELIMITER Declaration public const char DEFAULT_DELIMITER = '/' Field Value Type Description System.Char | Improve this Doc View Source DEFAULT_SKIP Declaration public const int DEFAULT_SKIP = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std34.StandardTokenizerImpl34.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std34.StandardTokenizerImpl34.html",
    "title": "Class StandardTokenizerImpl34 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizerImpl34 This class implements StandardTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility Inheritance System.Object StandardTokenizerImpl34 Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard.Std34 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class StandardTokenizerImpl34 : IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl34(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl34(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std34.UAX29URLEmailTokenizerImpl34.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std34.UAX29URLEmailTokenizerImpl34.html",
    "title": "Class UAX29URLEmailTokenizerImpl34 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl34 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3880 ) where \"mailto:\" URI scheme prepended to an email address will disrupt recognition of the email address. @deprecated This class is only for exact backwards compatibility Inheritance System.Object UAX29URLEmailTokenizerImpl34 Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard.Std34 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class UAX29URLEmailTokenizerImpl34 : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl34(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl34(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std36.UAX29URLEmailTokenizerImpl36.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std36.UAX29URLEmailTokenizerImpl36.html",
    "title": "Class UAX29URLEmailTokenizerImpl36 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl36 This class implements UAX29URLEmailTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility Inheritance System.Object UAX29URLEmailTokenizerImpl36 Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard.Std36 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class UAX29URLEmailTokenizerImpl36 : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl36(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl36(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std40.StandardTokenizerImpl40.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std40.StandardTokenizerImpl40.html",
    "title": "Class StandardTokenizerImpl40 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizerImpl40 This class implements StandardTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility Inheritance System.Object StandardTokenizerImpl40 Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard.Std40 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class StandardTokenizerImpl40 : IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl40(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl40(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std40.UAX29URLEmailTokenizerImpl40.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std40.UAX29URLEmailTokenizerImpl40.html",
    "title": "Class UAX29URLEmailTokenizerImpl40 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl40 This class implements UAX29URLEmailTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility Inheritance System.Object UAX29URLEmailTokenizerImpl40 Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard.Std40 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class UAX29URLEmailTokenizerImpl40 : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl40(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl40(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer.html",
    "title": "Class UAX29URLEmailAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailAnalyzer Filters UAX29URLEmailTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating UAX29URLEmailAnalyzer Inheritance System.Object Analyzer StopwordAnalyzerBase UAX29URLEmailAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( STOP_WORDS_SET . Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer CharArraySet stopWords stop words | Improve this Doc View Source UAX29URLEmailAnalyzer(LuceneVersion, TextReader) Builds an analyzer with the stop words from the given reader. Declaration public UAX29URLEmailAnalyzer(LuceneVersion matchVersion, TextReader stopwords) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See UAX29URLEmailAnalyzer System.IO.TextReader stopwords System.IO.TextReader to read stop words from See Also GetWordSet(TextReader, LuceneVersion) Fields | Improve this Doc View Source DEFAULT_MAX_TOKEN_LENGTH Default maximum allowed token length Declaration public const int DEFAULT_MAX_TOKEN_LENGTH = 255 Field Value Type Description System.Int32 | Improve this Doc View Source STOP_WORDS_SET An unmodifiable set containing some common English words that are usually not useful for searching. Declaration public static readonly CharArraySet STOP_WORDS_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source MaxTokenLength Set maximum allowed token length. If a token is seen that exceeds this length then it is discarded. This setting only takes effect the next time tokenStream or tokenStream is called. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer.html",
    "title": "Class UAX29URLEmailTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailTokenizer This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in ` Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character You must specify the required LuceneVersion compatibility when creating UAX29URLEmailTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. Inheritance System.Object AttributeSource TokenStream Tokenizer UAX29URLEmailTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source UAX29URLEmailTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new UAX29URLEmailTokenizer with a given AttributeSource.AttributeFactory Declaration public UAX29URLEmailTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source UAX29URLEmailTokenizer(LuceneVersion, TextReader) Creates a new instance of the UAX29URLEmailTokenizer . Attaches the input to the newly created JFlex scanner. Declaration public UAX29URLEmailTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version System.IO.TextReader input The input reader Fields | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 0 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = 8 Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL Declaration public const int HANGUL = 6 Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA Declaration public const int HIRAGANA = 4 Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC Declaration public const int IDEOGRAPHIC = 3 Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA Declaration public const int KATAKANA = 5 Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = 1 Field Value Type Description System.Int32 | Improve this Doc View Source SOUTHEAST_ASIAN Declaration public const int SOUTHEAST_ASIAN = 2 Field Value Type Description System.Int32 | Improve this Doc View Source TOKEN_TYPES String token types that correspond to token type int constants Declaration public static readonly string[] TOKEN_TYPES Field Value Type Description System.String [] | Improve this Doc View Source URL Declaration public const int URL = 7 Field Value Type Description System.Int32 Properties | Improve this Doc View Source MaxTokenLength Set the max allowed token length. Any token longer than this is skipped. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerFactory.html",
    "title": "Class UAX29URLEmailTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerFactory Factory for UAX29URLEmailTokenizer . <fieldType name=\"text_urlemail\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.UAX29URLEmailTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory UAX29URLEmailTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class UAX29URLEmailTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source UAX29URLEmailTokenizerFactory(IDictionary<String, String>) Creates a new UAX29URLEmailTokenizerFactory Declaration public UAX29URLEmailTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerImpl.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerImpl.html",
    "title": "Class UAX29URLEmailTokenizerImpl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters Inheritance System.Object UAX29URLEmailTokenizerImpl Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UAX29URLEmailTokenizerImpl : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source AVOID_BAD_URL Declaration public const int AVOID_BAD_URL = 2 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Stempel.StempelFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Stempel.StempelFilter.html",
    "title": "Class StempelFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StempelFilter Transforms the token stream as per the stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! Inheritance System.Object AttributeSource TokenStream TokenFilter StempelFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public sealed class StempelFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source StempelFilter(TokenStream, StempelStemmer) Create filter using the supplied stemming table. Declaration public StempelFilter(TokenStream in, StempelStemmer stemmer) Parameters Type Name Description TokenStream in input token stream StempelStemmer stemmer stemmer | Improve this Doc View Source StempelFilter(TokenStream, StempelStemmer, Int32) Create filter using the supplied stemming table. Declaration public StempelFilter(TokenStream in, StempelStemmer stemmer, int minLength) Parameters Type Name Description TokenStream in input token stream StempelStemmer stemmer stemmer System.Int32 minLength For performance reasons words shorter than minLength characters are not processed, but simply returned. Fields | Improve this Doc View Source DEFAULT_MIN_LENGTH Minimum length of input words to be processed. Shorter words are returned unchanged. Declaration public static readonly int DEFAULT_MIN_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Returns the next input Token , after being stemmed Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int64Comparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.Int64Comparer.html",
    "title": "Class FieldComparer.Int64Comparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.Int64Comparer Parses field's values as System.Int64 (using GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and sorts by ascending value NOTE: This was LongComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Int64 > FieldComparer.NumericComparer < System.Int64 > FieldComparer.Int64Comparer Inherited Members FieldComparer.NumericComparer<Int64>.m_missingValue FieldComparer.NumericComparer<Int64>.m_field FieldComparer.NumericComparer<Int64>.m_docsWithField FieldComparer<Int64>.CompareValues(Int64, Int64) FieldComparer<Int64>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class Int64Comparer : FieldComparer.NumericComparer<long> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Int64>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Int64>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Int64>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Int64>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Int64>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.NumericComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.NumericComparer-1.html",
    "title": "Class FieldComparer.NumericComparer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.NumericComparer<T> Base FieldComparer class for numeric types Inheritance System.Object FieldComparer FieldComparer <T> FieldComparer.NumericComparer<T> FieldComparer.ByteComparer FieldComparer.DoubleComparer FieldComparer.Int16Comparer FieldComparer.Int32Comparer FieldComparer.Int64Comparer FieldComparer.SingleComparer Inherited Members FieldComparer<T>.Compare(Int32, Int32) FieldComparer<T>.SetBottom(Int32) FieldComparer<T>.SetTopValue(Object) FieldComparer<T>.CompareBottom(Int32) FieldComparer<T>.CompareTop(Int32) FieldComparer<T>.Copy(Int32, Int32) FieldComparer<T>.CompareValues(T, T) FieldComparer<T>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) FieldComparer.Item[Int32] System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class NumericComparer<T> : FieldComparer<T> where T : struct Type Parameters Name Description T Constructors | Improve this Doc View Source NumericComparer(String, Nullable<T>) Declaration public NumericComparer(string field, T? missingValue) Parameters Type Name Description System.String field System.Nullable <T> missingValue Fields | Improve this Doc View Source m_docsWithField Declaration protected IBits m_docsWithField Field Value Type Description IBits | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_missingValue Declaration protected readonly T? m_missingValue Field Value Type Description System.Nullable <T> Methods | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<T>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.RelevanceComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.RelevanceComparer.html",
    "title": "Class FieldComparer.RelevanceComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.RelevanceComparer Sorts by descending relevance. NOTE: if you are sorting only by descending relevance and then secondarily by ascending docID, performance is faster using TopScoreDocCollector directly (which all overloads of Search(Query, Int32) use when no Sort is specified). Inheritance System.Object FieldComparer FieldComparer < System.Single > FieldComparer.RelevanceComparer Inherited Members FieldComparer<Single>.CompareValues(Object, Object) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class RelevanceComparer : FieldComparer<float> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareTop(System.Int32) | Improve this Doc View Source CompareValues(Single, Single) Declaration public override int CompareValues(float first, float second) Parameters Type Name Description System.Single first System.Single second Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareValues(System.Single, System.Single) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Single>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides FieldComparer.SetScorer(Scorer) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.SingleComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.SingleComparer.html",
    "title": "Class FieldComparer.SingleComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer.SingleComparer Parses field's values as System.Single (using GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and sorts by ascending value NOTE: This was FloatComparator in Lucene Inheritance System.Object FieldComparer FieldComparer < System.Single > FieldComparer.NumericComparer < System.Single > FieldComparer.SingleComparer Inherited Members FieldComparer.NumericComparer<Single>.m_missingValue FieldComparer.NumericComparer<Single>.m_field FieldComparer.NumericComparer<Single>.m_docsWithField FieldComparer<Single>.CompareValues(Single, Single) FieldComparer<Single>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class SingleComparer : FieldComparer.NumericComparer<float> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.Compare(System.Int32, System.Int32) | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Single>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot System.Int32 doc Overrides Lucene.Net.Search.FieldComparer<System.Single>.Copy(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer.NumericComparer<System.Single>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Single>.SetTopValue(System.Object) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ITopDocsCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ITopDocsCollector.html",
    "title": "Interface ITopDocsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITopDocsCollector LUCENENET specific interface used to reference TopDocsCollector<T> without referencing its generic type. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ITopDocsCollector : ICollector Properties | Improve this Doc View Source TotalHits The total number of documents that matched this query. Declaration int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetTopDocs() Returns the top docs that were collected by this collector. Declaration TopDocs GetTopDocs() Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32) Returns the documents in the rage [ start .. pq.Count) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned. This method is convenient to call if the application always asks for the last results, starting from the last 'page'. NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different start , you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration TopDocs GetTopDocs(int start) Parameters Type Name Description System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32, Int32) Returns the documents in the rage [ start .. start + howMany ) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned, and if pq.Count - start < howMany , then only the available documents in [ start .. pq.Count) are returned. This method is useful to call in case pagination of search results is allowed by the search application, as well as it attempts to optimize the memory used by allocating only as much as requested by howMany . NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different range, you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration TopDocs GetTopDocs(int start, int howMany) Parameters Type Name Description System.Int32 start System.Int32 howMany Returns Type Description TopDocs Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.LiveFieldValues-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.LiveFieldValues-2.html",
    "title": "Class LiveFieldValues<S, T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LiveFieldValues<S, T> Tracks live field values across NRT reader reopens. This holds a map for all updated ids since the last reader reopen. Once the NRT reader is reopened, it prunes the map. This means you must reopen your NRT reader periodically otherwise the RAM consumption of this class will grow unbounded! NOTE: you must ensure the same id is never updated at the same time by two threads, because in this case you cannot in general know which thread \"won\". Inheritance System.Object LiveFieldValues<S, T> Implements ReferenceManager.IRefreshListener System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class LiveFieldValues<S, T> : ReferenceManager.IRefreshListener, IDisposable where S : class Type Parameters Name Description S T Constructors | Improve this Doc View Source LiveFieldValues(ReferenceManager<S>, T) Declaration public LiveFieldValues(ReferenceManager<S> mgr, T missingValue) Parameters Type Name Description ReferenceManager <S> mgr T missingValue Properties | Improve this Doc View Source Count Returns the [approximate] number of id/value pairs buffered in RAM. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(String, T) Call this after you've successfully added a document to the index, to record what value you just set the field to. Declaration public virtual void Add(string id, T value) Parameters Type Name Description System.String id T value | Improve this Doc View Source AfterRefresh(Boolean) Declaration public virtual void AfterRefresh(bool didRefresh) Parameters Type Name Description System.Boolean didRefresh | Improve this Doc View Source BeforeRefresh() Declaration public virtual void BeforeRefresh() | Improve this Doc View Source Delete(String) Call this after you've successfully deleted a document from the index. Declaration public virtual void Delete(string id) Parameters Type Name Description System.String id | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Get(String) Returns the current value for this id, or null if the id isn't in the index or was deleted. Declaration public virtual T Get(string id) Parameters Type Name Description System.String id Returns Type Description T | Improve this Doc View Source LookupFromSearcher(S, String) This is called when the id/value was already flushed & opened in an NRT IndexSearcher. You must implement this to go look up the value (eg, via doc values, field cache, stored fields, etc.). Declaration protected abstract T LookupFromSearcher(S s, string id) Parameters Type Name Description S s System.String id Returns Type Description T Implements ReferenceManager.IRefreshListener System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MatchAllDocsQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MatchAllDocsQuery.html",
    "title": "Class MatchAllDocsQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQuery A query that matches all documents. Inheritance System.Object Query MatchAllDocsQuery Inherited Members Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MatchAllDocsQuery : Query Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.html",
    "title": "Class PayloadNearQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadNearQuery This class is very similar to SpanNearQuery except that it factors in the value of the payloads located at each of the positions where the TermSpans occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . Inheritance System.Object Query SpanQuery SpanNearQuery PayloadNearQuery Inherited Members SpanNearQuery.m_clauses SpanNearQuery.m_slop SpanNearQuery.m_inOrder SpanNearQuery.m_field SpanNearQuery.GetClauses() SpanNearQuery.Slop SpanNearQuery.IsInOrder SpanNearQuery.Field SpanNearQuery.ExtractTerms(ISet<Term>) SpanNearQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanNearQuery.Rewrite(IndexReader) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearQuery : SpanNearQuery Constructors | Improve this Doc View Source PayloadNearQuery(SpanQuery[], Int32, Boolean) Declaration public PayloadNearQuery(SpanQuery[] clauses, int slop, bool inOrder) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder | Improve this Doc View Source PayloadNearQuery(SpanQuery[], Int32, Boolean, PayloadFunction) Declaration public PayloadNearQuery(SpanQuery[] clauses, int slop, bool inOrder, PayloadFunction function) Parameters Type Name Description SpanQuery [] clauses System.Int32 slop System.Boolean inOrder PayloadFunction function Fields | Improve this Doc View Source m_fieldName Declaration protected string m_fieldName Field Value Type Description System.String | Improve this Doc View Source m_function Declaration protected PayloadFunction m_function Field Value Type Description PayloadFunction Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides SpanNearQuery.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides SpanNearQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanNearQuery.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides SpanNearQuery.ToString(String) Extension Methods Number.IsNumber(Object) See Also ComputePayloadFactor(Int32, Int32, Int32, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer.html",
    "title": "Class PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inherited Members SpanScorer.m_spans SpanScorer.m_more SpanScorer.m_doc SpanScorer.m_freq SpanScorer.m_numMatches SpanScorer.m_docScorer SpanScorer.NextDoc() SpanScorer.Advance(Int32) SpanScorer.DocID SpanScorer.Freq SpanScorer.SloppyFreq SpanScorer.GetCost() Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax protected class PayloadTermSpanScorer : SpanScorer Constructors | Improve this Doc View Source PayloadTermSpanScorer(PayloadTermQuery.PayloadTermWeight, TermSpans, Weight, Similarity.SimScorer) Declaration public PayloadTermSpanScorer(PayloadTermQuery.PayloadTermWeight outerInstance, TermSpans spans, Weight weight, Similarity.SimScorer docScorer) Parameters Type Name Description PayloadTermQuery.PayloadTermWeight outerInstance TermSpans spans Weight weight Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_payload Declaration protected BytesRef m_payload Field Value Type Description BytesRef | Improve this Doc View Source m_payloadScore Declaration protected float m_payloadScore Field Value Type Description System.Single | Improve this Doc View Source m_payloadsSeen Declaration protected int m_payloadsSeen Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetPayloadScore() The score for the payload Declaration protected virtual float GetPayloadScore() Returns Type Description System.Single The score, as calculated by DocScore(Int32, String, Int32, Single) | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single GetSpanScore() * GetPayloadScore() Overrides SpanScorer.GetScore() Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source GetSpanScore() Returns the SpanScorer score only. Should not be overridden without good cause! Declaration protected virtual float GetSpanScore() Returns Type Description System.Single the score for just the Span part w/o the payload Exceptions Type Condition System.IO.IOException if there is a low-level I/O error See Also GetScore() | Improve this Doc View Source ProcessPayload(Similarity) Declaration protected virtual void ProcessPayload(Similarity similarity) Parameters Type Name Description Similarity similarity | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected override bool SetFreqCurrentDoc() Returns Type Description System.Boolean Overrides SpanScorer.SetFreqCurrentDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.PayloadTermWeight.html",
    "title": "Class PayloadTermQuery.PayloadTermWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadTermQuery.PayloadTermWeight Inheritance System.Object Weight SpanWeight PayloadTermQuery.PayloadTermWeight Inherited Members SpanWeight.m_similarity SpanWeight.m_termContexts SpanWeight.m_query SpanWeight.m_stats SpanWeight.Query SpanWeight.GetValueForNormalization() SpanWeight.Normalize(Single, Single) Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax protected class PayloadTermWeight : SpanWeight Constructors | Improve this Doc View Source PayloadTermWeight(PayloadTermQuery, PayloadTermQuery, IndexSearcher) Declaration public PayloadTermWeight(PayloadTermQuery outerInstance, PayloadTermQuery query, IndexSearcher searcher) Parameters Type Name Description PayloadTermQuery outerInstance PayloadTermQuery query IndexSearcher searcher Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides SpanWeight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides SpanWeight.GetScorer(AtomicReaderContext, IBits) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Scorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Scorer.html",
    "title": "Class Scorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Scorer Expert: Common scoring functionality for different types of queries. A Scorer iterates over documents matching a query in increasing order of doc Id. Document scores are computed using a given Similarity implementation. NOTE : The values System.Single.NaN , System.Single.NegativeInfinity and System.Single.PositiveInfinity are not valid scores. Certain collectors (eg TopScoreDocCollector ) will not properly collect hits with these scores. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ConstantScoreQuery.ConstantScorer ScoreCachingWrappingScorer SpanScorer Inherited Members DocsEnum.Freq DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Scorer : DocsEnum Constructors | Improve this Doc View Source Scorer(Weight) Constructs a Scorer Declaration protected Scorer(Weight weight) Parameters Type Name Description Weight weight The scorers Weight . Fields | Improve this Doc View Source m_weight The Scorer 's parent Weight . In some cases this may be null . Declaration protected readonly Weight m_weight Field Value Type Description Weight Properties | Improve this Doc View Source Weight returns parent Weight This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Weight Weight { get; } Property Value Type Description Weight Methods | Improve this Doc View Source GetChildren() Returns child sub-scorers This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description System.Collections.Generic.ICollection < Scorer.ChildScorer > | Improve this Doc View Source GetScore() Returns the score of the current document matching the query. Initially invalid, until NextDoc() or Advance(Int32) is called the first time, or when called from within Collect(Int32) . Declaration public abstract float GetScore() Returns Type Description System.Single Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoringRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoringRewrite-1.html",
    "title": "Class ScoringRewrite<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoringRewrite<Q> Base rewrite method that translates each term into a query, and keeps the scores as computed by the query. @lucene.internal - Only public to be accessible by spans package. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite <Q> ScoringRewrite<Q> Inherited Members TermCollectingRewrite<Q>.GetTopLevelQuery() TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single) TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single, TermContext) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class ScoringRewrite<Q> : TermCollectingRewrite<Q> where Q : Query Type Parameters Name Description Q Fields | Improve this Doc View Source CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Like SCORING_BOOLEAN_QUERY_REWRITE except scores are not computed. Instead, each matching document receives a constant score equal to the query's boost. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source SCORING_BOOLEAN_QUERY_REWRITE A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Note that typically such scores are meaningless to the user, and require non-trivial CPU to compute, so it's almost always better to use CONSTANT_SCORE_AUTO_REWRITE_DEFAULT instead. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly ScoringRewrite<BooleanQuery> SCORING_BOOLEAN_QUERY_REWRITE Field Value Type Description ScoringRewrite < BooleanQuery > See Also MultiTermRewriteMethod Methods | Improve this Doc View Source CheckMaxClauseCount(Int32) This method is called after every new term to check if the number of max clauses (e.g. in BooleanQuery ) is not exceeded. Throws the corresponding System.Exception . Declaration protected abstract void CheckMaxClauseCount(int count) Parameters Type Name Description System.Int32 count | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.PruneByAge.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.PruneByAge.html",
    "title": "Class SearcherLifetimeManager.PruneByAge | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherLifetimeManager.PruneByAge Simple pruner that drops any searcher older by more than the specified seconds, than the newest searcher. Inheritance System.Object SearcherLifetimeManager.PruneByAge Implements SearcherLifetimeManager.IPruner Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class PruneByAge : SearcherLifetimeManager.IPruner Constructors | Improve this Doc View Source PruneByAge(Double) Declaration public PruneByAge(double maxAgeSec) Parameters Type Name Description System.Double maxAgeSec Methods | Improve this Doc View Source DoPrune(Double, IndexSearcher) Declaration public bool DoPrune(double ageSec, IndexSearcher searcher) Parameters Type Name Description System.Double ageSec IndexSearcher searcher Returns Type Description System.Boolean Implements SearcherLifetimeManager.IPruner Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.html",
    "title": "Class SearcherLifetimeManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherLifetimeManager Keeps track of current plus old IndexSearcher s, disposing the old ones once they have timed out. Use it like this: SearcherLifetimeManager mgr = new SearcherLifetimeManager(); Per search-request, if it's a \"new\" search request, then obtain the latest searcher you have (for example, by using SearcherManager ), and then record this searcher: // Record the current searcher, and save the returend // token into user's search results (eg as a hidden // HTML form field): long token = mgr.Record(searcher); When a follow-up search arrives, for example the user clicks next page, drills down/up, etc., take the token that you saved from the previous search and: // If possible, obtain the same searcher as the last // search: IndexSearcher searcher = mgr.Acquire(token); if (searcher != null) { // Searcher is still here try { // do searching... } finally { mgr.Release(searcher); // Do not use searcher after this! searcher = null; } } else { // Searcher was pruned -- notify user session timed // out, or, pull fresh searcher again } Finally, in a separate thread, ideally the same thread that's periodically reopening your searchers, you should periodically prune old searchers: mgr.Prune(new PruneByAge(600.0)); NOTE : keeping many searchers around means you'll use more resources (open files, RAM) than a single searcher. However, as long as you are using OpenIfChanged(DirectoryReader) , the searchers will usually share almost all segments and the added resource usage is contained. When a large merge has completed, and you reopen, because that is a large change, the new searcher will use higher additional RAM than other searchers; but large merges don't complete very often and it's unlikely you'll hit two of them in your expiration window. Still you should budget plenty of heap in the runtime to have a good safety margin. Inheritance System.Object SearcherLifetimeManager Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SearcherLifetimeManager : IDisposable Methods | Improve this Doc View Source Acquire(Int64) Retrieve a previously recorded IndexSearcher , if it has not yet been closed. NOTE : this may return null when the requested searcher has already timed out. When this happens you should notify your user that their session timed out and that they'll have to restart their search. If this returns a non-null result, you must match later call Release(IndexSearcher) on this searcher, best from a finally clause. Declaration public virtual IndexSearcher Acquire(long version) Parameters Type Name Description System.Int64 version Returns Type Description IndexSearcher | Improve this Doc View Source Dispose() Close this to future searching; any searches still in process in other threads won't be affected, and they should still call Release(IndexSearcher) after they are done. NOTE : you must ensure no other threads are calling Record(IndexSearcher) while you call Dispose(); otherwise it's possible not all searcher references will be freed. Declaration public virtual void Dispose() | Improve this Doc View Source Prune(SearcherLifetimeManager.IPruner) Calls provided SearcherLifetimeManager.IPruner to prune entries. The entries are passed to the SearcherLifetimeManager.IPruner in sorted (newest to oldest IndexSearcher ) order. NOTE : you must peridiocally call this, ideally from the same background thread that opens new searchers. Declaration public virtual void Prune(SearcherLifetimeManager.IPruner pruner) Parameters Type Name Description SearcherLifetimeManager.IPruner pruner | Improve this Doc View Source Record(IndexSearcher) Records that you are now using this IndexSearcher . Always call this when you've obtained a possibly new IndexSearcher , for example from SearcherManager . It's fine if you already passed the same searcher to this method before. This returns the System.Int64 token that you can later pass to Acquire(Int64) to retrieve the same IndexSearcher . You should record this System.Int64 token in the search results sent to your user, such that if the user performs a follow-on action (clicks next page, drills down, etc.) the token is returned. Declaration public virtual long Record(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description System.Int64 | Improve this Doc View Source Release(IndexSearcher) Release a searcher previously obtained from Acquire(Int64) . NOTE : it's fine to call this after Dispose(). Declaration public virtual void Release(IndexSearcher s) Parameters Type Name Description IndexSearcher s Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherManager.html",
    "title": "Class SearcherManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherManager Utility class to safely share IndexSearcher instances across multiple threads, while periodically reopening. This class ensures each searcher is disposed only once all threads have finished using it. Use Acquire() to obtain the current searcher, and Release(G) to release it, like this: IndexSearcher s = manager.Acquire(); try { // Do searching, doc retrieval, etc. with s } finally { manager.Release(s); // Do not use s after this! s = null; } In addition you should periodically call MaybeRefresh() . While it's possible to call this just before running each query, this is discouraged since it penalizes the unlucky queries that do the reopen. It's better to use a separate background thread, that periodically calls MaybeRefresh() . Finally, be sure to call Dispose() once you are done. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager < IndexSearcher > SearcherManager Implements System.IDisposable Inherited Members ReferenceManager<IndexSearcher>.Current ReferenceManager<IndexSearcher>.Acquire() ReferenceManager<IndexSearcher>.Dispose() ReferenceManager<IndexSearcher>.Dispose(Boolean) ReferenceManager<IndexSearcher>.MaybeRefresh() ReferenceManager<IndexSearcher>.MaybeRefreshBlocking() ReferenceManager<IndexSearcher>.AfterMaybeRefresh() ReferenceManager<IndexSearcher>.Release(IndexSearcher) ReferenceManager<IndexSearcher>.AddListener(ReferenceManager.IRefreshListener) ReferenceManager<IndexSearcher>.RemoveListener(ReferenceManager.IRefreshListener) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class SearcherManager : ReferenceManager<IndexSearcher>, IDisposable Constructors | Improve this Doc View Source SearcherManager(IndexWriter, Boolean, SearcherFactory) Creates and returns a new SearcherManager from the given IndexWriter . Declaration public SearcherManager(IndexWriter writer, bool applyAllDeletes, SearcherFactory searcherFactory) Parameters Type Name Description IndexWriter writer The IndexWriter to open the IndexReader from. System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the IndexSearcher / DirectoryReader . If false , the deletes may or may not be applied, but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . See OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . SearcherFactory searcherFactory An optional SearcherFactory . Pass null if you don't require the searcher to be warmed before going live or other custom behavior. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SearcherManager(Directory, SearcherFactory) Creates and returns a new SearcherManager from the given Directory . Declaration public SearcherManager(Directory dir, SearcherFactory searcherFactory) Parameters Type Name Description Directory dir The directory to open the DirectoryReader on. SearcherFactory searcherFactory An optional SearcherFactory . Pass null if you don't require the searcher to be warmed before going live or other custom behavior. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error Methods | Improve this Doc View Source DecRef(IndexSearcher) Declaration protected override void DecRef(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.DecRef(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source GetRefCount(IndexSearcher) Declaration protected override int GetRefCount(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Returns Type Description System.Int32 Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.GetRefCount(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source GetSearcher(SearcherFactory, IndexReader) Expert: creates a searcher from the provided IndexReader using the provided SearcherFactory . NOTE: this decRefs incoming reader on throwing an exception. Declaration public static IndexSearcher GetSearcher(SearcherFactory searcherFactory, IndexReader reader) Parameters Type Name Description SearcherFactory searcherFactory IndexReader reader Returns Type Description IndexSearcher | Improve this Doc View Source IsSearcherCurrent() Returns true if no changes have occured since this searcher ie. reader was opened, otherwise false . Declaration public bool IsSearcherCurrent() Returns Type Description System.Boolean See Also IsCurrent () | Improve this Doc View Source RefreshIfNeeded(IndexSearcher) Declaration protected override IndexSearcher RefreshIfNeeded(IndexSearcher referenceToRefresh) Parameters Type Name Description IndexSearcher referenceToRefresh Returns Type Description IndexSearcher Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.RefreshIfNeeded(Lucene.Net.Search.IndexSearcher) | Improve this Doc View Source TryIncRef(IndexSearcher) Declaration protected override bool TryIncRef(IndexSearcher reference) Parameters Type Name Description IndexSearcher reference Returns Type Description System.Boolean Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Search.IndexSearcher>.TryIncRef(Lucene.Net.Search.IndexSearcher) Implements System.IDisposable Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>) Number.IsNumber(Object) See Also SearcherFactory"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.NoAfterEffect.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.NoAfterEffect.html",
    "title": "Class AfterEffect.NoAfterEffect | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AfterEffect.NoAfterEffect Implementation used when there is no aftereffect. Inheritance System.Object AfterEffect AfterEffect.NoAfterEffect Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public sealed class NoAfterEffect : AfterEffect Constructors | Improve this Doc View Source NoAfterEffect() Sole constructor: parameter-free Declaration public NoAfterEffect() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.TFIDFSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.TFIDFSimilarity.html",
    "title": "Class TFIDFSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TFIDFSimilarity Implementation of Similarity with the Vector Space Model. Expert: Scoring API. TFIDFSimilarity defines the components of Lucene scoring. Overriding computation of these components is a convenient way to alter Lucene scoring. Suggested reading: Introduction To Information Retrieval, Chapter 6 . The following describes how Lucene scoring evolves from underlying information retrieval models to (efficient) implementation. We first brief on VSM Score , then derive from it Lucene's Conceptual Scoring Formula , from which, finally, evolves Lucene's Practical Scoring Function (the latter is connected directly with Lucene classes and methods). Lucene combines Boolean model (BM) of Information Retrieval with Vector Space Model (VSM) of Information Retrieval - documents \"approved\" by BM are scored by VSM. In VSM, documents and queries are represented as weighted vectors in a multi-dimensional space, where each distinct index term is a dimension, and weights are Tf-idf values. VSM does not require weights to be Tf-idf values, but Tf-idf values are believed to produce search results of high quality, and so Lucene is using Tf-idf . Tf and Idf are described in more detail below, but for now, for completion, let's just say that for given term t and document (or query) x , Tf(t,x) varies with the number of occurrences of term t in x (when one increases so does the other) and idf(t) similarly varies with the inverse of the number of index documents containing term t . VSM score of document d for query q is the Cosine Similarity of the weighted query vectors V(q) and V(d) : cosine-similarity(q,d) = V(q) · V(d) ––––––––– |V(q)| |V(d)| VSM Score Where V(q) · V(d) is the dot product of the weighted vectors, and |V(q)| and |V(d)| are their Euclidean norms . Note: the above equation can be viewed as the dot product of the normalized weighted vectors, in the sense that dividing V(q) by its euclidean norm is normalizing it to a unit vector. Lucene refines VSM score for both search quality and usability: Normalizing V(d) to the unit vector is known to be problematic in that it removes all document length information. For some documents removing this info is probably ok, e.g. a document made by duplicating a certain paragraph 10 times, especially if that paragraph is made of distinct terms. But for a document which contains no duplicated paragraphs, this might be wrong. To avoid this problem, a different document length normalization factor is used, which normalizes to a vector equal to or larger than the unit vector: doc-len-norm(d) . At indexing, users can specify that certain documents are more important than others, by assigning a document boost. For this, the score of each document is also multiplied by its boost value doc-boost(d) . Lucene is field based, hence each query term applies to a single field, document length normalization is by the length of the certain field, and in addition to document boost there are also document fields boosts. The same field can be added to a document during indexing several times, and so the boost of that field is the multiplication of the boosts of the separate additions (or parts) of that field within the document. At search time users can specify boosts to each query, sub-query, and each query term, hence the contribution of a query term to the score of a document is multiplied by the boost of that query term query-boost(q) . A document may match a multi term query without containing all the terms of that query (this is correct for some of the queries), and users can further reward documents matching more query terms through a coordination factor, which is usually larger when more terms are matched: coord-factor(q,d) . Under the simplifying assumption of a single field in the index, we get Lucene's Conceptual scoring formula : score(q,d) = coord-factor(q,d) · query-boost(q) · V(q) · V(d) ––––––––– |V(q)| · doc-len-norm(d) · doc-boost(d) Lucene Conceptual Scoring Formula The conceptual formula is a simplification in the sense that (1) terms and documents are fielded and (2) boosts are usually per query term rather than per query. We now describe how Lucene implements this conceptual scoring formula, and derive from it Lucene's Practical Scoring Function . For efficient score computation some scoring components are computed and aggregated in advance: Query-boost for the query (actually for each query term) is known when search starts. Query Euclidean norm |V(q)| can be computed when search starts, as it is independent of the document being scored. From search optimization perspective, it is a valid question why bother to normalize the query at all, because all scored documents will be multiplied by the same |V(q)| , and hence documents ranks (their order by score) will not be affected by this normalization. There are two good reasons to keep this normalization: Recall that Cosine Similarity can be used find how similar two documents are. One can use Lucene for e.g. clustering, and use a document as a query to compute its similarity to other documents. In this use case it is important that the score of document d3 for query d1 is comparable to the score of document d3 for query d2 . In other words, scores of a document for two distinct queries should be comparable. There are other applications that may require this. And this is exactly what normalizing the query vector V(q) provides: comparability (to a certain extent) of two or more queries. Applying query normalization on the scores helps to keep the scores around the unit vector, hence preventing loss of score data because of floating point precision limitations. Document length norm doc-len-norm(d) and document boost doc-boost(d) are known at indexing time. They are computed in advance and their multiplication is saved as a single value in the index: norm(d) . (In the equations below, norm(t in d) means norm(field(t) in doc d) where field(t) is the field associated with term t .) Lucene's Practical Scoring Function is derived from the above. The color codes demonstrate how it relates to those of the conceptual formula: score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t) 2 · t.Boost · norm(t,d) ) t in q Lucene Practical Scoring Function where tf(t in d) correlates to the term's frequency , defined as the number of times term t appears in the currently scored document d . Documents that have more occurrences of a given term receive a higher score. Note that tf(t in q) is assumed to be 1 and therefore it does not appear in this equation, However if a query contains twice the same term, there will be two term-queries with that same term and hence the computation would still be correct (although not very efficient). The default computation for tf(t in d) in DefaultSimilarity ( Tf(Single) ) is: tf(t in d) = frequency ½ idf(t) stands for Inverse Document Frequency. this value correlates to the inverse of DocFreq (the number of documents in which the term t appears). this means rarer terms give higher contribution to the total score. idf(t) appears for t in both the query and the document, hence it is squared in the equation. The default computation for idf(t) in DefaultSimilarity ( Idf(Int64, Int64) ) is: idf(t) = 1 + log ( NumDocs ––––––––– DocFreq+1 ) coord(q,d) is a score factor based on how many of the query terms are found in the specified document. Typically, a document that contains more of the query's terms will receive a higher score than another document with fewer query terms. this is a search time factor computed in coord(q,d) ( Coord(Int32, Int32) ) by the Similarity in effect at search time. queryNorm(q) is a normalizing factor used to make scores between queries comparable. this factor does not affect document ranking (since all ranked documents are multiplied by the same factor), but rather just attempts to make scores from different queries (or even different indexes) comparable. this is a search time factor computed by the Similarity in effect at search time. The default computation in DefaultSimilarity ( QueryNorm(Single) ) produces a Euclidean norm : queryNorm(q) = queryNorm(sumOfSquaredWeights) = 1 –––––––––––––– sumOfSquaredWeights ½ The sum of squared weights (of the query terms) is computed by the query Weight object. For example, a BooleanQuery computes this value as: sumOfSquaredWeights = q.Boost 2 · ∑ ( idf(t) · t.Boost ) 2 t in q where sumOfSquaredWeights is GetValueForNormalization() and q.Boost is Boost t.Boost is a search time boost of term t in the query q as specified in the query text (see query syntax ), or as set by application calls to Boost . Notice that there is really no direct API for accessing a boost of one term in a multi term query, but rather multi terms are represented in a query as multi TermQuery objects, and so the boost of a term in the query is accessible by calling the sub-query Boost . norm(t,d) encapsulates a few (indexing time) boost and length factors: Field boost - set Boost before adding the field to a document. lengthNorm - computed when the document is added to the index in accordance with the number of tokens of this field in the document, so that shorter fields contribute more to the score. LengthNorm is computed by the Similarity class in effect at indexing. The ComputeNorm(FieldInvertState) method is responsible for combining all of these factors into a single System.Single . When a document is added to the index, all the above factors are multiplied. If the document has multiple fields with the same name, all their boosts are multiplied together: norm(t,d) = lengthNorm · ∏ Boost field f in d named as t Note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class TFIDFSimilarity : Similarity Constructors | Improve this Doc View Source TFIDFSimilarity() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public TFIDFSimilarity() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source Coord(Int32, Int32) Computes a score factor based on the fraction of all query terms that a document contains. this value is multiplied into scores. The presence of a large portion of the query terms indicates a better match with the query, so implementations of this method usually return larger values when the ratio between these parameters is large and smaller values when the ratio between them is small. Declaration public abstract override float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap The number of query terms matched in the document System.Int32 maxOverlap The total number of terms in the query Returns Type Description System.Single A score factor based on term overlap with the query Overrides Similarity.Coord(Int32, Int32) | Improve this Doc View Source DecodeNormValue(Int64) Decodes a normalization factor stored in an index. Declaration public abstract float DecodeNormValue(long norm) Parameters Type Name Description System.Int64 norm Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single) Encodes a normalization factor for storage in an index. Declaration public abstract long EncodeNormValue(float f) Parameters Type Name Description System.Single f Returns Type Description System.Int64 | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Idf(Int64, Int64) Computes a score factor based on a term's document frequency (the number of documents which contain the term). This value is multiplied by the Tf(Single) factor for each term in the query and these products are then summed to form the initial score for a document. Terms that occur in fewer documents are better indicators of topic, so implementations of this method usually return larger values for rare terms, and smaller values for common terms. Declaration public abstract float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq The number of documents which contain the term System.Int64 numDocs The total number of documents in the collection Returns Type Description System.Single A score factor based on the term's document frequency | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics) Computes a score factor for a simple term and returns an explanation for that score factor. The default implementation uses: Idf(docFreq, searcher.MaxDoc); Note that MaxDoc is used instead of NumDocs because also DocFreq is used, and when the latter is inaccurate, so is MaxDoc , and in the same direction. In addition, MaxDoc is more efficient to compute Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description CollectionStatistics collectionStats Collection-level statistics TermStatistics termStats Term-level statistics for the term Returns Type Description Explanation An Explain object that includes both an idf score factor and an explanation for the term. | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics[]) Computes a score factor for a phrase. The default implementation sums the idf factor for each term in the phrase. Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics[] termStats) Parameters Type Name Description CollectionStatistics collectionStats Collection-level statistics TermStatistics [] termStats Term-level statistics for the terms in the phrase Returns Type Description Explanation An Explain object that includes both an idf score factor for the phrase and an explanation for each term. | Improve this Doc View Source LengthNorm(FieldInvertState) Compute an index-time normalization value for this field instance. This value will be stored in a single byte lossy representation by EncodeNormValue(Single) . Declaration public abstract float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Statistics of the current field (such as length, boost, etc) Returns Type Description System.Single An index-time normalization value | Improve this Doc View Source QueryNorm(Single) Computes the normalization value for a query given the sum of the squared weights of each of the query terms. this value is multiplied into the weight of each query term. While the classic query normalization factor is computed as 1/sqrt(sumOfSquaredWeights), other implementations might completely ignore sumOfSquaredWeights (ie return 1). This does not affect ranking, but the default implementation does make scores from different queries more comparable than they would be by eliminating the magnitude of the Query vector as a factor in the score. Declaration public abstract override float QueryNorm(float sumOfSquaredWeights) Parameters Type Name Description System.Single sumOfSquaredWeights The sum of the squares of query term weights Returns Type Description System.Single A normalization factor for query weights Overrides Similarity.QueryNorm(Single) | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) Calculate a scoring factor based on the data in the payload. Implementations are responsible for interpreting what is in the payload. Lucene makes no assumptions about what is in the byte array. Declaration public abstract float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc The docId currently being scored. System.Int32 start The start position of the payload System.Int32 end The end position of the payload BytesRef payload The payload byte array to be scored Returns Type Description System.Single An implementation dependent float to be used as a scoring factor | Improve this Doc View Source SloppyFreq(Int32) Computes the amount of a sloppy phrase match, based on an edit distance. this value is summed for each sloppy phrase match in a document to form the frequency to be used in scoring instead of the exact term count. A phrase match with a small edit distance to a document passage more closely matches the document, so implementations of this method usually return larger values when the edit distance is small and smaller values when it is large. Declaration public abstract float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance The edit distance of this sloppy phrase match Returns Type Description System.Single The frequency increment for this match See Also Slop | Improve this Doc View Source Tf(Single) Computes a score factor based on a term or phrase's frequency in a document. This value is multiplied by the Idf(Int64, Int64) factor for each term in the query and these products are then summed to form the initial score for a document. Terms and phrases repeated in a document indicate the topic of the document, so implementations of this method usually return larger values when freq is large, and smaller values when freq is small. Declaration public abstract float Tf(float freq) Parameters Type Name Description System.Single freq The frequency of a term within a document Returns Type Description System.Single A score factor based on a term's within-document frequency Extension Methods Number.IsNumber(Object) See Also Similarity Similarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.SortRescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortRescorer.html",
    "title": "Class SortRescorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortRescorer A Rescorer that re-sorts according to a provided Sort. Inheritance System.Object Rescorer SortRescorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SortRescorer : Rescorer Constructors | Improve this Doc View Source SortRescorer(Sort) Sole constructor. Declaration public SortRescorer(Sort sort) Parameters Type Name Description Sort sort Methods | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Declaration public override Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation Overrides Rescorer.Explain(IndexSearcher, Explanation, Int32) | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Declaration public override TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher TopDocs firstPassTopDocs System.Int32 topN Returns Type Description TopDocs Overrides Rescorer.Rescore(IndexSearcher, TopDocs, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.FieldMaskingSpanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.FieldMaskingSpanQuery.html",
    "title": "Class FieldMaskingSpanQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldMaskingSpanQuery Wrapper to allow SpanQuery objects participate in composite single-field SpanQueries by 'lying' about their search field. That is, the masked SpanQuery will function as normal, but Field simply hands back the value supplied in this class's constructor. This can be used to support Queries like SpanNearQuery or SpanOrQuery across different fields, which is not ordinarily permitted. This can be useful for denormalized relational data: for example, when indexing a document with conceptually many 'children': teacherid: 1 studentfirstname: james studentsurname: jones teacherid: 2 studenfirstname: james studentsurname: smith studentfirstname: sally studentsurname: jones A SpanNearQuery with a slop of 0 can be applied across two SpanTermQuery objects as follows: SpanQuery q1 = new SpanTermQuery(new Term(\"studentfirstname\", \"james\")); SpanQuery q2 = new SpanTermQuery(new Term(\"studentsurname\", \"jones\")); SpanQuery q2m = new FieldMaskingSpanQuery(q2, \"studentfirstname\"); Query q = new SpanNearQuery(new SpanQuery[] { q1, q2m }, -1, false); to search for 'studentfirstname:james studentsurname:jones' and find teacherid 1 without matching teacherid 2 (which has a 'james' in position 0 and 'jones' in position 1). Note: as Field returns the masked field, scoring will be done using the Similarity and collection statistics of the field name supplied, but with the term statistics of the real field. This may lead to exceptions, poor performance, and unexpected scoring behavior. Inheritance System.Object Query SpanQuery FieldMaskingSpanQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class FieldMaskingSpanQuery : SpanQuery Constructors | Improve this Doc View Source FieldMaskingSpanQuery(SpanQuery, String) Declaration public FieldMaskingSpanQuery(SpanQuery maskedQuery, string maskedField) Parameters Type Name Description SpanQuery maskedQuery System.String maskedField Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source MaskedQuery Declaration public virtual SpanQuery MaskedQuery { get; } Property Value Type Description SpanQuery Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.Directory.IndexInputSlicer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Directory.IndexInputSlicer.html",
    "title": "Class Directory.IndexInputSlicer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Directory.IndexInputSlicer Allows to create one or more sliced IndexInput instances from a single file handle. Some Directory implementations may be able to efficiently map slices of a file into memory when only certain parts of a file are required. @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory.IndexInputSlicer Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class IndexInputSlicer : IDisposable Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source OpenFullSlice() Returns an IndexInput slice starting at offset 0 with a length equal to the length of the underlying file Declaration [Obsolete(\"Only for reading CFS files from 3.x indexes.\")] public abstract IndexInput OpenFullSlice() Returns Type Description IndexInput | Improve this Doc View Source OpenSlice(String, Int64, Int64) Returns an IndexInput slice starting at the given offset with the given length. Declaration public abstract IndexInput OpenSlice(string sliceDescription, long offset, long length) Parameters Type Name Description System.String sliceDescription System.Int64 offset System.Int64 length Returns Type Description IndexInput Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.Directory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Directory.html",
    "title": "Class Directory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Directory A Directory is a flat list of files. Files may be written once, when they are created. Once a file is created it may only be opened for read, or deleted. Random access is permitted both when reading and writing. .NET's i/o APIs not used directly, but rather all i/o is through this API. This permits things such as: implementation of RAM-based indices; implementation indices stored in a database; implementation of an index as a single file; Directory locking is implemented by an instance of LockFactory , and can be changed for each Directory instance using SetLockFactory(LockFactory) . Inheritance System.Object Directory BaseDirectory FilterDirectory NRTCachingDirectory Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class Directory : IDisposable Properties | Improve this Doc View Source LockFactory Get the LockFactory that this Directory instance is using for its locking implementation. Note that this may be null for Directory implementations that provide their own locking implementation. Declaration public abstract LockFactory LockFactory { get; } Property Value Type Description LockFactory Methods | Improve this Doc View Source ClearLock(String) Attempt to clear (forcefully unlock and remove) the specified lock. Only call this at a time when you are certain this lock is no longer in use. Declaration public abstract void ClearLock(string name) Parameters Type Name Description System.String name name of the lock to be cleared. | Improve this Doc View Source Copy(Directory, String, String, IOContext) Copies the file src to Directory to under the new file name dest . If you want to copy the entire source directory to the destination one, you can do so like this: Directory to; // the directory to copy to foreach (string file in dir.ListAll()) { dir.Copy(to, file, newFile, IOContext.DEFAULT); // newFile can be either file, or a new name } NOTE: this method does not check whether dest exist and will overwrite it if it does. Declaration public virtual void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context | Improve this Doc View Source CreateOutput(String, IOContext) Creates a new, empty file in the directory with the given name. Returns a stream writing this file. Declaration public abstract IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput | Improve this Doc View Source CreateSlicer(String, IOContext) Creates an Directory.IndexInputSlicer for the given file name. Directory.IndexInputSlicer allows other Directory implementations to efficiently open one or more sliced IndexInput instances from a single file handle. The underlying file handle is kept open until the Directory.IndexInputSlicer is closed. Throws System.IO.FileNotFoundException if the file does not exist. @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public abstract void DeleteFile(string name) Parameters Type Name Description System.String name | Improve this Doc View Source Dispose() Disposes the store. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes the store. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Declaration protected virtual void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException if this Directory is closed | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration [Obsolete(\"this method will be removed in 5.0\")] public abstract bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean | Improve this Doc View Source FileLength(String) Returns the length of a file in the directory. this method follows the following contract: Declaration public abstract long FileLength(string name) Parameters Type Name Description System.String name the name of the file for which to return the length. Returns Type Description System.Int64 Exceptions Type Condition System.IO.IOException if there was an IO error while retrieving the file's length. | Improve this Doc View Source GetLockID() Return a string identifier that uniquely differentiates this Directory instance from other Directory instances. This ID should be the same if two Directory instances (even in different AppDomains and/or on different machines) are considered \"the same index\". This is how locking \"scopes\" to the right index. Declaration public virtual string GetLockID() Returns Type Description System.String | Improve this Doc View Source ListAll() Returns an array of strings, one for each file in the directory. Declaration public abstract string[] ListAll() Returns Type Description System.String [] Exceptions Type Condition System.IO.DirectoryNotFoundException if the directory is not prepared for any write operations (such as CreateOutput(String, IOContext) ). System.IO.IOException in case of other IO errors | Improve this Doc View Source MakeLock(String) Construct a Lock . Declaration public abstract Lock MakeLock(string name) Parameters Type Name Description System.String name the name of the lock file Returns Type Description Lock | Improve this Doc View Source OpenChecksumInput(String, IOContext) Returns a stream reading an existing file, computing checksum as it reads Declaration public virtual ChecksumIndexInput OpenChecksumInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description ChecksumIndexInput | Improve this Doc View Source OpenInput(String, IOContext) Returns a stream reading an existing file, with the specified read buffer size. The particular Directory implementation may ignore the buffer size. Currently the only Directory implementations that respect this parameter are FSDirectory and CompoundFileDirectory . Throws System.IO.FileNotFoundException if the file does not exist. Declaration public abstract IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput | Improve this Doc View Source SetLockFactory(LockFactory) Set the LockFactory that this Directory instance should use for its locking implementation. Each * instance of LockFactory should only be used for one directory (ie, do not share a single instance across multiple Directories). Declaration public abstract void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory instance of LockFactory . | Improve this Doc View Source Sync(ICollection<String>) Ensure that any writes to these files are moved to stable storage. Lucene uses this to properly commit changes to the index, to prevent a machine/OS crash from corrupting the index. NOTE: Clients may call this method for same files over and over again, so some impls might optimize for that. For other impls the operation can be a noop, for various reasons. Declaration public abstract void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiWordFilterFactory.html",
    "title": "Class ThaiWordFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiWordFilterFactory Factory for ThaiWordFilter . <fieldType name=\"text_thai\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ThaiWordFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ThaiWordFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax [Obsolete(\"Use ThaiTokenizerFactory instead\")] public class ThaiWordFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ThaiWordFilterFactory(IDictionary<String, String>) Creates a new ThaiWordFilterFactory Declaration public ThaiWordFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.CharArrayIterator.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.CharArrayIterator.html",
    "title": "Class CharArrayIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayIterator A CharacterIterator used internally for use with ICU4N.Text.BreakIterator This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ICU4N.Support.Text.CharacterIterator CharArrayIterator Inherited Members ICU4N.Support.Text.CharacterIterator.Done System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.ICU.dll Syntax public abstract class CharArrayIterator : CharacterIterator Properties | Improve this Doc View Source BeginIndex Declaration public override int BeginIndex { get; } Property Value Type Description System.Int32 Overrides ICU4N.Support.Text.CharacterIterator.BeginIndex | Improve this Doc View Source Current Declaration public override char Current { get; } Property Value Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.Current | Improve this Doc View Source EndIndex Declaration public override int EndIndex { get; } Property Value Type Description System.Int32 Overrides ICU4N.Support.Text.CharacterIterator.EndIndex | Improve this Doc View Source Index Declaration public override int Index { get; } Property Value Type Description System.Int32 Overrides ICU4N.Support.Text.CharacterIterator.Index | Improve this Doc View Source Length Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Declaration public virtual int Start { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public virtual char[] Text { get; } Property Value Type Description System.Char [] Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides ICU4N.Support.Text.CharacterIterator.Clone() | Improve this Doc View Source First() Declaration public override char First() Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.First() | Improve this Doc View Source JreBugWorkaround(Char) Declaration protected abstract char JreBugWorkaround(char ch) Parameters Type Name Description System.Char ch Returns Type Description System.Char | Improve this Doc View Source Last() Declaration public override char Last() Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.Last() | Improve this Doc View Source NewSentenceInstance() Create a new CharArrayIterator that works around JRE bugs in a manner suitable for ICU4N.Text.BreakIterator.GetSentenceInstance() . Declaration public static CharArrayIterator NewSentenceInstance() Returns Type Description CharArrayIterator | Improve this Doc View Source NewWordInstance() Create a new CharArrayIterator that works around JRE bugs in a manner suitable for ICU4N.Text.BreakIterator.GetWordInstance() . Declaration public static CharArrayIterator NewWordInstance() Returns Type Description CharArrayIterator | Improve this Doc View Source Next() Declaration public override char Next() Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.Next() | Improve this Doc View Source Previous() Declaration public override char Previous() Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.Previous() | Improve this Doc View Source SetIndex(Int32) Declaration public override char SetIndex(int position) Parameters Type Name Description System.Int32 position Returns Type Description System.Char Overrides ICU4N.Support.Text.CharacterIterator.SetIndex(System.Int32) | Improve this Doc View Source SetText(Char[], Int32, Int32) Set a new region of text to be examined by this iterator Declaration public virtual void SetText(char[] array, int start, int length) Parameters Type Name Description System.Char [] array text buffer to examine System.Int32 start offset into buffer System.Int32 length maximum length to examine"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.SegmentingTokenizerBase.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Util.SegmentingTokenizerBase.html",
    "title": "Class SegmentingTokenizerBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentingTokenizerBase Breaks text into sentences with a ICU4N.Text.BreakIterator and allows subclasses to decompose these sentences into words. This can be used by subclasses that need sentence context for tokenization purposes, such as CJK segmenters. Additionally it can be used by subclasses that want to mark sentence boundaries (with a custom attribute, extra token, position increment, etc) for downstream processing. @lucene.experimental Inheritance System.Object AttributeSource TokenStream Tokenizer SegmentingTokenizerBase ThaiTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.ICU.dll Syntax public abstract class SegmentingTokenizerBase : Tokenizer, IDisposable Constructors | Improve this Doc View Source SegmentingTokenizerBase(AttributeSource.AttributeFactory, TextReader, BreakIterator) Construct a new SegmenterBase, also supplying the AttributeSource.AttributeFactory Declaration public SegmentingTokenizerBase(AttributeSource.AttributeFactory factory, TextReader reader, BreakIterator iterator) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader reader ICU4N.Text.BreakIterator iterator | Improve this Doc View Source SegmentingTokenizerBase(TextReader, BreakIterator) Construct a new SegmenterBase, using the provided ICU4N.Text.BreakIterator for sentence segmentation. Note that you should never share ICU4N.Text.BreakIterator s across different TokenStream s, instead a newly created or cloned one should always be provided to this constructor. Declaration public SegmentingTokenizerBase(TextReader reader, BreakIterator iterator) Parameters Type Name Description System.IO.TextReader reader ICU4N.Text.BreakIterator iterator Fields | Improve this Doc View Source BUFFERMAX Declaration protected const int BUFFERMAX = 1024 Field Value Type Description System.Int32 | Improve this Doc View Source m_buffer Declaration protected readonly char[] m_buffer Field Value Type Description System.Char [] | Improve this Doc View Source m_offset accumulated offset of previous buffers for this reader, for offsetAtt Declaration protected int m_offset Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IncrementWord() Returns true if another word is available Declaration protected abstract bool IncrementWord() Returns Type Description System.Boolean | Improve this Doc View Source IsSafeEnd(Char) For sentence tokenization, these are the unambiguous break positions. Declaration protected virtual bool IsSafeEnd(char ch) Parameters Type Name Description System.Char ch Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() | Improve this Doc View Source SetNextSentence(Int32, Int32) Provides the next input sentence for analysis Declaration protected abstract void SetNextSentence(int sentenceStart, int sentenceEnd) Parameters Type Name Description System.Int32 sentenceStart System.Int32 sentenceEnd Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationAttributeFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationAttributeFactory.html",
    "title": "Class ICUCollationAttributeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationAttributeFactory Converts each token into its ICU4N.Text.CollationKey , and then encodes bytes as an index term. Inheritance System.Object AttributeSource.AttributeFactory ICUCollationAttributeFactory Inherited Members AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax public class ICUCollationAttributeFactory : AttributeSource.AttributeFactory Remarks WARNING: Make sure you use exactly the same ICU4N.Text.Collator at index and query time -- ICU4N.Text.CollationKey s are only comparable when produced by the same ICU4N.Text.Collator . ICU4N.Text.RuleBasedCollator s are independently versioned, so it is safe to search against stored ICU4N.Text.CollationKey s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see ICU4N.Text.Collator Version The collation strength used - see ICU4N.Text.Collator.Strength ICU4N.Text.CollationKey s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationAttributeFactory to generate index terms, do not use CollationAttributeFactory on the query side, or vice versa. ICUCollationAttributeFactory is significantly faster and generates significantly shorter keys than CollationAttributeFactory. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. Constructors | Improve this Doc View Source ICUCollationAttributeFactory(Collator) Create an ICUCollationAttributeFactory , using DEFAULT_ATTRIBUTE_FACTORY as the factory for all other attributes. Declaration public ICUCollationAttributeFactory(Collator collator) Parameters Type Name Description ICU4N.Text.Collator collator ICU4N.Text.CollationKey generator | Improve this Doc View Source ICUCollationAttributeFactory(AttributeSource.AttributeFactory, Collator) Create an ICUCollationAttributeFactory , using the supplied Attribute Factory as the factory for all other attributes. Declaration public ICUCollationAttributeFactory(AttributeSource.AttributeFactory delegate, Collator collator) Parameters Type Name Description AttributeSource.AttributeFactory delegate Attribute Factory ICU4N.Text.Collator collator ICU4N.Text.CollationKey generator Methods | Improve this Doc View Source CreateAttributeInstance<T>() Declaration public override Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T Overrides AttributeSource.AttributeFactory.CreateAttributeInstance<T>()"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationDocValuesField.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationDocValuesField.html",
    "title": "Class ICUCollationDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationDocValuesField Indexes sort keys as a single-valued SortedDocValuesField . Inheritance System.Object Field ICUCollationDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUCollationDocValuesField : Field, IIndexableField Remarks This is more efficient that ICUCollationKeyAnalyzer if the field only has one value: no uninversion is necessary to sort on the field, locale-sensitive range queries can still work via FieldCacheRangeFilter , and the underlying data structures built at index-time are likely more efficient and use less memory than FieldCache. Constructors | Improve this Doc View Source ICUCollationDocValuesField(String, Collator) Create a new ICUCollationDocValuesField . NOTE: you should not create a new one for each document, instead just make one and reuse it during your indexing process, setting the value via SetStringValue(String) . Declaration public ICUCollationDocValuesField(string name, Collator collator) Parameters Type Name Description System.String name Field name. ICU4N.Text.Collator collator Collator for generating collation keys. Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides Field.Name Methods | Improve this Doc View Source SetStringValue(String) Declaration public override void SetStringValue(string value) Parameters Type Name Description System.String value Overrides Field.SetStringValue(String) Implements IIndexableField"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyAnalyzer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyAnalyzer.html",
    "title": "Class ICUCollationKeyAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationKeyAnalyzer Configures KeywordTokenizer with ICUCollationAttributeFactory . Inheritance System.Object Analyzer ICUCollationKeyAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUCollationKeyAnalyzer : Analyzer, IDisposable Remarks Converts the token into its ICU4N.Text.CollationKey , and then encodes the ICU4N.Text.CollationKey either directly or with IndexableBinaryStringTools (see below ), to allow it to be stored as an index term. WARNING: Make sure you use exactly the same ICU4N.Text.Collator at index and query time -- CollationKeys are only comparable when produced by the same ICU4N.Text.Collator . ICU4N.Text.RuleBasedCollator s are independently versioned, so it is safe to search against stored ICU4N.Text.CollationKey s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see ICU4N.Text.Collator Version The collation strength used - see ICU4N.Text.Collator.Strength ICU4N.Text.CollationKey s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationKeyAnalyzer to generate index terms, do not use CollationKeyAnalyzer on the query side, or vice versa. ICUCollationKeyAnalyzer is significantly faster and generates significantly shorter keys than CollationKeyAnalyzer. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. You must specify the required LuceneVersion compatibility when creating ICUCollationKeyAnalyzer : As of 4.0, ICU4N.Text.CollationKey s are directly encoded as bytes. Previous versions will encode the bytes with IndexableBinaryStringTools . Constructors | Improve this Doc View Source ICUCollationKeyAnalyzer(Collator) Declaration [Obsolete(\"Use ICUCollationKeyAnalyzer.ICUCollationKeyAnalyzer(LuceneVersion, Collator) and specify a version instead. This ctor will be removed in Lucene 5.0\")] public ICUCollationKeyAnalyzer(Collator collator) Parameters Type Name Description ICU4N.Text.Collator collator | Improve this Doc View Source ICUCollationKeyAnalyzer(LuceneVersion, Collator) Create a new ICUCollationKeyAnalyzer , using the specified collator . Declaration public ICUCollationKeyAnalyzer(LuceneVersion matchVersion, Collator collator) Parameters Type Name Description LuceneVersion matchVersion See ICUCollationKeyAnalyzer . ICU4N.Text.Collator collator ICU4N.Text.CollationKey generator. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilter.html",
    "title": "Class ICUCollationKeyFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationKeyFilter Converts each token into its ICU4N.Text.CollationKey , and then encodes the ICU4N.Text.CollationKey with IndexableBinaryStringTools , to allow it to be stored as an index term. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUCollationKeyFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax [Obsolete(\"Use ICUCollationAttributeFactory instead, which encodes terms directly as bytes. This filter will be removed in Lucene 5.0\")] public sealed class ICUCollationKeyFilter : TokenFilter, IDisposable Remarks WARNING: Make sure you use exactly the same ICU4N.Text.Collator at index and query time -- CollationKeys are only comparable when produced by the same ICU4N.Text.Collator . ICU4N.Text.RuleBasedCollator s are independently versioned, so it is safe to search against stored ICU4N.Text.CollationKey s if the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): Collator version - see ICU4N.Text.Collator Version The collation strength used - see ICU4N.Text.Collator.Strength ICU4N.Text.CollationKey s generated by ICU Collators are not compatible with those generated by java.text.Collators. Specifically, if you use ICUCollationKeyAnalyzer to generate index terms, do not use CollationKeyAnalyzer on the query side, or vice versa. ICUCollationKeyAnalyzer is significantly faster and generates significantly shorter keys than CollationKeyAnalyzer. See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. Constructors | Improve this Doc View Source ICUCollationKeyFilter(TokenStream, Collator) Creates a new ICUCollationKeyFilter . Declaration public ICUCollationKeyFilter(TokenStream input, Collator collator) Parameters Type Name Description TokenStream input Source token stream. ICU4N.Text.Collator collator ICU4N.Text.CollationKey generator. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.PrecedenceQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.PrecedenceQueryParser.html",
    "title": "Class PrecedenceQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrecedenceQueryParser This query parser works exactly as the standard query parser ( StandardQueryParser ), except that it respect the boolean precedence, so <a AND b OR c AND d> is parsed to <(+a +b) (+c +d)> instead of <+a +b +c +d>. EXPERT: This class extends StandardQueryParser , but uses PrecedenceQueryNodeProcessorPipeline instead of StandardQueryNodeProcessorPipeline to process the query tree. Inheritance System.Object QueryParserHelper < Query > StandardQueryParser PrecedenceQueryParser Implements ICommonQueryParserConfiguration Inherited Members StandardQueryParser.ToString() StandardQueryParser.Parse(String, String) StandardQueryParser.DefaultOperator StandardQueryParser.LowercaseExpandedTerms StandardQueryParser.AllowLeadingWildcard StandardQueryParser.EnablePositionIncrements StandardQueryParser.MultiTermRewriteMethod StandardQueryParser.SetMultiFields(String[]) StandardQueryParser.GetMultiFields() StandardQueryParser.FuzzyPrefixLength StandardQueryParser.NumericConfigMap StandardQueryParser.Locale StandardQueryParser.TimeZone StandardQueryParser.SetDefaultPhraseSlop(Int32) StandardQueryParser.Analyzer StandardQueryParser.PhraseSlop StandardQueryParser.FuzzyMinSim StandardQueryParser.FieldsBoost StandardQueryParser.SetDateResolution(DateTools.Resolution) StandardQueryParser.DateResolution StandardQueryParser.SetDateResolution(IDictionary<String, Nullable<DateTools.Resolution>>) StandardQueryParser.DateResolutionMap QueryParserHelper<Query>.QueryNodeProcessor QueryParserHelper<Query>.SetQueryNodeProcessor(IQueryNodeProcessor) QueryParserHelper<Query>.SetSyntaxParser(ISyntaxParser) QueryParserHelper<Query>.SetQueryBuilder(IQueryBuilder<Query>) QueryParserHelper<Query>.QueryConfigHandler QueryParserHelper<Query>.QueryBuilder QueryParserHelper<Query>.SyntaxParser QueryParserHelper<Query>.SetQueryConfigHandler(QueryConfigHandler) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Precedence Assembly : Lucene.Net.QueryParser.dll Syntax public class PrecedenceQueryParser : StandardQueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source PrecedenceQueryParser() StandardQueryParser() Declaration public PrecedenceQueryParser() | Improve this Doc View Source PrecedenceQueryParser(Analyzer) StandardQueryParser(Analyzer) Declaration public PrecedenceQueryParser(Analyzer analyer) Parameters Type Name Description Analyzer analyer Implements ICommonQueryParserConfiguration See Also StandardQueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.BooleanModifiersQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.BooleanModifiersQueryNodeProcessor.html",
    "title": "Class BooleanModifiersQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanModifiersQueryNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. It walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For any other BooleanQueryNode which is not an OrQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Inheritance System.Object QueryNodeProcessor BooleanModifiersQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Precedence.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanModifiersQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanModifiersQueryNodeProcessor() Declaration public BooleanModifiersQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also DEFAULT_OPERATOR"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.PrecedenceQueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Precedence.Processors.PrecedenceQueryNodeProcessorPipeline.html",
    "title": "Class PrecedenceQueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrecedenceQueryNodeProcessorPipeline This processor pipeline extends StandardQueryNodeProcessorPipeline and enables boolean precedence on it. EXPERT: the precedence is enabled by removing GroupQueryNodeProcessor from the StandardQueryNodeProcessorPipeline and appending BooleanModifiersQueryNodeProcessor to the pipeline. Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline PrecedenceQueryNodeProcessorPipeline Implements IQueryNodeProcessor System.Collections.Generic.IList < IQueryNodeProcessor > System.Collections.Generic.ICollection < IQueryNodeProcessor > System.Collections.Generic.IEnumerable < IQueryNodeProcessor > System.Collections.IEnumerable Inherited Members QueryNodeProcessorPipeline.GetQueryConfigHandler() QueryNodeProcessorPipeline.Process(IQueryNode) QueryNodeProcessorPipeline.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessorPipeline.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Clear() QueryNodeProcessorPipeline.Contains(Object) QueryNodeProcessorPipeline.Item[Int32] QueryNodeProcessorPipeline.IndexOf(IQueryNodeProcessor) QueryNodeProcessorPipeline.GetEnumerator() QueryNodeProcessorPipeline.Remove(IQueryNodeProcessor) QueryNodeProcessorPipeline.RemoveAt(Int32) QueryNodeProcessorPipeline.RemoveRange(Int32, Int32) QueryNodeProcessorPipeline.Set(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.Count QueryNodeProcessorPipeline.IsReadOnly QueryNodeProcessorPipeline.GetRange(Int32, Int32) QueryNodeProcessorPipeline.Insert(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.ICollection<IQueryNodeProcessor>.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Contains(IQueryNodeProcessor) QueryNodeProcessorPipeline.CopyTo(IQueryNodeProcessor[], Int32) QueryNodeProcessorPipeline.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Precedence.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class PrecedenceQueryNodeProcessorPipeline : StandardQueryNodeProcessorPipeline, IQueryNodeProcessor, IList<IQueryNodeProcessor>, ICollection<IQueryNodeProcessor>, IEnumerable<IQueryNodeProcessor>, IEnumerable Constructors | Improve this Doc View Source PrecedenceQueryNodeProcessorPipeline(QueryConfigHandler) StandardQueryNodeProcessorPipeline(QueryConfigHandler) Declaration public PrecedenceQueryNodeProcessorPipeline(QueryConfigHandler queryConfig) Parameters Type Name Description QueryConfigHandler queryConfig Implements IQueryNodeProcessor System.Collections.Generic.IList<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable See Also PrecedenceQueryParser StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.AnyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.AnyQueryNodeBuilder.html",
    "title": "Class AnyQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnyQueryNodeBuilder Builds a BooleanQuery of SHOULD clauses, possibly with some minimum number to match. Inheritance System.Object AnyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class AnyQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source AnyQueryNodeBuilder() Declaration public AnyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BooleanQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BooleanQueryNodeBuilder.html",
    "title": "Class BooleanQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQueryNodeBuilder Builds a BooleanQuery object from a BooleanQueryNode object. Every children in the BooleanQueryNode object must be already tagged using QUERY_TREE_BUILDER_TAGID with a Query object. It takes in consideration if the children is a ModifierQueryNode to define the BooleanClause . Inheritance System.Object BooleanQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source BooleanQueryNodeBuilder() Declaration public BooleanQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BoostQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.BoostQueryNodeBuilder.html",
    "title": "Class BoostQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostQueryNodeBuilder This builder basically reads the Query object set on the BoostQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the boost value defined in the BoostQueryNode . Inheritance System.Object BoostQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source BoostQueryNodeBuilder() Declaration public BoostQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.DummyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.DummyQueryNodeBuilder.html",
    "title": "Class DummyQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DummyQueryNodeBuilder This builder does nothing. Commonly used for IQueryNode objects that are built by its parent's builder. Inheritance System.Object DummyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class DummyQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source DummyQueryNodeBuilder() Constructs a DummyQueryNodeBuilder object. Declaration public DummyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Always return null . Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query null Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also IStandardQueryBuilder QueryTreeBuilder <TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FieldQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FieldQueryNodeBuilder.html",
    "title": "Class FieldQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldQueryNodeBuilder Builds a TermQuery object from a FieldQueryNode object. Inheritance System.Object FieldQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source FieldQueryNodeBuilder() Declaration public FieldQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FuzzyQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.FuzzyQueryNodeBuilder.html",
    "title": "Class FuzzyQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyQueryNodeBuilder Builds a FuzzyQuery object from a FuzzyQueryNode object. Inheritance System.Object FuzzyQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source FuzzyQueryNodeBuilder() Declaration public FuzzyQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.GroupQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.GroupQueryNodeBuilder.html",
    "title": "Class GroupQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupQueryNodeBuilder Builds no object, it only returns the Query object set on the GroupQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. Inheritance System.Object GroupQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class GroupQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source GroupQueryNodeBuilder() Declaration public GroupQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.IStandardQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.IStandardQueryBuilder.html",
    "title": "Interface IStandardQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStandardQueryBuilder This interface should be implemented by every class that wants to build Query objects from IQueryNode objects. Inherited Members IQueryBuilder<Query>.Build(IQueryNode) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface IStandardQueryBuilder : IQueryBuilder<Query> See Also IQueryBuilder <TQuery> QueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchAllDocsQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchAllDocsQueryNodeBuilder.html",
    "title": "Class MatchAllDocsQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQueryNodeBuilder Builds a MatchAllDocsQuery object from a MatchAllDocsQueryNode object. Inheritance System.Object MatchAllDocsQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MatchAllDocsQueryNodeBuilder() Declaration public MatchAllDocsQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchNoDocsQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MatchNoDocsQueryNodeBuilder.html",
    "title": "Class MatchNoDocsQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchNoDocsQueryNodeBuilder Builds an empty BooleanQuery object from a MatchNoDocsQueryNode object. Inheritance System.Object MatchNoDocsQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchNoDocsQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MatchNoDocsQueryNodeBuilder() Declaration public MatchNoDocsQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.ModifierQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.ModifierQueryNodeBuilder.html",
    "title": "Class ModifierQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ModifierQueryNodeBuilder Builds no object, it only returns the Query object set on the ModifierQueryNode object using a QUERY_TREE_BUILDER_TAGID tag. Inheritance System.Object ModifierQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class ModifierQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source ModifierQueryNodeBuilder() Declaration public ModifierQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MultiPhraseQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.MultiPhraseQueryNodeBuilder.html",
    "title": "Class MultiPhraseQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiPhraseQueryNodeBuilder Builds a MultiPhraseQuery object from a MultiPhraseQueryNode object. Inheritance System.Object MultiPhraseQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiPhraseQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source MultiPhraseQueryNodeBuilder() Declaration public MultiPhraseQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.NumericRangeQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.NumericRangeQueryNodeBuilder.html",
    "title": "Class NumericRangeQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQueryNodeBuilder Builds NumericRangeQuery s out of NumericRangeQueryNode s. Inheritance System.Object NumericRangeQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source NumericRangeQueryNodeBuilder() Constructs a NumericRangeQueryNodeBuilder object. Declaration public NumericRangeQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also NumericRangeQuery NumericRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PhraseQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PhraseQueryNodeBuilder.html",
    "title": "Class PhraseQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhraseQueryNodeBuilder Builds a PhraseQuery object from a TokenizedPhraseQueryNode object. Inheritance System.Object PhraseQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source PhraseQueryNodeBuilder() Declaration public PhraseQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PrefixWildcardQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.PrefixWildcardQueryNodeBuilder.html",
    "title": "Class PrefixWildcardQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixWildcardQueryNodeBuilder Builds a PrefixQuery object from a PrefixWildcardQueryNode object. Inheritance System.Object PrefixWildcardQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class PrefixWildcardQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source PrefixWildcardQueryNodeBuilder() Declaration public PrefixWildcardQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.RegexpQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.RegexpQueryNodeBuilder.html",
    "title": "Class RegexpQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpQueryNodeBuilder Builds a RegexpQuery object from a RegexpQueryNode object. Inheritance System.Object RegexpQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class RegexpQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source RegexpQueryNodeBuilder() Declaration public RegexpQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.SlopQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.SlopQueryNodeBuilder.html",
    "title": "Class SlopQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SlopQueryNodeBuilder This builder basically reads the Query object set on the SlopQueryNode child using QUERY_TREE_BUILDER_TAGID and applies the slop value defined in the SlopQueryNode . Inheritance System.Object SlopQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SlopQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source SlopQueryNodeBuilder() Declaration public SlopQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardBooleanQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardBooleanQueryNodeBuilder.html",
    "title": "Class StandardBooleanQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardBooleanQueryNodeBuilder This builder does the same as the BooleanQueryNodeBuilder , but this considers if the built BooleanQuery should have its coord disabled or not. Inheritance System.Object StandardBooleanQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardBooleanQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source StandardBooleanQueryNodeBuilder() Declaration public StandardBooleanQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also BooleanQueryNodeBuilder BooleanQuery Coord(Int32, Int32)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardQueryTreeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.StandardQueryTreeBuilder.html",
    "title": "Class StandardQueryTreeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardQueryTreeBuilder This query tree builder only defines the necessary map to build a Query tree object. It should be used to generate a Query tree object from a query node tree processed by a StandardQueryNodeProcessorPipeline . Inheritance System.Object QueryTreeBuilder QueryTreeBuilder < Query > StandardQueryTreeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members QueryTreeBuilder<Query>.SetBuilder(String, IQueryBuilder<Query>) QueryTreeBuilder<Query>.SetBuilder(Type, IQueryBuilder<Query>) QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryTreeBuilder : QueryTreeBuilder<Query>, IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source StandardQueryTreeBuilder() Declaration public StandardQueryTreeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public override Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Overrides Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder<Lucene.Net.Search.Query>.Build(Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode) Implements IStandardQueryBuilder IQueryBuilder<TQuery> See Also QueryTreeBuilder StandardQueryNodeProcessorPipeline"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.TermRangeQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.TermRangeQueryNodeBuilder.html",
    "title": "Class TermRangeQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeQueryNodeBuilder Builds a TermRangeQuery object from a TermRangeQueryNode object. Inheritance System.Object TermRangeQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source TermRangeQueryNodeBuilder() Declaration public TermRangeQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.WildcardQueryNodeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Builders.WildcardQueryNodeBuilder.html",
    "title": "Class WildcardQueryNodeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WildcardQueryNodeBuilder Builds a WildcardQuery object from a WildcardQueryNode object. Inheritance System.Object WildcardQueryNodeBuilder Implements IStandardQueryBuilder IQueryBuilder < Query > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNodeBuilder : IStandardQueryBuilder, IQueryBuilder<Query> Constructors | Improve this Doc View Source WildcardQueryNodeBuilder() Declaration public WildcardQueryNodeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Declaration public virtual Query Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode Returns Type Description Query Implements IStandardQueryBuilder IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldBoostMapFCListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Config.FieldBoostMapFCListener.html",
    "title": "Class FieldBoostMapFCListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldBoostMapFCListener This listener listens for every field configuration request and assign a BOOST to the equivalent FieldConfig based on a defined map: fieldName -> boostValue stored in FIELD_BOOST_MAP . Inheritance System.Object FieldBoostMapFCListener Implements IFieldConfigListener Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldBoostMapFCListener : IFieldConfigListener Constructors | Improve this Doc View Source FieldBoostMapFCListener(QueryConfigHandler) Declaration public FieldBoostMapFCListener(QueryConfigHandler config) Parameters Type Name Description QueryConfigHandler config Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) Declaration public virtual void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig Implements IFieldConfigListener See Also FIELD_BOOST_MAP BOOST FieldConfig IFieldConfigListener"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.UnsupportedSpatialOperation.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Queries.UnsupportedSpatialOperation.html",
    "title": "Class UnsupportedSpatialOperation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnsupportedSpatialOperation Exception thrown when the SpatialStrategy cannot implement the requested operation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object System.Exception System.NotSupportedException UnsupportedSpatialOperation Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Queries Assembly : Lucene.Net.Spatial.dll Syntax public class UnsupportedSpatialOperation : NotSupportedException Constructors | Improve this Doc View Source UnsupportedSpatialOperation(SpatialOperation) Declaration public UnsupportedSpatialOperation(SpatialOperation op) Parameters Type Name Description SpatialOperation op"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.SerializedDVStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Serialized.SerializedDVStrategy.html",
    "title": "Class SerializedDVStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SerializedDVStrategy A SpatialStrategy based on serializing a Shape stored into BinaryDocValues. This is not at all fast; it's designed to be used in conjuction with another index based SpatialStrategy that is approximated(like RecursivePrefixTreeStrategy ) to add precision or eventually make more specific / advanced calculations on the per-document geometry. The serialization uses Spatial4j's Spatial4n.Core.IO.BinaryCodec . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy SerializedDVStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Serialized Assembly : Lucene.Net.Spatial.dll Syntax public class SerializedDVStrategy : SpatialStrategy Constructors | Improve this Doc View Source SerializedDVStrategy(SpatialContext, String) Constructs the spatial strategy with its mandatory arguments. Declaration public SerializedDVStrategy(SpatialContext ctx, string fieldName) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.String fieldName Methods | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double) | Improve this Doc View Source MakeFilter(SpatialArgs) Returns a Filter that should be used with QUERY_FIRST_FILTER_STRATEGY . Use in another manner is likely to result in an System.NotSupportedException to prevent misuse because the filter can't efficiently work via iteration. Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source MakeQuery(SpatialArgs) Declaration public override ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Overrides SpatialStrategy.MakeQuery(SpatialArgs) | Improve this Doc View Source MakeShapeValueSource() Provides access to each shape per document as a ValueSource in which ObjectVal(Int32) returns a Spatial4n.Core.Shapes.IShape . Declaration public virtual ValueSource MakeShapeValueSource() Returns Type Description ValueSource"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.CachingDoubleValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.CachingDoubleValueSource.html",
    "title": "Class CachingDoubleValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachingDoubleValueSource Caches the doubleVal of another value source in a HashMap so that it is computed only once. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource CachingDoubleValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class CachingDoubleValueSource : ValueSource Constructors | Improve this Doc View Source CachingDoubleValueSource(ValueSource) Declaration public CachingDoubleValueSource(ValueSource source) Parameters Type Name Description ValueSource source Fields | Improve this Doc View Source m_cache Declaration protected readonly IDictionary<int, double> m_cache Field Value Type Description System.Collections.Generic.IDictionary < System.Int32 , System.Double > | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.DistanceToShapeValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.DistanceToShapeValueSource.html",
    "title": "Class DistanceToShapeValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistanceToShapeValueSource The distance from a provided Point to a Point retrieved from a ValueSource via ObjectVal(Int32) . The distance is calculated via a Spatial4n.Core.Distance.IDistanceCalculator . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ValueSource DistanceToShapeValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class DistanceToShapeValueSource : ValueSource Constructors | Improve this Doc View Source DistanceToShapeValueSource(ValueSource, IPoint, Double, SpatialContext) Declaration public DistanceToShapeValueSource(ValueSource shapeValueSource, IPoint queryPoint, double multiplier, SpatialContext ctx) Parameters Type Name Description ValueSource shapeValueSource Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Spatial4n.Core.Context.SpatialContext ctx Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCache-1.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCache-1.html",
    "title": "Class ShapeFieldCache<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShapeFieldCache<T> Bounded Cache of Shapes associated with docIds. Note, multiple Shapes can be associated with a given docId WARNING: This class holds the data in an extremely inefficient manner as all Points are in memory as objects and they are stored in many Lists (one per document). So it works but doesn't scale. It will be replaced in the future. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ShapeFieldCache<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapeFieldCache<T> where T : IShape Type Parameters Name Description T Constructors | Improve this Doc View Source ShapeFieldCache(Int32, Int32) Declaration public ShapeFieldCache(int length, int defaultLength) Parameters Type Name Description System.Int32 length System.Int32 defaultLength Properties | Improve this Doc View Source DefaultLength Declaration public int DefaultLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int32, T) Declaration public virtual void Add(int docid, T s) Parameters Type Name Description System.Int32 docid T s | Improve this Doc View Source GetShapes(Int32) Declaration public virtual IList<T> GetShapes(int docid) Parameters Type Name Description System.Int32 docid Returns Type Description System.Collections.Generic.IList <T>"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheDistanceValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheDistanceValueSource.html",
    "title": "Class ShapeFieldCacheDistanceValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShapeFieldCacheDistanceValueSource An implementation of the Lucene ValueSource that returns the spatial distance between an input point and a document's points in ShapeFieldCacheProvider<T> . The shortest distance is returned if a document has more than one point. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource ShapeFieldCacheDistanceValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapeFieldCacheDistanceValueSource : ValueSource Constructors | Improve this Doc View Source ShapeFieldCacheDistanceValueSource(SpatialContext, ShapeFieldCacheProvider<IPoint>, IPoint, Double) Declaration public ShapeFieldCacheDistanceValueSource(SpatialContext ctx, ShapeFieldCacheProvider<IPoint> provider, IPoint from, double multiplier) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx ShapeFieldCacheProvider < Spatial4n.Core.Shapes.IPoint > provider Spatial4n.Core.Shapes.IPoint from System.Double multiplier Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheProvider-1.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapeFieldCacheProvider-1.html",
    "title": "Class ShapeFieldCacheProvider<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShapeFieldCacheProvider<T> Provides access to a ShapeFieldCache<T> for a given AtomicReader . If a Cache does not exist for the TextReader, then it is built by iterating over the all terms for a given field, reconstructing the Shape from them, and adding them to the Cache. Inheritance System.Object ShapeFieldCacheProvider<T> PointPrefixTreeFieldCacheProvider Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public abstract class ShapeFieldCacheProvider<T> where T : IShape Type Parameters Name Description T Constructors | Improve this Doc View Source ShapeFieldCacheProvider(String, Int32) Declaration public ShapeFieldCacheProvider(string shapeField, int defaultSize) Parameters Type Name Description System.String shapeField System.Int32 defaultSize Fields | Improve this Doc View Source m_defaultSize Declaration protected readonly int m_defaultSize Field Value Type Description System.Int32 | Improve this Doc View Source m_shapeField Declaration protected readonly string m_shapeField Field Value Type Description System.String Methods | Improve this Doc View Source GetCache(AtomicReader) Declaration public virtual ShapeFieldCache<T> GetCache(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description ShapeFieldCache <T> | Improve this Doc View Source ReadShape(BytesRef) Declaration protected abstract T ReadShape(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description T"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapePredicateValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ShapePredicateValueSource.html",
    "title": "Class ShapePredicateValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShapePredicateValueSource A boolean ValueSource that compares a shape from a provided ValueSource with a given Spatial4n.Core.Shapes.IShape and sees if it matches a given SpatialOperation (the predicate). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ValueSource ShapePredicateValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ShapePredicateValueSource : ValueSource Constructors | Improve this Doc View Source ShapePredicateValueSource(ValueSource, SpatialOperation, IShape) Declaration public ShapePredicateValueSource(ValueSource shapeValuesource, SpatialOperation op, IShape queryShape) Parameters Type Name Description ValueSource shapeValuesource Must yield Spatial4n.Core.Shapes.IShape instances from it's ObjectVal(doc). If null then the result is false. This is the left-hand (indexed) side. SpatialOperation op the predicate Spatial4n.Core.Shapes.IShape queryShape The shape on the right-hand (query) side. Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ValueSourceFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Util.ValueSourceFilter.html",
    "title": "Class ValueSourceFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ValueSourceFilter Filter that matches all documents where a ValueSource is in between a range of min and max inclusive. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Filter ValueSourceFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Util Assembly : Lucene.Net.Spatial.dll Syntax public class ValueSourceFilter : Filter Constructors | Improve this Doc View Source ValueSourceFilter(Filter, ValueSource, Double, Double) Declaration public ValueSourceFilter(Filter startingFilter, ValueSource source, double min, double max) Parameters Type Name Description Filter startingFilter ValueSource source System.Double min System.Double max Properties | Improve this Doc View Source Max Declaration public double Max { get; } Property Value Type Description System.Double | Improve this Doc View Source Min Declaration public double Min { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.DistanceValueSource.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.DistanceValueSource.html",
    "title": "Class DistanceValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistanceValueSource An implementation of the Lucene ValueSource model that returns the distance for a PointVectorStrategy . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource DistanceValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Vector Assembly : Lucene.Net.Spatial.dll Syntax public class DistanceValueSource : ValueSource Constructors | Improve this Doc View Source DistanceValueSource(PointVectorStrategy, IPoint, Double) Constructor. Declaration public DistanceValueSource(PointVectorStrategy strategy, IPoint from, double multiplier) Parameters Type Name Description PointVectorStrategy strategy Spatial4n.Core.Shapes.IPoint from System.Double multiplier Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Returns the ValueSource description. Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Returns the FunctionValues used by the function query. Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.PointVectorStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Vector.PointVectorStrategy.html",
    "title": "Class PointVectorStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PointVectorStrategy Simple SpatialStrategy which represents Points in two numeric DoubleField s. The Strategy's best feature is decent distance sort. Characteristics: Only indexes points; just one per field value. Can query by a rectangle or circle. Intersects and IsWithin is supported. Uses the FieldCache for MakeDistanceValueSource(IPoint) and for searching with a Circle. Implementation: This is a simple Strategy. Search works with NumericRangeQuery s on an x & y pair of fields. A Circle query does the same bbox query but adds a ValueSource filter on MakeDistanceValueSource(IPoint) . One performance shortcoming with this strategy is that a scenario involving both a search using a Circle and sort will result in calculations for the spatial distance being done twice -- once for the filter and second for the sort. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PointVectorStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Vector Assembly : Lucene.Net.Spatial.dll Syntax public class PointVectorStrategy : SpatialStrategy Constructors | Improve this Doc View Source PointVectorStrategy(SpatialContext, String) Declaration public PointVectorStrategy(SpatialContext ctx, string fieldNamePrefix) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.String fieldNamePrefix Fields | Improve this Doc View Source SUFFIX_X Declaration public static string SUFFIX_X Field Value Type Description System.String | Improve this Doc View Source SUFFIX_Y Declaration public static string SUFFIX_Y Field Value Type Description System.String Properties | Improve this Doc View Source PrecisionStep Declaration public virtual int PrecisionStep { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CreateIndexableFields(IPoint) See CreateIndexableFields(IShape) Declaration public virtual Field[] CreateIndexableFields(IPoint point) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint point Returns Type Description Field [] | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double) | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source MakeQuery(SpatialArgs) Declaration public override ConstantScoreQuery MakeQuery(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description ConstantScoreQuery Overrides SpatialStrategy.MakeQuery(SpatialArgs) | Improve this Doc View Source MakeQueryDistanceScore(SpatialArgs) Declaration public virtual Query MakeQueryDistanceScore(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Query"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.ScoreTerm.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.DirectSpellChecker.ScoreTerm.html",
    "title": "Class DirectSpellChecker.ScoreTerm | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectSpellChecker.ScoreTerm Holds a spelling correction for internal usage inside DirectSpellChecker . Inheritance System.Object DirectSpellChecker.ScoreTerm Implements System.IComparable < DirectSpellChecker.ScoreTerm > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax protected class ScoreTerm : IComparable<DirectSpellChecker.ScoreTerm> Constructors | Improve this Doc View Source ScoreTerm() Constructor. Declaration public ScoreTerm() Properties | Improve this Doc View Source Boost The boost representing the similarity from the FuzzyTermsEnum (internal similarity score) Declaration public float Boost { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Docfreq The df of the spellcheck correction. Declaration public int Docfreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score The similarity score. Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source Term The actual spellcheck correction. Declaration public BytesRef Term { get; set; } Property Value Type Description BytesRef | Improve this Doc View Source TermAsString The spellcheck correction represented as string, can be null . Declaration public string TermAsString { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(DirectSpellChecker.ScoreTerm) Declaration public virtual int CompareTo(DirectSpellChecker.ScoreTerm other) Parameters Type Name Description DirectSpellChecker.ScoreTerm other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements System.IComparable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectAllocator.html",
    "title": "Class ByteBlockPool.DirectAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBlockPool.DirectAllocator A simple ByteBlockPool.Allocator that never recycles. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) ByteBlockPool.Allocator.GetByteBlock() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class DirectAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source DirectAllocator() Declaration public DirectAllocator() | Improve this Doc View Source DirectAllocator(Int32) Declaration public DirectAllocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Methods | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.ByteSequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.ByteSequenceOutputs.html",
    "title": "Class ByteSequenceOutputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteSequenceOutputs An FST Outputs{BytesRef} implementation where each output is a sequence of bytes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < BytesRef > ByteSequenceOutputs Inherited Members Outputs<BytesRef>.WriteFinalOutput(BytesRef, DataOutput) Outputs<BytesRef>.ReadFinalOutput(DataInput) Outputs<BytesRef>.Merge(BytesRef, BytesRef) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class ByteSequenceOutputs : Outputs<BytesRef> Properties | Improve this Doc View Source NoOutput Declaration public override BytesRef NoOutput { get; } Property Value Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static ByteSequenceOutputs Singleton { get; } Property Value Type Description ByteSequenceOutputs Methods | Improve this Doc View Source Add(BytesRef, BytesRef) Declaration public override BytesRef Add(BytesRef prefix, BytesRef output) Parameters Type Name Description BytesRef prefix BytesRef output Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Add(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Common(BytesRef, BytesRef) Declaration public override BytesRef Common(BytesRef output1, BytesRef output2) Parameters Type Name Description BytesRef output1 BytesRef output2 Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Common(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source OutputToString(BytesRef) Declaration public override string OutputToString(BytesRef output) Parameters Type Name Description BytesRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.OutputToString(Lucene.Net.Util.BytesRef) | Improve this Doc View Source Read(DataInput) Declaration public override BytesRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(BytesRef, BytesRef) Declaration public override BytesRef Subtract(BytesRef output, BytesRef inc) Parameters Type Name Description BytesRef output BytesRef inc Returns Type Description BytesRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Subtract(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source Write(BytesRef, DataOutput) Declaration public override void Write(BytesRef prefix, DataOutput out) Parameters Type Name Description BytesRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.BytesRef>.Write(Lucene.Net.Util.BytesRef, Lucene.Net.Store.DataOutput) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.BytesRefFSTEnum-1.html",
    "title": "Class BytesRefFSTEnum<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefFSTEnum<T> Enumerates all input ( BytesRef ) + output pairs in an FST. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum <T> BytesRefFSTEnum<T> Inherited Members FSTEnum<T>.m_fst FSTEnum<T>.m_arcs FSTEnum<T>.m_output FSTEnum<T>.NO_OUTPUT FSTEnum<T>.m_fstReader FSTEnum<T>.m_scratchArc FSTEnum<T>.m_upto FSTEnum<T>.m_targetLength FSTEnum<T>.RewindPrefix() FSTEnum<T>.DoNext() FSTEnum<T>.DoSeekCeil() FSTEnum<T>.DoSeekFloor() FSTEnum<T>.DoSeekExact() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class BytesRefFSTEnum<T> : FSTEnum<T> Type Parameters Name Description T Constructors | Improve this Doc View Source BytesRefFSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration public BytesRefFSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Properties | Improve this Doc View Source Current Declaration public BytesRefFSTEnum.InputOutput<T> Current { get; } Property Value Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source CurrentLabel Declaration protected override int CurrentLabel { get; set; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.CurrentLabel | Improve this Doc View Source TargetLabel Declaration protected override int TargetLabel { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.TargetLabel Methods | Improve this Doc View Source Grow() Declaration protected override void Grow() Overrides Lucene.Net.Util.Fst.FSTEnum<T>.Grow() | Improve this Doc View Source Next() Declaration public BytesRefFSTEnum.InputOutput<T> Next() Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekCeil(BytesRef) Seeks to smallest term that's >= target. Declaration public BytesRefFSTEnum.InputOutput<T> SeekCeil(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekExact(BytesRef) Seeks to exactly this term, returning null if the term doesn't exist. This is faster than using SeekFloor(BytesRef) or SeekCeil(BytesRef) because it short-circuits as soon the match is not found. Declaration public BytesRefFSTEnum.InputOutput<T> SeekExact(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekFloor(BytesRef) Seeks to biggest term that's <= target. Declaration public BytesRefFSTEnum.InputOutput<T> SeekFloor(BytesRef target) Parameters Type Name Description BytesRef target Returns Type Description BytesRefFSTEnum.InputOutput <T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.CharSequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.CharSequenceOutputs.html",
    "title": "Class CharSequenceOutputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharSequenceOutputs An FST Outputs<T> implementation where each output is a sequence of characters. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < CharsRef > CharSequenceOutputs Inherited Members Outputs<CharsRef>.WriteFinalOutput(CharsRef, DataOutput) Outputs<CharsRef>.ReadFinalOutput(DataInput) Outputs<CharsRef>.Merge(CharsRef, CharsRef) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class CharSequenceOutputs : Outputs<CharsRef> Properties | Improve this Doc View Source NoOutput Declaration public override CharsRef NoOutput { get; } Property Value Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static CharSequenceOutputs Singleton { get; } Property Value Type Description CharSequenceOutputs Methods | Improve this Doc View Source Add(CharsRef, CharsRef) Declaration public override CharsRef Add(CharsRef prefix, CharsRef output) Parameters Type Name Description CharsRef prefix CharsRef output Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Add(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source Common(CharsRef, CharsRef) Declaration public override CharsRef Common(CharsRef output1, CharsRef output2) Parameters Type Name Description CharsRef output1 CharsRef output2 Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Common(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source OutputToString(CharsRef) Declaration public override string OutputToString(CharsRef output) Parameters Type Name Description CharsRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.OutputToString(Lucene.Net.Util.CharsRef) | Improve this Doc View Source Read(DataInput) Declaration public override CharsRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(CharsRef, CharsRef) Declaration public override CharsRef Subtract(CharsRef output, CharsRef inc) Parameters Type Name Description CharsRef output CharsRef inc Returns Type Description CharsRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Subtract(Lucene.Net.Util.CharsRef, Lucene.Net.Util.CharsRef) | Improve this Doc View Source Write(CharsRef, DataOutput) Declaration public override void Write(CharsRef prefix, DataOutput out) Parameters Type Name Description CharsRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.CharsRef>.Write(Lucene.Net.Util.CharsRef, Lucene.Net.Store.DataOutput) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractPagedMutable-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractPagedMutable-1.html",
    "title": "Class AbstractPagedMutable<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractPagedMutable<T> Base implementation for PagedMutable and PagedGrowableWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractPagedMutable<T> PagedGrowableWriter PagedMutable Inherited Members Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractPagedMutable<T> : Int64Values where T : AbstractPagedMutable<T> Type Parameters Name Description T Properties | Improve this Doc View Source Count The number of values. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source BaseRamBytesUsed() Declaration protected virtual long BaseRamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source FillPages() Declaration protected void FillPages() | Improve this Doc View Source Get(Int64) Declaration public override sealed long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source Grow() Similar to Grow(Int64[]) . Declaration public T Grow() Returns Type Description T | Improve this Doc View Source Grow(Int64) Similar to Grow(Int64[], Int32) . Declaration public T Grow(long minSize) Parameters Type Name Description System.Int64 minSize Returns Type Description T | Improve this Doc View Source NewMutable(Int32, Int32) Declaration protected abstract PackedInt32s.Mutable NewMutable(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description PackedInt32s.Mutable | Improve this Doc View Source NewUnfilledCopy(Int64) Declaration protected abstract T NewUnfilledCopy(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description T | Improve this Doc View Source RamBytesUsed() Return the number of bytes used by this object. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Resize(Int64) Create a new copy of size newSize based on the content of this buffer. This method is much more efficient than creating a new instance and copying values one by one. Declaration public T Resize(long newSize) Parameters Type Name Description System.Int64 newSize Returns Type Description T | Improve this Doc View Source Set(Int64, Int64) Set value at index . Declaration public void Set(long index, long value) Parameters Type Name Description System.Int64 index System.Int64 value | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingDeltaPackedInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingDeltaPackedInt64Buffer.html",
    "title": "Class AppendingDeltaPackedInt64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AppendingDeltaPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for the case where values are close to each other. NOTE: This was AppendingDeltaPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingDeltaPackedInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class AppendingDeltaPackedInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source AppendingDeltaPackedInt64Buffer() Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public AppendingDeltaPackedInt64Buffer() | Improve this Doc View Source AppendingDeltaPackedInt64Buffer(Int32, Int32, Single) Create AppendingDeltaPackedInt64Buffer . Declaration public AppendingDeltaPackedInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source AppendingDeltaPackedInt64Buffer(Single) Create an AppendingDeltaPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public AppendingDeltaPackedInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Methods | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides AbstractAppendingInt64Buffer.RamBytesUsed() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingPackedInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AppendingPackedInt64Buffer.html",
    "title": "Class AppendingPackedInt64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AppendingPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for non-negative numbers with a uniform distribution over a fixed (limited) range. NOTE: This was AppendingPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingPackedInt64Buffer Inherited Members AbstractAppendingInt64Buffer.PageSize AbstractAppendingInt64Buffer.Count AbstractAppendingInt64Buffer.Add(Int64) AbstractAppendingInt64Buffer.Get(Int64) AbstractAppendingInt64Buffer.Get(Int64, Int64[], Int32, Int32) AbstractAppendingInt64Buffer.GetIterator() AbstractAppendingInt64Buffer.RamBytesUsed() AbstractAppendingInt64Buffer.Freeze() Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class AppendingPackedInt64Buffer : AbstractAppendingInt64Buffer Constructors | Improve this Doc View Source AppendingPackedInt64Buffer() Create an AppendingPackedInt64Buffer with initialPageCount=16, pageSize=1024 and acceptableOverheadRatio= DEFAULT . Declaration public AppendingPackedInt64Buffer() | Improve this Doc View Source AppendingPackedInt64Buffer(Int32, Int32, Single) Initialize a AppendingPackedInt64Buffer . Declaration public AppendingPackedInt64Buffer(int initialPageCount, int pageSize, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 initialPageCount The initial number of pages. System.Int32 pageSize The size of a single page. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. | Improve this Doc View Source AppendingPackedInt64Buffer(Single) Create an AppendingPackedInt64Buffer with initialPageCount=16, pageSize=1024. Declaration public AppendingPackedInt64Buffer(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedReader.html",
    "title": "Class BlockPackedReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockPackedReader Provides random access to a stream written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object NumericDocValues Int64Values BlockPackedReader Inherited Members Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedReader : Int64Values Constructors | Improve this Doc View Source BlockPackedReader(IndexInput, Int32, Int32, Int64, Boolean) Sole constructor. Declaration public BlockPackedReader(IndexInput in, int packedIntsVersion, int blockSize, long valueCount, bool direct) Parameters Type Name Description IndexInput in System.Int32 packedIntsVersion System.Int32 blockSize System.Int64 valueCount System.Boolean direct Methods | Improve this Doc View Source Get(Int64) Declaration public override long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.BlockPackedWriter.html",
    "title": "Class BlockPackedWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockPackedWriter A writer for large sequences of longs. The sequence is divided into fixed-size blocks and for each block, the difference between each value and the minimum value of the block is encoded using as few bits as possible. Memory usage of this class is proportional to the block size. Each block has an overhead between 1 and 10 bytes to store the minimum value and the number of bits per value of the block. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <Token, (MinValue)> Token: a byte ( WriteByte(Byte) ), first 7 bits are the number of bits per value ( bitsPerValue ). If the 8th bit is 1, then MinValue (see next) is 0 , otherwise MinValue and needs to be decoded MinValue: a zigzag-encoded variable-length System.Int64 ( WriteVInt64(Int64) ) whose value should be added to every int from the block to restore the original values Ints: If the number of bits per value is 0 , then there is nothing to decode and all ints are equal to MinValue. Otherwise: BlockSize packed ints ( PackedInt32s ) encoded on exactly bitsPerValue bits per value. They are the subtraction of the original values and MinValue This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object AbstractBlockPackedWriter BlockPackedWriter Inherited Members AbstractBlockPackedWriter.m_out AbstractBlockPackedWriter.m_values AbstractBlockPackedWriter.m_blocks AbstractBlockPackedWriter.m_off AbstractBlockPackedWriter.m_ord AbstractBlockPackedWriter.m_finished AbstractBlockPackedWriter.Reset(DataOutput) AbstractBlockPackedWriter.Add(Int64) AbstractBlockPackedWriter.Finish() AbstractBlockPackedWriter.Ord AbstractBlockPackedWriter.WriteValues(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class BlockPackedWriter : AbstractBlockPackedWriter Constructors | Improve this Doc View Source BlockPackedWriter(DataOutput, Int32) Sole constructor. Declaration public BlockPackedWriter(DataOutput out, int blockSize) Parameters Type Name Description DataOutput out System.Int32 blockSize the number of values of a single block, must be a power of 2 Methods | Improve this Doc View Source Flush() Declaration protected override void Flush() Overrides AbstractBlockPackedWriter.Flush() Extension Methods Number.IsNumber(Object) See Also BlockPackedReaderIterator BlockPackedReader"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKBigramFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKBigramFilter.html",
    "title": "Class CJKBigramFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKBigramFilter Forms bigrams of CJK terms that are generated from StandardTokenizer or ICUTokenizer. CJK types are set by these tokenizers, but you can also use CJKBigramFilter(TokenStream, CJKScript) to explicitly control which of the CJK scripts are turned into bigrams. By default, when a CJK character has no adjacent characters to form a bigram, it is output in unigram form. If you want to always output both unigrams and bigrams, set the outputUnigrams flag in CJKBigramFilter(TokenStream, CJKScript, Boolean) . This can be used for a combined unigram+bigram approach. In all cases, all non-CJK input is passed thru unmodified. Inheritance System.Object AttributeSource TokenStream TokenFilter CJKBigramFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKBigramFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CJKBigramFilter(TokenStream) Calls CJKBigramFilter(TokenStream, CJKScript) Declaration public CJKBigramFilter(TokenStream in) Parameters Type Name Description TokenStream in Input TokenStream | Improve this Doc View Source CJKBigramFilter(TokenStream, CJKScript) Calls CJKBigramFilter(TokenStream, CJKScript, Boolean) Declaration public CJKBigramFilter(TokenStream in, CJKScript flags) Parameters Type Name Description TokenStream in Input TokenStream CJKScript flags OR'ed set from HAN , HIRAGANA , KATAKANA , HANGUL | Improve this Doc View Source CJKBigramFilter(TokenStream, CJKScript, Boolean) Create a new CJKBigramFilter , specifying which writing systems should be bigrammed, and whether or not unigrams should also be output. Declaration public CJKBigramFilter(TokenStream in, CJKScript flags, bool outputUnigrams) Parameters Type Name Description TokenStream in Input TokenStream CJKScript flags OR'ed set from HAN , HIRAGANA , KATAKANA , HANGUL System.Boolean outputUnigrams true if unigrams for the selected writing systems should also be output. when this is false, this is only done when there are no adjacent characters to form a bigram. Fields | Improve this Doc View Source DOUBLE_TYPE when we emit a bigram, its then marked as this type Declaration public const string DOUBLE_TYPE = \"<DOUBLE>\" Field Value Type Description System.String | Improve this Doc View Source SINGLE_TYPE when we emit a unigram, its then marked as this type Declaration public const string SINGLE_TYPE = \"<SINGLE>\" Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKBigramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKBigramFilterFactory.html",
    "title": "Class CJKBigramFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKBigramFilterFactory Factory for CJKBigramFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\" han=\"true\" hiragana=\"true\" katakana=\"true\" hangul=\"true\" outputUnigrams=\"false\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CJKBigramFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CJKBigramFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source CJKBigramFilterFactory(IDictionary<String, String>) Creates a new CJKBigramFilterFactory Declaration public CJKBigramFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKTokenizer.html",
    "title": "Class CJKTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKTokenizer CJKTokenizer is designed for Chinese, Japanese, and Korean languages. The tokens returned are every two adjacent characters with overlap match. Example: \"java C1C2C3C4\" will be segmented to: \"java\" \"C1C2\" \"C2C3\" \"C3C4\". Additionally, the following is applied to Latin text (such as English): Text is converted to lowercase. Numeric digits, '+', '#', and '_' are tokenized as letters. Full-width forms are converted to half-width forms. For more info on Asian language (Chinese, Japanese, and Korean) text segmentation: please search google Inheritance System.Object AttributeSource TokenStream Tokenizer CJKTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use StandardTokenizer, CJKWidthFilter, CJKBigramFilter, and LowerCaseFilter instead.\")] public sealed class CJKTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source CJKTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public CJKTokenizer(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader in | Improve this Doc View Source CJKTokenizer(TextReader) Construct a token stream processing the given input. Declaration public CJKTokenizer(TextReader in) Parameters Type Name Description System.IO.TextReader in I/O reader Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Returns true for the next token in the stream, or false at EOS. See http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.UnicodeBlock.html for detail. Declaration public override bool IncrementToken() Returns Type Description System.Boolean false for end of stream, true otherwise Overrides TokenStream.IncrementToken() Exceptions Type Condition System.IO.IOException when read error happened in the InputStream | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKTokenizerFactory.html",
    "title": "Class CJKTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKTokenizerFactory Factory for CJKTokenizer . <fieldType name=\"text_cjk\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.CJKTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory CJKTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use CJKBigramFilterFactory instead.\")] public class CJKTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source CJKTokenizerFactory(IDictionary<String, String>) Creates a new CJKTokenizerFactory Declaration public CJKTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader in Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKWidthFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKWidthFilter.html",
    "title": "Class CJKWidthFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKWidthFilter A TokenFilter that normalizes CJK width differences: Folds fullwidth ASCII variants into the equivalent basic latin Folds halfwidth Katakana variants into the equivalent kana NOTE: this filter can be viewed as a (practical) subset of NFKC/NFKD Unicode normalization. See the normalization support in the ICU package for full normalization. Inheritance System.Object AttributeSource TokenStream TokenFilter CJKWidthFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CJKWidthFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CJKWidthFilter(TokenStream) Declaration public CJKWidthFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKWidthFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cjk.CJKWidthFilterFactory.html",
    "title": "Class CJKWidthFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CJKWidthFilterFactory Factory for CJKWidthFilter . <fieldType name=\"text_cjk\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.CJKWidthFilterFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CJKBigramFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CJKWidthFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cjk Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CJKWidthFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source CJKWidthFilterFactory(IDictionary<String, String>) Creates a new CJKWidthFilterFactory Declaration public CJKWidthFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.StopFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.StopFilterFactory.html",
    "title": "Class StopFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StopFilterFactory Factory for StopFilter . <fieldType name=\"text_stop\" class=\"solr.TextField\" positionIncrementGap=\"100\" autoGeneratePhraseQueries=\"true\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\" words=\"stopwords.txt\" format=\"wordset\" /> </analyzer> </fieldType> All attributes are optional: ignoreCase defaults to false words should be the name of a stopwords file to parse, if not specified the factory will use ENGLISH_STOP_WORDS_SET format defines how the words file will be parsed, and defaults to wordset . If words is not specified, then format must not be specified. The valid values for the format option are: wordset - This is the default format, which supports one word per line (including any intra-word whitespace) and allows whole line comments begining with the \"#\" character. Blank lines are ignored. See GetLines(Stream, Encoding) for details. snowball - This format allows for multiple words specified on each line, and trailing comments may be specified using the vertical line (\"|\"). Blank lines are ignored. See GetSnowballWordSet(TextReader, LuceneVersion) for details. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StopFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StopFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source StopFilterFactory(IDictionary<String, String>) Creates a new StopFilterFactory Declaration public StopFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source FORMAT_SNOWBALL Declaration public const string FORMAT_SNOWBALL = \"snowball\" Field Value Type Description System.String | Improve this Doc View Source FORMAT_WORDSET Declaration public const string FORMAT_WORDSET = \"wordset\" Field Value Type Description System.String Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StopWords Declaration public virtual CharArraySet StopWords { get; } Property Value Type Description CharArraySet Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.TypeTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.TypeTokenFilter.html",
    "title": "Class TypeTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TypeTokenFilter Removes tokens whose types appear in a set of blocked types from a token stream. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter TypeTokenFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TypeTokenFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>) Create a new TypeTokenFilter that filters tokens out (useWhiteList=false). Declaration public TypeTokenFilter(LuceneVersion version, TokenStream input, ICollection<string> stopTypes) Parameters Type Name Description LuceneVersion version TokenStream input System.Collections.Generic.ICollection < System.String > stopTypes See Also TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>, Boolean) | Improve this Doc View Source TypeTokenFilter(LuceneVersion, TokenStream, ICollection<String>, Boolean) Create a new TypeTokenFilter . Declaration public TypeTokenFilter(LuceneVersion version, TokenStream input, ICollection<string> stopTypes, bool useWhiteList) Parameters Type Name Description LuceneVersion version the LuceneVersion match version TokenStream input the TokenStream to consume System.Collections.Generic.ICollection < System.String > stopTypes the types to filter System.Boolean useWhiteList if true, then tokens whose type is in stopTypes will be kept, otherwise they will be filtered out | Improve this Doc View Source TypeTokenFilter(LuceneVersion, Boolean, TokenStream, ICollection<String>) Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public TypeTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ICollection<string> stopTypes) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input System.Collections.Generic.ICollection < System.String > stopTypes | Improve this Doc View Source TypeTokenFilter(LuceneVersion, Boolean, TokenStream, ICollection<String>, Boolean) Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public TypeTokenFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ICollection<string> stopTypes, bool useWhiteList) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input System.Collections.Generic.ICollection < System.String > stopTypes System.Boolean useWhiteList Methods | Improve this Doc View Source Accept() By default accept the token if its type is not a stop type. When the Lucene.Net.Analysis.Core.TypeTokenFilter.useWhiteList parameter is set to true then accept the token if its type is contained in the Lucene.Net.Analysis.Core.TypeTokenFilter.stopTypes Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.TypeTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.TypeTokenFilterFactory.html",
    "title": "Class TypeTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TypeTokenFilterFactory Factory class for TypeTokenFilter . <fieldType name=\"chars\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TypeTokenFilterFactory\" types=\"stoptypes.txt\" useWhitelist=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TypeTokenFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TypeTokenFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source TypeTokenFilterFactory(IDictionary<String, String>) Creates a new TypeTokenFilterFactory Declaration public TypeTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StopTypes Declaration public virtual ICollection<string> StopTypes { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.UpperCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.UpperCaseFilter.html",
    "title": "Class UpperCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpperCaseFilter Normalizes token text to UPPER CASE. You must specify the required LuceneVersion compatibility when creating UpperCaseFilter NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you Require uppercase tokens. Use the LowerCaseFilter for general search matching Inheritance System.Object AttributeSource TokenStream TokenFilter UpperCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class UpperCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source UpperCaseFilter(LuceneVersion, TokenStream) Create a new UpperCaseFilter , that normalizes token text to upper case. Declaration public UpperCaseFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion See LuceneVersion TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.UpperCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.UpperCaseFilterFactory.html",
    "title": "Class UpperCaseFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpperCaseFilterFactory Factory for UpperCaseFilter . <fieldType name=\"text_uppercase\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.UpperCaseFilterFactory\"/> </analyzer> </fieldType> NOTE: In Unicode, this transformation may lose information when the upper case character represents more than one lower case character. Use this filter when you require uppercase tokens. Use the LowerCaseFilterFactory for general search matching Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory UpperCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class UpperCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source UpperCaseFilterFactory(IDictionary<String, String>) Creates a new UpperCaseFilterFactory Declaration public UpperCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.IrishStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.IrishStemmer.html",
    "title": "Class IrishStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IrishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram IrishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IrishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.ItalianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.ItalianStemmer.html",
    "title": "Class ItalianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItalianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram ItalianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ItalianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.KpStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.KpStemmer.html",
    "title": "Class KpStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KpStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram KpStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KpStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.LovinsStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.LovinsStemmer.html",
    "title": "Class LovinsStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LovinsStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram LovinsStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LovinsStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.NorwegianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.NorwegianStemmer.html",
    "title": "Class NorwegianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram NorwegianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.PorterStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.PorterStemmer.html",
    "title": "Class PorterStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PorterStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram PorterStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PorterStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.PortugueseStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.PortugueseStemmer.html",
    "title": "Class PortugueseStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram PortugueseStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.RomanianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.RomanianStemmer.html",
    "title": "Class RomanianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RomanianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram RomanianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RomanianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.RussianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.RussianStemmer.html",
    "title": "Class RussianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram RussianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RussianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.SpanishStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.SpanishStemmer.html",
    "title": "Class SpanishStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram SpanishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SpanishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.SwedishStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.SwedishStemmer.html",
    "title": "Class SwedishStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SwedishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram SwedishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SwedishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.TurkishStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.TurkishStemmer.html",
    "title": "Class TurkishStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TurkishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram TurkishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TurkishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosFormat.html",
    "title": "Class SimpleTextFieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextFieldInfosFormat Plain text field infos format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat SimpleTextFieldInfosFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosFormat : FieldInfosFormat Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter"
  },
  "api/Lucene.Net/Lucene.Net.Index.Sorter.SortingAtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Sorter.SortingAtomicReader.html",
    "title": "Class SortingAtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortingAtomicReader An AtomicReader which supports sorting documents by a given Sort . You can use this class to sort an index as follows: IndexWriter writer; // writer to which the sorted index will be added DirectoryReader reader; // reader on the input index Sort sort; // determines how the documents are sorted AtomicReader sortingReader = SortingAtomicReader.Wrap(SlowCompositeReaderWrapper.Wrap(reader), sort); writer.AddIndexes(reader); reader.Dispose(); // alternatively, you can use a using block writer.Dispose(); // alternatively, you can use a using block This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexReader AtomicReader FilterAtomicReader SortingAtomicReader Implements System.IDisposable Inherited Members FilterAtomicReader.Unwrap(AtomicReader) FilterAtomicReader.m_input FilterAtomicReader.FieldInfos FilterAtomicReader.NumDocs FilterAtomicReader.MaxDoc FilterAtomicReader.DoClose() FilterAtomicReader.ToString() FilterAtomicReader.CheckIntegrity() AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class SortingAtomicReader : FilterAtomicReader, IDisposable Properties | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides FilterAtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides FilterAtomicReader.LiveDocs Methods | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides FilterAtomicReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides FilterAtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides FilterAtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides FilterAtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides FilterAtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides FilterAtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides FilterAtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides FilterAtomicReader.GetTermVectors(Int32) | Improve this Doc View Source Wrap(AtomicReader, Sort) Return a sorted view of reader according to the order defined by sort . If the reader is already sorted, this method might return the reader as-is. Declaration public static AtomicReader Wrap(AtomicReader reader, Sort sort) Parameters Type Name Description AtomicReader reader Sort sort Returns Type Description AtomicReader Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.DataOutputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.DataOutputStream.html",
    "title": "Class DataOutputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DataOutputStream Java's DataOutputStream is similar to .NET's BinaryWriter. However, it writes in a modified UTF-8 format that cannot be read (or duplicated) using BinaryWriter. This is a port of DataOutputStream that is fully compatible with Java's DataInputStream. Usage Note: Always favor BinaryWriter over DataOutputStream unless you specifically need the modified UTF-8 format and/or the WriteUTF(String) method. Inheritance System.Object DataOutputStream Implements IDataOutput System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class DataOutputStream : IDataOutput, IDisposable Constructors | Improve this Doc View Source DataOutputStream(Stream) Constructs a new DataOutputStream on the System.IO.Stream out . Note that data written by this stream is not in a human readable form but can be reconstructed by using a DataInputStream on the resulting output. Declaration public DataOutputStream(Stream out) Parameters Type Name Description System.IO.Stream out the target stream for writing. See Also DataInputStream Fields | Improve this Doc View Source written The number of bytes written out so far. Declaration protected int written Field Value Type Description System.Int32 Properties | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Flush() Declaration public virtual void Flush() | Improve this Doc View Source Write(Byte[]) Declaration public void Write(byte[] b) Parameters Type Name Description System.Byte [] b | Improve this Doc View Source Write(Byte[], Int32, Int32) Declaration public virtual void Write(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count | Improve this Doc View Source Write(Int32) Declaration public virtual void Write(int oneByte) Parameters Type Name Description System.Int32 oneByte | Improve this Doc View Source WriteBoolean(Boolean) Declaration public void WriteBoolean(bool val) Parameters Type Name Description System.Boolean val | Improve this Doc View Source WriteByte(Int32) Declaration public void WriteByte(int val) Parameters Type Name Description System.Int32 val | Improve this Doc View Source WriteBytes(String) Declaration public void WriteBytes(string str) Parameters Type Name Description System.String str | Improve this Doc View Source WriteChar(Int32) Declaration public void WriteChar(int val) Parameters Type Name Description System.Int32 val | Improve this Doc View Source WriteChars(String) Declaration public void WriteChars(string str) Parameters Type Name Description System.String str | Improve this Doc View Source WriteDouble(Double) Declaration public void WriteDouble(double val) Parameters Type Name Description System.Double val | Improve this Doc View Source WriteInt16(Int32) NOTE: This was writeShort() in Java Declaration public void WriteInt16(int val) Parameters Type Name Description System.Int32 val | Improve this Doc View Source WriteInt32(Int32) NOTE: This was writeInt() in Java Declaration public void WriteInt32(int val) Parameters Type Name Description System.Int32 val | Improve this Doc View Source WriteInt64(Int64) NOTE: This was writeLong() in Java Declaration public void WriteInt64(long val) Parameters Type Name Description System.Int64 val | Improve this Doc View Source WriteSingle(Single) NOTE: This was writeFloat() in Java Declaration public void WriteSingle(float val) Parameters Type Name Description System.Single val | Improve this Doc View Source WriteUTF(String) Declaration public void WriteUTF(string str) Parameters Type Name Description System.String str Implements IDataOutput System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDate.html",
    "title": "Class MutableValueDate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueDate MutableValue implementation of type System.DateTime . Inheritance System.Object MutableValue MutableValueInt64 MutableValueDate Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValueInt64.Value MutableValueInt64.Copy(MutableValue) MutableValueInt64.EqualsSameType(Object) MutableValueInt64.CompareSameType(Object) MutableValueInt64.GetHashCode() MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueDate : MutableValueInt64, IComparable<MutableValue>, IComparable Methods | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValueInt64.Duplicate() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValueInt64.ToObject() Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishPossessiveFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishPossessiveFilter.html",
    "title": "Class EnglishPossessiveFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishPossessiveFilter TokenFilter that removes possessives (trailing 's) from words. You must specify the required LuceneVersion compatibility when creating EnglishPossessiveFilter : As of 3.6, U+2019 RIGHT SINGLE QUOTATION MARK and U+FF07 FULLWIDTH APOSTROPHE are also treated as quotation marks. Inheritance System.Object AttributeSource TokenStream TokenFilter EnglishPossessiveFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EnglishPossessiveFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source EnglishPossessiveFilter(TokenStream) Declaration [Obsolete(\"Use <see cref=\\\"#EnglishPossessiveFilter(org.apache.lucene.util.Version, org.apache.lucene.analysis.TokenStream)\\\"/> instead.\")] public EnglishPossessiveFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source EnglishPossessiveFilter(LuceneVersion, TokenStream) Declaration public EnglishPossessiveFilter(LuceneVersion version, TokenStream input) Parameters Type Name Description LuceneVersion version TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishPossessiveFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishPossessiveFilterFactory.html",
    "title": "Class EnglishPossessiveFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishPossessiveFilterFactory Factory for EnglishPossessiveFilter . <fieldType name=\"text_enpossessive\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishPossessiveFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory EnglishPossessiveFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishPossessiveFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source EnglishPossessiveFilterFactory(IDictionary<String, String>) Creates a new EnglishPossessiveFilterFactory Declaration public EnglishPossessiveFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilterFactory.html",
    "title": "Class JapaneseReadingFormFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseReadingFormFilterFactory Factory for JapaneseReadingFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseReadingFormFilterFactory\" useRomaji=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseReadingFormFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseReadingFormFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseReadingFormFilterFactory(IDictionary<String, String>) Creates a new JapaneseReadingFormFilterFactory . Declaration public JapaneseReadingFormFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseTokenizer.html",
    "title": "Class JapaneseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseTokenizer Tokenizer for Japanese that uses morphological analysis. Inheritance System.Object AttributeSource TokenStream Tokenizer JapaneseTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseTokenizer : Tokenizer, IDisposable Remarks This tokenizer sets a number of additional attributes: IBaseFormAttribute containing base form for inflected adjectives and verbs. IPartOfSpeechAttribute containing part-of-speech. IReadingAttribute containing reading and pronunciation. IInflectionAttribute containing additional part-of-speech information for inflected forms. This tokenizer uses a rolling Viterbi search to find the least cost segmentation (path) of the incoming characters. For tokens that appear to be compound (> length 2 for all Kanji, or > length 7 for non-Kanji), we see if there is a 2nd best segmentation of that token after applying penalties to the long tokens. If so, and the Mode is SEARCH , we output the alternate segmentation as well. Constructors | Improve this Doc View Source JapaneseTokenizer(AttributeSource.AttributeFactory, TextReader, UserDictionary, Boolean, JapaneseTokenizerMode) Create a new JapaneseTokenizer. Declaration public JapaneseTokenizer(AttributeSource.AttributeFactory factory, TextReader input, UserDictionary userDictionary, bool discardPunctuation, JapaneseTokenizerMode mode) Parameters Type Name Description AttributeSource.AttributeFactory factory The AttributeFactory to use. System.IO.TextReader input TextReader containing text. UserDictionary userDictionary Optional: if non-null, user dictionary. System.Boolean discardPunctuation true if punctuation tokens should be dropped from the output. JapaneseTokenizerMode mode Tokenization mode. | Improve this Doc View Source JapaneseTokenizer(TextReader, UserDictionary, Boolean, JapaneseTokenizerMode) Create a new JapaneseTokenizer. Uses the default AttributeFactory. Declaration public JapaneseTokenizer(TextReader input, UserDictionary userDictionary, bool discardPunctuation, JapaneseTokenizerMode mode) Parameters Type Name Description System.IO.TextReader input TextReader containing text. UserDictionary userDictionary Optional: if non-null, user dictionary. System.Boolean discardPunctuation true if punctuation tokens should be dropped from the output. JapaneseTokenizerMode mode Tokenization mode. Fields | Improve this Doc View Source DEFAULT_MODE Default tokenization mode. Currently this is SEARCH . Declaration public static readonly JapaneseTokenizerMode DEFAULT_MODE Field Value Type Description JapaneseTokenizerMode Properties | Improve this Doc View Source GraphvizFormatter Expert: set this to produce graphviz (dot) output of the Viterbi lattice Declaration public GraphvizFormatter GraphvizFormatter { get; set; } Property Value Type Description GraphvizFormatter Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilter.html",
    "title": "Class TypeAsPayloadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TypeAsPayloadTokenFilter Makes the Type a payload. Encodes the type using System.Text.Encoding.UTF8.GetBytes(string) Inheritance System.Object AttributeSource TokenStream TokenFilter TypeAsPayloadTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TypeAsPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TypeAsPayloadTokenFilter(TokenStream) Declaration public TypeAsPayloadTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilterFactory.html",
    "title": "Class TypeAsPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TypeAsPayloadTokenFilterFactory Factory for TypeAsPayloadTokenFilter . <fieldType name=\"text_typeaspayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TypeAsPayloadTokenFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TypeAsPayloadTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TypeAsPayloadTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source TypeAsPayloadTokenFilterFactory(IDictionary<String, String>) Creates a new TypeAsPayloadTokenFilterFactory Declaration public TypeAsPayloadTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.LRUHashMap-2.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.LRUHashMap-2.html",
    "title": "Class LRUHashMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LRUHashMap<TKey, TValue> LRUHashMap<TKey, TValue> is similar to of Java's HashMap, which has a bounded Limit ; When it reaches that Limit , each time a new element is added, the least recently used (LRU) entry is removed. Unlike the Java Lucene implementation, this one is thread safe because it is backed by the LurchTable<TKey, TValue> . Do note that every time an element is read from LRUHashMap<TKey, TValue> , a write operation also takes place to update the element's last access time. This is because the LRU order needs to be remembered to determine which element to evict when the Limit is exceeded. @lucene.experimental Inheritance System.Object LRUHashMap<TKey, TValue> Implements System.Collections.Generic.IDictionary <TKey, TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class LRUHashMap<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source LRUHashMap(Int32) Create a new hash map with a bounded size and with least recently used entries removed. Declaration public LRUHashMap(int limit) Parameters Type Name Description System.Int32 limit The maximum size (in number of entries) to which the map can grow before the least recently used entries start being removed. Setting limit to a very large value, like System.Int32.MaxValue is allowed, but is less efficient than using HashMap<TKey, TValue> or System.Collections.Generic.Dictionary`2 because our class needs to keep track of the use order (via an additional doubly-linked list) which is not used when the map's size is always below the maximum size. | Improve this Doc View Source LRUHashMap(Int32, IEqualityComparer<TKey>) Create a new hash map with a bounded size and with least recently used entries removed. LUCENENET specific overload to allow passing in custom System.Collections.Generic.IEqualityComparer<T> . See LUCENENET-602. Declaration public LRUHashMap(int limit, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 limit The maximum size (in number of entries) to which the map can grow before the least recently used entries start being removed. Setting limit to a very large value, like System.Int32.MaxValue is allowed, but is less efficient than using HashMap<TKey, TValue> or System.Collections.Generic.Dictionary`2 because our class needs to keep track of the use order (via an additional doubly-linked list) which is not used when the map's size is always below the maximum size. System.Collections.Generic.IEqualityComparer <TKey> comparer The System.Collections.Generic.IEqualityComparer<T> implementation to use when comparing keys, or null to use the default System.Collections.Generic.IEqualityComparer<T> for the type of the key. Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public ICollection<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <TKey> | Improve this Doc View Source Limit allows changing the map's maximal number of elements which was defined at construction time. Note that if the map is already larger than Limit , the current implementation does not shrink it (by removing the oldest elements); Rather, the map remains in its current size as new elements are added, and will only start shrinking (until settling again on the given Limit ) if existing elements are explicitly deleted. Declaration public virtual int Limit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Values Declaration public ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(TKey) Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source Get(TKey) Declaration public TValue Get(TKey key) Parameters Type Name Description TKey key Returns Type Description TValue | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> | Improve this Doc View Source Put(TKey, TValue) Declaration public TValue Put(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description TValue | Improve this Doc View Source Remove(TKey) Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermScorer.html",
    "title": "Class QueryTermScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTermScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class uses the QueryTermExtractor class to process determine the query terms and their boosts to be used. Inheritance System.Object QueryTermScorer Implements IScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryTermScorer : IScorer Constructors | Improve this Doc View Source QueryTermScorer(WeightedTerm[]) Declaration public QueryTermScorer(WeightedTerm[] weightedTerms) Parameters Type Name Description WeightedTerm [] weightedTerms | Improve this Doc View Source QueryTermScorer(Query) Declaration public QueryTermScorer(Query query) Parameters Type Name Description Query query a Lucene query (ideally rewritten using Rewrite(IndexReader) before being passed to this class and the searcher) | Improve this Doc View Source QueryTermScorer(Query, IndexReader, String) Declaration public QueryTermScorer(Query query, IndexReader reader, string fieldName) Parameters Type Name Description Query query a Lucene query (ideally rewritten using Rewrite(IndexReader) before being passed to this class and the searcher) IndexReader reader used to compute IDF which can be used to a) score selected fragments better b) use graded highlights eg set font color intensity System.String fieldName the field on which Inverse Document Frequency (IDF) calculations are based | Improve this Doc View Source QueryTermScorer(Query, String) Declaration public QueryTermScorer(Query query, string fieldName) Parameters Type Name Description Query query a Lucene query (ideally rewritten using Rewrite(IndexReader) before being passed to this class and the searcher) System.String fieldName the Field name which is used to match Query terms Properties | Improve this Doc View Source FragmentScore FragmentScore Declaration public virtual float FragmentScore { get; } Property Value Type Description System.Single | Improve this Doc View Source MaxTermWeight The highest weighted term (useful for passing to GradientFormatter to set top end of coloring scale. Declaration public virtual float MaxTermWeight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source AllFragmentsProcessed() Declaration public virtual void AllFragmentsProcessed() | Improve this Doc View Source GetTokenScore() GetTokenScore() Declaration public virtual float GetTokenScore() Returns Type Description System.Single | Improve this Doc View Source Init(TokenStream) Init(TokenStream) Declaration public virtual TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream | Improve this Doc View Source StartFragment(TextFragment) Declaration public virtual void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment Implements IScorer"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleFragmenter.html",
    "title": "Class SimpleFragmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFragmenter IFragmenter implementation which breaks text up into same-size fragments with no concerns over spotting sentence boundaries. Inheritance System.Object SimpleFragmenter Implements IFragmenter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleFragmenter : IFragmenter Constructors | Improve this Doc View Source SimpleFragmenter() Declaration public SimpleFragmenter() | Improve this Doc View Source SimpleFragmenter(Int32) Declaration public SimpleFragmenter(int fragmentSize) Parameters Type Name Description System.Int32 fragmentSize size in number of characters of each fragment Properties | Improve this Doc View Source FragmentSize Gets or Sets size in number of characters of each fragment Declaration public virtual int FragmentSize { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IsNewFragment() IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream stream) Parameters Type Name Description System.String originalText TokenStream stream Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLEncoder.html",
    "title": "Class SimpleHTMLEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleHTMLEncoder Simple IEncoder implementation to escape text for HTML output Inheritance System.Object SimpleHTMLEncoder Implements IEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleHTMLEncoder : IEncoder Constructors | Improve this Doc View Source SimpleHTMLEncoder() Declaration public SimpleHTMLEncoder() Methods | Improve this Doc View Source EncodeText(String) Declaration public string EncodeText(string originalText) Parameters Type Name Description System.String originalText Returns Type Description System.String | Improve this Doc View Source HtmlEncode(String) Encode string into HTML Declaration public static string HtmlEncode(string plainText) Parameters Type Name Description System.String plainText Returns Type Description System.String Implements IEncoder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.SimpleHTMLFormatter.html",
    "title": "Class SimpleHTMLFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleHTMLFormatter Simple IFormatter implementation to highlight terms with a pre and post tag Inheritance System.Object SimpleHTMLFormatter Implements IFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class SimpleHTMLFormatter : IFormatter Constructors | Improve this Doc View Source SimpleHTMLFormatter() Default constructor uses HTML: <B> tags to markup terms Declaration public SimpleHTMLFormatter() | Improve this Doc View Source SimpleHTMLFormatter(String, String) Declaration public SimpleHTMLFormatter(string preTag, string postTag) Parameters Type Name Description System.String preTag System.String postTag Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) HighlightTerm(String, TokenGroup) Declaration public virtual string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText TokenGroup tokenGroup Returns Type Description System.String Implements IFormatter"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CoreParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CoreParser.html",
    "title": "Class CoreParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CoreParser Assembles a IQueryBuilder which uses only core Lucene Query objects Inheritance System.Object CoreParser CorePlusExtensionsParser Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class CoreParser : IQueryBuilder Constructors | Improve this Doc View Source CoreParser(Analyzer, QueryParser) Construct an XML parser that uses a single instance QueryParser for handling UserQuery tags - all parse operations are synchronised on this parser Declaration public CoreParser(Analyzer analyzer, QueryParser parser) Parameters Type Name Description Analyzer analyzer QueryParser parser A QueryParser which will be synchronized on during parse calls. | Improve this Doc View Source CoreParser(String, Analyzer) Constructs an XML parser that creates a QueryParser for each UserQuery request. Declaration public CoreParser(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField The default field name used by QueryParser s constructed for UserQuery tags Analyzer analyzer | Improve this Doc View Source CoreParser(String, Analyzer, QueryParser) Declaration protected CoreParser(string defaultField, Analyzer analyzer, QueryParser parser) Parameters Type Name Description System.String defaultField Analyzer analyzer QueryParser parser Fields | Improve this Doc View Source m_analyzer Declaration protected Analyzer m_analyzer Field Value Type Description Analyzer | Improve this Doc View Source m_filterFactory Declaration protected FilterBuilderFactory m_filterFactory Field Value Type Description FilterBuilderFactory | Improve this Doc View Source m_parser Declaration protected QueryParser m_parser Field Value Type Description QueryParser | Improve this Doc View Source m_queryFactory Declaration protected QueryBuilderFactory m_queryFactory Field Value Type Description QueryBuilderFactory | Improve this Doc View Source maxNumCachedFilters Declaration public static int maxNumCachedFilters Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddFilterBuilder(String, IFilterBuilder) Declaration public virtual void AddFilterBuilder(string nodeName, IFilterBuilder builder) Parameters Type Name Description System.String nodeName IFilterBuilder builder | Improve this Doc View Source AddQueryBuilder(String, IQueryBuilder) Declaration public virtual void AddQueryBuilder(string nodeName, IQueryBuilder builder) Parameters Type Name Description System.String nodeName IQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query | Improve this Doc View Source Parse(Stream) Declaration public virtual Query Parse(Stream xmlStream) Parameters Type Name Description System.IO.Stream xmlStream Returns Type Description Query | Improve this Doc View Source Parse(TextReader) Declaration public virtual Query Parse(TextReader xmlTextReader) Parameters Type Name Description System.IO.TextReader xmlTextReader Returns Type Description Query | Improve this Doc View Source Parse(XmlDocument) Declaration public virtual Query Parse(XmlDocument xmlDocument) Parameters Type Name Description System.Xml.XmlDocument xmlDocument Returns Type Description Query | Improve this Doc View Source Parse(XmlReader) Declaration public virtual Query Parse(XmlReader xmlReader) Parameters Type Name Description System.Xml.XmlReader xmlReader Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CorePlusExtensionsParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.CorePlusExtensionsParser.html",
    "title": "Class CorePlusExtensionsParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CorePlusExtensionsParser Assembles a QueryBuilder which uses Query objects from Lucene's sandbox and queries modules in addition to core queries. Inheritance System.Object CoreParser CorePlusExtensionsParser Implements IQueryBuilder Inherited Members CoreParser.m_analyzer CoreParser.m_parser CoreParser.m_queryFactory CoreParser.m_filterFactory CoreParser.maxNumCachedFilters CoreParser.Parse(Stream) CoreParser.Parse(TextReader) CoreParser.Parse(XmlReader) CoreParser.Parse(XmlDocument) CoreParser.AddQueryBuilder(String, IQueryBuilder) CoreParser.AddFilterBuilder(String, IFilterBuilder) CoreParser.GetQuery(XmlElement) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class CorePlusExtensionsParser : CoreParser, IQueryBuilder Constructors | Improve this Doc View Source CorePlusExtensionsParser(Analyzer, QueryParser) Construct an XML parser that uses a single instance QueryParser for handling UserQuery tags - all parse operations are synchronized on this parser Declaration public CorePlusExtensionsParser(Analyzer analyzer, QueryParser parser) Parameters Type Name Description Analyzer analyzer QueryParser parser A QueryParser which will be synchronized on during parse calls. | Improve this Doc View Source CorePlusExtensionsParser(String, Analyzer) Constructs an XML parser that creates a QueryParser for each UserQuery request. Declaration public CorePlusExtensionsParser(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField The default field name used by QueryParser s constructed for UserQuery tags Analyzer analyzer Implements IQueryBuilder"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter.html",
    "title": "Class IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter A DirectoryTaxonomyWriter which sets the underlying IndexWriter 's IndexDeletionPolicy to SnapshotDeletionPolicy . Inheritance System.Object DirectoryTaxonomyWriter IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter Implements ITaxonomyWriter System.IDisposable ITwoPhaseCommit Inherited Members DirectoryTaxonomyWriter.INDEX_EPOCH DirectoryTaxonomyWriter.Unlock(Directory) DirectoryTaxonomyWriter.DefaultTaxonomyWriterCache() DirectoryTaxonomyWriter.Dispose() DirectoryTaxonomyWriter.CloseResources() DirectoryTaxonomyWriter.FindCategory(FacetLabel) DirectoryTaxonomyWriter.AddCategory(FacetLabel) DirectoryTaxonomyWriter.EnsureOpen() DirectoryTaxonomyWriter.Commit() DirectoryTaxonomyWriter.SetCommitData(IDictionary<String, String>) DirectoryTaxonomyWriter.CommitData DirectoryTaxonomyWriter.PrepareCommit() DirectoryTaxonomyWriter.Count DirectoryTaxonomyWriter.SetCacheMissesUntilFill(Int32) DirectoryTaxonomyWriter.GetParent(Int32) DirectoryTaxonomyWriter.AddTaxonomy(Directory, DirectoryTaxonomyWriter.IOrdinalMap) DirectoryTaxonomyWriter.Rollback() DirectoryTaxonomyWriter.ReplaceTaxonomy(Directory) DirectoryTaxonomyWriter.Directory DirectoryTaxonomyWriter.TaxonomyEpoch System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class SnapshotDirectoryTaxonomyWriter : DirectoryTaxonomyWriter, ITaxonomyWriter, IDisposable, ITwoPhaseCommit Constructors | Improve this Doc View Source SnapshotDirectoryTaxonomyWriter(Directory, OpenMode) DirectoryTaxonomyWriter(Directory, OpenMode) Declaration public SnapshotDirectoryTaxonomyWriter(Directory directory, OpenMode openMode = OpenMode.CREATE_OR_APPEND) Parameters Type Name Description Directory directory OpenMode openMode Exceptions Type Condition System.IO.IOException | Improve this Doc View Source SnapshotDirectoryTaxonomyWriter(Directory, OpenMode, ITaxonomyWriterCache) DirectoryTaxonomyWriter(Directory, OpenMode, ITaxonomyWriterCache) Declaration public SnapshotDirectoryTaxonomyWriter(Directory directory, OpenMode openMode, ITaxonomyWriterCache cache) Parameters Type Name Description Directory directory OpenMode openMode ITaxonomyWriterCache cache Exceptions Type Condition System.IO.IOException Properties | Improve this Doc View Source DeletionPolicy Gets the SnapshotDeletionPolicy used by the underlying IndexWriter . Declaration public virtual SnapshotDeletionPolicy DeletionPolicy { get; } Property Value Type Description SnapshotDeletionPolicy | Improve this Doc View Source IndexWriter Gets the IndexWriter used by this DirectoryTaxonomyWriter . Declaration public virtual IndexWriter IndexWriter { get; } Property Value Type Description IndexWriter Methods | Improve this Doc View Source CreateIndexWriterConfig(OpenMode) Declaration protected override IndexWriterConfig CreateIndexWriterConfig(OpenMode openMode) Parameters Type Name Description OpenMode openMode Returns Type Description IndexWriterConfig Overrides DirectoryTaxonomyWriter.CreateIndexWriterConfig(OpenMode) | Improve this Doc View Source OpenIndexWriter(Directory, IndexWriterConfig) Declaration protected override IndexWriter OpenIndexWriter(Directory directory, IndexWriterConfig config) Parameters Type Name Description Directory directory IndexWriterConfig config Returns Type Description IndexWriter Overrides DirectoryTaxonomyWriter.OpenIndexWriter(Directory, IndexWriterConfig) Implements ITaxonomyWriter System.IDisposable ITwoPhaseCommit"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyRevision.html",
    "title": "Class IndexAndTaxonomyRevision | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexAndTaxonomyRevision A IRevision of a single index and taxonomy index files which comprises the list of files from both indexes. This revision should be used whenever a pair of search and taxonomy indexes need to be replicated together to guarantee consistency of both on the replicating (client) side. Inheritance System.Object IndexAndTaxonomyRevision Implements IRevision System.IComparable < IRevision > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexAndTaxonomyRevision : IRevision, IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexAndTaxonomyRevision(IndexWriter, IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter) Constructor over the given IndexWriter . Uses the last IndexCommit found in the Directory managed by the given writer. Declaration public IndexAndTaxonomyRevision(IndexWriter indexWriter, IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter taxonomyWriter) Parameters Type Name Description IndexWriter indexWriter IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter taxonomyWriter Exceptions Type Condition System.IO.IOException Fields | Improve this Doc View Source INDEX_SOURCE Declaration public const string INDEX_SOURCE = \"index\" Field Value Type Description System.String | Improve this Doc View Source TAXONOMY_SOURCE Declaration public const string TAXONOMY_SOURCE = \"taxonomy\" Field Value Type Description System.String Properties | Improve this Doc View Source SourceFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Declaration public virtual string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(IRevision) Declaration public virtual int CompareTo(IRevision other) Parameters Type Name Description IRevision other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(String) Compares this IndexAndTaxonomyRevision to the given Lucene.Net.Replicator.IndexAndTaxonomyRevision.version . Declaration public virtual int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Declaration public virtual Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release() Declaration public virtual void Release() Exceptions Type Condition System.IO.IOException | Improve this Doc View Source RevisionFiles(IndexCommit, IndexCommit) Returns a map of the revision files from the given IndexCommit s of the search and taxonomy indexes. Declaration public static IDictionary<string, IList<RevisionFile>> RevisionFiles(IndexCommit indexCommit, IndexCommit taxonomyCommit) Parameters Type Name Description IndexCommit indexCommit IndexCommit taxonomyCommit Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> Exceptions Type Condition System.IO.IOException | Improve this Doc View Source RevisionVersion(IndexCommit, IndexCommit) Returns a System.String representation of a revision's version from the given IndexCommit s of the search and taxonomy indexes. Declaration public static string RevisionVersion(IndexCommit indexCommit, IndexCommit taxonomyCommit) Parameters Type Name Description IndexCommit indexCommit IndexCommit taxonomyCommit Returns Type Description System.String a System.String representation of a revision's version from the given IndexCommit s of the search and taxonomy indexes. Implements IRevision System.IComparable<T> See Also IndexRevision"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexInputStream.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexInputStream.html",
    "title": "Class IndexInputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexInputStream A System.IO.Stream which wraps an IndexInput . Inheritance System.Object System.IO.Stream IndexInputStream Implements System.IDisposable Inherited Members System.IO.Stream.Null System.IO.Stream.CopyTo(System.IO.Stream) System.IO.Stream.CopyTo(System.IO.Stream, System.Int32) System.IO.Stream.CopyToAsync(System.IO.Stream) System.IO.Stream.CopyToAsync(System.IO.Stream, System.Int32) System.IO.Stream.CopyToAsync(System.IO.Stream, System.Int32, System.Threading.CancellationToken) System.IO.Stream.Dispose() System.IO.Stream.FlushAsync() System.IO.Stream.FlushAsync(System.Threading.CancellationToken) System.IO.Stream.ReadAsync(System.Byte[], System.Int32, System.Int32) System.IO.Stream.ReadAsync(System.Byte[], System.Int32, System.Int32, System.Threading.CancellationToken) System.IO.Stream.ReadByte() System.IO.Stream.WriteAsync(System.Byte[], System.Int32, System.Int32) System.IO.Stream.WriteAsync(System.Byte[], System.Int32, System.Int32, System.Threading.CancellationToken) System.IO.Stream.WriteByte(System.Byte) System.IO.Stream.CanTimeout System.IO.Stream.ReadTimeout System.IO.Stream.WriteTimeout System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexInputStream : Stream, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexInputStream(IndexInput) Declaration public IndexInputStream(IndexInput input) Parameters Type Name Description IndexInput input Properties | Improve this Doc View Source CanRead Declaration public override bool CanRead { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanRead | Improve this Doc View Source CanSeek Declaration public override bool CanSeek { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanSeek | Improve this Doc View Source CanWrite Declaration public override bool CanWrite { get; } Property Value Type Description System.Boolean Overrides System.IO.Stream.CanWrite | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides System.IO.Stream.Length | Improve this Doc View Source Position Declaration public override long Position { get; set; } Property Value Type Description System.Int64 Overrides System.IO.Stream.Position Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.Stream.Dispose(System.Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides System.IO.Stream.Flush() | Improve this Doc View Source Read(Byte[], Int32, Int32) Declaration public override int Read(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count Returns Type Description System.Int32 Overrides System.IO.Stream.Read(System.Byte[], System.Int32, System.Int32) | Improve this Doc View Source Seek(Int64, SeekOrigin) Declaration public override long Seek(long offset, SeekOrigin origin) Parameters Type Name Description System.Int64 offset System.IO.SeekOrigin origin Returns Type Description System.Int64 Overrides System.IO.Stream.Seek(System.Int64, System.IO.SeekOrigin) | Improve this Doc View Source SetLength(Int64) Declaration public override void SetLength(long value) Parameters Type Name Description System.Int64 value Overrides System.IO.Stream.SetLength(System.Int64) | Improve this Doc View Source Write(Byte[], Int32, Int32) Declaration public override void Write(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count Overrides System.IO.Stream.Write(System.Byte[], System.Int32, System.Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexReplicationHandler.html",
    "title": "Class IndexReplicationHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexReplicationHandler A IReplicationHandler for replication of an index. Implements RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) by copying the files pointed by the client resolver to the index Directory and then touches the index with IndexWriter to make sure any unused files are deleted. Inheritance System.Object IndexReplicationHandler Implements IReplicationHandler Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexReplicationHandler : IReplicationHandler Remarks NOTE: This handler assumes that IndexWriter is not opened by another process on the index directory. In fact, opening an IndexWriter on the same directory to which files are copied can lead to undefined behavior, where some or all the files will be deleted, override other files or simply create a mess. When you replicate an index, it is best if the index is never modified by IndexWriter , except the one that is open on the source index, from which you replicate. This handler notifies the application via a provided when an updated index commit was made available for it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexReplicationHandler(Directory, Func<Nullable<Boolean>>) Constructor with the given index directory and callback to notify when the indexes were updated. Declaration public IndexReplicationHandler(Directory indexDirectory, Func<bool?> callback) Parameters Type Name Description Directory indexDirectory System.Func < System.Nullable < System.Boolean >> callback Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component used to log messages to the Default InfoStream . Declaration public const string INFO_STREAM_COMPONENT = \"IndexReplicationHandler\" Field Value Type Description System.String Properties | Improve this Doc View Source CurrentRevisionFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Declaration public virtual string CurrentVersion { get; } Property Value Type Description System.String | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source CleanupFilesOnFailure(Directory, IList<String>) Cleanup the index directory by deleting all given files. Called when file copy or sync failed. Declaration public static void CleanupFilesOnFailure(Directory directory, IList<string> files) Parameters Type Name Description Directory directory System.Collections.Generic.IList < System.String > files | Improve this Doc View Source CleanupOldIndexFiles(Directory, String) Cleans up the index directory from old index files. This method uses the last commit found by GetLastCommit(Directory) . If it matches the expected segmentsFile , then all files not referenced by this commit point are deleted. Declaration public static void CleanupOldIndexFiles(Directory directory, string segmentsFile) Parameters Type Name Description Directory directory System.String segmentsFile Remarks NOTE: This method does a best effort attempt to clean the index directory. It suppresses any exceptions that occur, as this can be retried the next time. | Improve this Doc View Source CopyFiles(Directory, Directory, IList<String>) Copies the provided list of files from the source Directory to the target Directory , if they are not the same. Declaration public static void CopyFiles(Directory source, Directory target, IList<string> files) Parameters Type Name Description Directory source Directory target System.Collections.Generic.IList < System.String > files Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetLastCommit(Directory) Returns the last IndexCommit found in the Directory , or null if there are no commits. Declaration public static IndexCommit GetLastCommit(Directory directory) Parameters Type Name Description Directory directory Returns Type Description IndexCommit Exceptions Type Condition System.IO.IOException | Improve this Doc View Source GetSegmentsFile(IList<String>, Boolean) Verifies that the last file is segments_N and fails otherwise. It also removes and returns the file from the list, because it needs to be handled last, after all files. This is important in order to guarantee that if a reader sees the new segments_N, all other segment files are already on stable storage. The reason why the code fails instead of putting segments_N file last is that this indicates an error in the IRevision implementation. Declaration public static string GetSegmentsFile(IList<string> files, bool allowEmpty) Parameters Type Name Description System.Collections.Generic.IList < System.String > files System.Boolean allowEmpty Returns Type Description System.String | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Declaration public virtual void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles System.Collections.Generic.IDictionary < System.String , Directory > sourceDirectory | Improve this Doc View Source WriteSegmentsGen(String, Directory) Writes SEGMENTS_GEN file to the directory, reading the generation from the given segmentsFile . If it is null , this method deletes segments.gen from the directory. Declaration public static void WriteSegmentsGen(string segmentsFile, Directory directory) Parameters Type Name Description System.String segmentsFile Directory directory Implements IReplicationHandler"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexRevision.html",
    "title": "Class IndexRevision | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexRevision A IRevision of a single index files which comprises the list of files that are part of the current IndexCommit . To ensure the files are not deleted by IndexWriter for as long as this revision stays alive (i.e. until Release() , the current commit point is snapshotted, using SnapshotDeletionPolicy (this means that the given writer's IndexDeletionPolicy should return SnapshotDeletionPolicy ). When this revision is Release() d, it releases the obtained snapshot as well as calls DeleteUnusedFiles() so that the snapshotted files are deleted (if they are no longer needed). Inheritance System.Object IndexRevision Implements IRevision System.IComparable < IRevision > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexRevision : IRevision, IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexRevision(IndexWriter) Constructor over the given IndexWriter . Uses the last IndexCommit found in the Directory managed by the given writer. Declaration public IndexRevision(IndexWriter writer) Parameters Type Name Description IndexWriter writer Properties | Improve this Doc View Source SourceFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Declaration public virtual string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(IRevision) Declaration public virtual int CompareTo(IRevision other) Parameters Type Name Description IRevision other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(String) Declaration public virtual int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Declaration public virtual Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Release() Declaration public virtual void Release() | Improve this Doc View Source RevisionFiles(IndexCommit) Returns a singleton map of the revision files from the given IndexCommit . Declaration public static IDictionary<string, IList<RevisionFile>> RevisionFiles(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source RevisionVersion(IndexCommit) Returns a string representation of a revision's version from the given IndexCommit Declaration public static string RevisionVersion(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IRevision System.IComparable<T>"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicator.html",
    "title": "Interface IReplicator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicator An interface for replicating files. Allows a producer to Publish(IRevision) IRevision s and consumers to CheckForUpdate(String) . When a client needs to be updated, it is given a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. After the client has finished obtaining all the files, it should Release(String) the given session, so that the files can be reclaimed if they are not needed anymore. A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the client will next check for update, it will receive r3 . Inherited Members System.IDisposable.Dispose() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicator : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Methods | Improve this Doc View Source CheckForUpdate(String) Check whether the given version is up-to-date and returns a SessionToken which can be used for fetching the revision files, otherwise returns null . Declaration SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken Remarks NOTE: When the returned session token is no longer needed, you should call Release(String) so that the session resources can be reclaimed, including the revision files. Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ObtainFile(String, String, String) Returns an System.IO.Stream for the requested file and source in the context of the given Id . Declaration Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream Remarks NOTE: It is the caller's responsibility to call System.IDisposable.Dispose() on the returned stream. Exceptions Type Condition SessionExpiredException The specified session has already expired | Improve this Doc View Source Publish(IRevision) Publish a new IRevision for consumption by clients. It is the caller's responsibility to verify that the revision files exist and can be read by clients. When the revision is no longer needed, it will be Release(String) d by the replicator. Declaration void Publish(IRevision revision) Parameters Type Name Description IRevision revision The IRevision to publish. Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release(String) Notify that the specified SessionToken is no longer needed by the caller. Declaration void Release(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionLengthAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IPositionLengthAttribute.html",
    "title": "Interface IPositionLengthAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPositionLengthAttribute Determines how many positions this token spans. Very few analyzer components actually produce this attribute, and indexing ignores it, but it's useful to express the graph structure naturally produced by decompounding, word splitting/joining, synonym filtering, etc. NOTE: this is optional, and most analyzers don't change the default value (1). Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IPositionLengthAttribute : IAttribute Properties | Improve this Doc View Source PositionLength Gets or Sets the position length of this Token (how many positions this token spans). The default value is one. Declaration int PositionLength { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if value is set to zero or negative. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IList-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IList-1.html",
    "title": "Interface IList<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IList<T> This is an indexed collection, where the item order is chosen by the user at insertion time. NBNBNB: we need a description of the view functionality here! Inherited Members IIndexed<T>.IndexingSpeed IIndexed<T>.Item[Int32, Int32] IIndexed<T>.LastIndexOf(T) IIndexed<T>.FindIndex(Func<T, Boolean>) IIndexed<T>.FindLastIndex(Func<T, Boolean>) IIndexed<T>.RemoveInterval(Int32, Int32) ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(IEnumerable<T>) ICollection<T>.RetainAll(IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction System.IDisposable.Dispose() System.Collections.Generic.IList<T>.Insert(System.Int32, T) System.Collections.Generic.IEnumerable<T>.GetEnumerator() System.Collections.IList.Add(System.Object) System.Collections.IList.Contains(System.Object) System.Collections.IList.IndexOf(System.Object) System.Collections.IList.Insert(System.Int32, System.Object) System.Collections.IList.Remove(System.Object) System.Collections.IList.IsFixedSize System.Collections.ICollection.CopyTo(System.Array, System.Int32) System.Collections.ICollection.IsSynchronized System.Collections.ICollection.SyncRoot Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IList<T> : IIndexed<T>, ISequenced<T>, ICollection<T>, IExtensible<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, IDisposable, IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source Count Declaration int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source FIFO Since Add(T item) always add at the end of the list, this describes if list has FIFO or LIFO semantics. Declaration bool FIFO { get; set; } Property Value Type Description System.Boolean True if the Remove() operation removes from the start of the list, false if it removes from the end. | Improve this Doc View Source First Declaration T First { get; } Property Value Type Description T The first item in this list. Exceptions Type Condition NoSuchItemException if this list is empty. | Improve this Doc View Source IsReadOnly Declaration bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsValid Declaration bool IsValid { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] On this list, this indexer is read/write. Declaration T this[int index] { get; set; } Parameters Type Name Description System.Int32 index The index of the item to fetch or store. Property Value Type Description T The index'th item of this list. Exceptions Type Condition System.IndexOutOfRangeException if index is negative or = the size of the collection. | Improve this Doc View Source Last Declaration T Last { get; } Property Value Type Description T The last item in this list. Exceptions Type Condition NoSuchItemException if this list is empty. | Improve this Doc View Source Offset Declaration int Offset { get; } Property Value Type Description System.Int32 Offset for this list view or 0 for an underlying list. | Improve this Doc View Source Underlying Null if this list is not a view. Declaration IList<T> Underlying { get; } Property Value Type Description IList <T> Underlying list for view. Methods | Improve this Doc View Source Add(T) Declaration bool Add(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source Clear() Declaration void Clear() | Improve this Doc View Source Contains(T) Declaration bool Contains(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(T[], Int32) Declaration void CopyTo(T[] array, int index) Parameters Type Name Description T[] array System.Int32 index | Improve this Doc View Source FindAll(Func<T, Boolean>) Create a new list consisting of the items of this list satisfying a certain predicate. Declaration IList<T> FindAll(Func<T, bool> filter) Parameters Type Name Description System.Func <T, System.Boolean > filter The filter delegate defining the predicate. Returns Type Description IList <T> The new list. | Improve this Doc View Source IndexOf(T) Searches for an item in the list going forwards from the start. Declaration int IndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of item from start. A negative number if item not found, namely the one's complement of the index at which the Add operation would put the item. | Improve this Doc View Source Insert(IList<T>, T) Insert an item at the end of a compatible view, used as a pointer. The pointer must be a view on the same list as this and the endpoint of pointer must be a valid insertion point of this Declaration void Insert(IList<T> pointer, T item) Parameters Type Name Description IList <T> pointer T item Exceptions Type Condition IncompatibleViewException If pointer is not a view on the same list as this System.IndexOutOfRangeException ?????? if the endpoint of pointer is not inside this DuplicateNotAllowedException if the list has AllowsDuplicates==false and the item is already in the list. | Improve this Doc View Source InsertAll(Int32, IEnumerable<T>) Insert into this list all items from an enumerable collection starting at a particular index. Declaration void InsertAll(int index, IEnumerable<T> items) Parameters Type Name Description System.Int32 index Index to start inserting at System.Collections.Generic.IEnumerable <T> items Items to insert Exceptions Type Condition System.IndexOutOfRangeException if index is negative or the size of the collection. DuplicateNotAllowedException if the list has AllowsDuplicates==false and one of the items to insert is already in the list. | Improve this Doc View Source InsertFirst(T) Insert an item at the front of this list. DuplicateNotAllowedException if the list has AllowsDuplicates==false and the item is already in the list. Declaration void InsertFirst(T item) Parameters Type Name Description T item The item to insert. | Improve this Doc View Source InsertLast(T) Insert an item at the back of this list. DuplicateNotAllowedException if the list has AllowsDuplicates==false and the item is already in the list. Declaration void InsertLast(T item) Parameters Type Name Description T item The item to insert. | Improve this Doc View Source IsSorted() Check if this list is sorted according to the default sorting order for the item type T, as defined by the C5.Comparer`1 class Declaration bool IsSorted() Returns Type Description System.Boolean True if the list is sorted, else false. Exceptions Type Condition NotComparableException if T is not comparable | Improve this Doc View Source IsSorted(IComparer<T>) Check if this list is sorted according to a specific sorting order. Declaration bool IsSorted(IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The comparer defining the sorting order. Returns Type Description System.Boolean True if the list is sorted, else false. | Improve this Doc View Source LastViewOf(T) Create a list view on this list containing the last occurrence of a particular item. NoSuchItemException if the item is not in this list. Declaration IList<T> LastViewOf(T item) Parameters Type Name Description T item The item to find. Returns Type Description IList <T> The new list view. | Improve this Doc View Source Map<V>(Func<T, V>) Create a new list consisting of the results of mapping all items of this list. The new list will use the default equalityComparer for the item type V. Declaration IList<V> Map<V>(Func<T, V> mapper) Parameters Type Name Description System.Func <T, V> mapper The delegate defining the map. Returns Type Description IList <V> The new list. Type Parameters Name Description V The type of items of the new list | Improve this Doc View Source Map<V>(Func<T, V>, IEqualityComparer<V>) Create a new list consisting of the results of mapping all items of this list. The new list will use a specified equalityComparer for the item type. Declaration IList<V> Map<V>(Func<T, V> mapper, IEqualityComparer<V> equalityComparer) Parameters Type Name Description System.Func <T, V> mapper The delegate defining the map. System.Collections.Generic.IEqualityComparer <V> equalityComparer The equalityComparer to use for the new list Returns Type Description IList <V> The new list. Type Parameters Name Description V The type of items of the new list | Improve this Doc View Source Remove() Remove one item from the list: from the front if FIFO is true, else from the back. NoSuchItemException if this list is empty. Declaration T Remove() Returns Type Description T The removed item. | Improve this Doc View Source Remove(T) Declaration bool Remove(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source RemoveAt(Int32) Remove the item at a specific position of the list. Declaration T RemoveAt(int index) Parameters Type Name Description System.Int32 index The index of the item to remove. Returns Type Description T The removed item. Exceptions Type Condition System.IndexOutOfRangeException if index is negative or = the size of the collection. | Improve this Doc View Source RemoveFirst() Remove one item from the front of the list. NoSuchItemException if this list is empty. Declaration T RemoveFirst() Returns Type Description T The removed item. | Improve this Doc View Source RemoveLast() Remove one item from the back of the list. NoSuchItemException if this list is empty. Declaration T RemoveLast() Returns Type Description T The removed item. | Improve this Doc View Source Reverse() Reverse the list so the items are in the opposite sequence order. Declaration void Reverse() | Improve this Doc View Source Shuffle() Randomly shuffle the items of this list. Declaration void Shuffle() | Improve this Doc View Source Shuffle(Random) Shuffle the items of this list according to a specific random source. Declaration void Shuffle(Random rnd) Parameters Type Name Description System.Random rnd The random source. | Improve this Doc View Source Slide(Int32) Slide this list view along the underlying list. Declaration IList<T> Slide(int offset) Parameters Type Name Description System.Int32 offset The signed amount to slide: positive to slide towards the end. Returns Type Description IList <T> Exceptions Type Condition NotAViewException if this list is not a view. System.ArgumentOutOfRangeException if the operation would bring either end of the view outside the underlying list. | Improve this Doc View Source Slide(Int32, Int32) Slide this list view along the underlying list, changing its size. Declaration IList<T> Slide(int offset, int size) Parameters Type Name Description System.Int32 offset The signed amount to slide: positive to slide towards the end. System.Int32 size The new size of the view. Returns Type Description IList <T> Exceptions Type Condition NotAViewException if this list is not a view. System.ArgumentOutOfRangeException if the operation would bring either end of the view outside the underlying list. | Improve this Doc View Source Sort() Sort the items of the list according to the default sorting order for the item type T, as defined by the C5.Comparer`1 class Declaration void Sort() Exceptions Type Condition NotComparableException if T is not comparable | Improve this Doc View Source Sort(IComparer<T>) Sort the items of the list according to a specified sorting order. The sorting does not perform duplicate elimination or identify items according to the comparer or itemequalityComparer. I.e. the list as an unsequenced collection with binary equality, will not change. Declaration void Sort(IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The comparer defining the sorting order. | Improve this Doc View Source Span(IList<T>) Returns null if otherView is strictly to the left of this view Declaration IList<T> Span(IList<T> otherView) Parameters Type Name Description IList <T> otherView Returns Type Description IList <T> Exceptions Type Condition IncompatibleViewException If otherView does not have the same underlying list as this System.ArgumentOutOfRangeException If otherView is strictly to the left of this view | Improve this Doc View Source TrySlide(Int32) Declaration bool TrySlide(int offset) Parameters Type Name Description System.Int32 offset Returns Type Description System.Boolean | Improve this Doc View Source TrySlide(Int32, Int32) Declaration bool TrySlide(int offset, int size) Parameters Type Name Description System.Int32 offset System.Int32 size Returns Type Description System.Boolean | Improve this Doc View Source View(Int32, Int32) Create a list view on this list. System.ArgumentOutOfRangeException if the view would not fit into this list. Declaration IList<T> View(int start, int count) Parameters Type Name Description System.Int32 start The index in this list of the start of the view. System.Int32 count The size of the view. Returns Type Description IList <T> The new list view. | Improve this Doc View Source ViewOf(T) Create a list view on this list containing the (first) occurrence of a particular item. NoSuchItemException if the item is not in this list. Declaration IList<T> ViewOf(T item) Parameters Type Name Description T item The item to find. Returns Type Description IList <T> The new list view. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) ListExtensions.AddRange<T>(IList<T>, IEnumerable<T>) ListExtensions.Shuffle<T>(IList<T>) ListExtensions.Shuffle<T>(IList<T>, Random) ListExtensions.SubList<T>(IList<T>, Int32, Int32) ListExtensions.Swap<T>(IList<T>, Int32, Int32) ListExtensions.Sort<T>(IList<T>) ListExtensions.Sort<T>(IList<T>, IComparer<T>) ListExtensions.Sort<T>(IList<T>, Comparison<T>) ListExtensions.TimSort<T>(IList<T>) ListExtensions.TimSort<T>(IList<T>, IComparer<T>) ListExtensions.IntroSort<T>(IList<T>) ListExtensions.IntroSort<T>(IList<T>, IComparer<T>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IncompatibleViewException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IncompatibleViewException.html",
    "title": "Class IncompatibleViewException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IncompatibleViewException An exception thrown by operations on a list that expects an argument that is a view on the same underlying list. Inheritance System.Object System.Exception IncompatibleViewException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class IncompatibleViewException : Exception Constructors | Improve this Doc View Source IncompatibleViewException() Create a simple exception with no further explanation. Declaration public IncompatibleViewException() | Improve this Doc View Source IncompatibleViewException(String) Create the exception with an explanation of the reason. Declaration public IncompatibleViewException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.InternalException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.InternalException.html",
    "title": "Class InternalException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InternalException An exception to throw from library code when an internal inconsistency is encountered. Inheritance System.Object System.Exception InternalException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class InternalException : Exception Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.InvalidPriorityQueueHandleException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.InvalidPriorityQueueHandleException.html",
    "title": "Class InvalidPriorityQueueHandleException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InvalidPriorityQueueHandleException Inheritance System.Object System.Exception InvalidPriorityQueueHandleException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class InvalidPriorityQueueHandleException : Exception Constructors | Improve this Doc View Source InvalidPriorityQueueHandleException() Create a simple exception with no further explanation. Declaration public InvalidPriorityQueueHandleException() | Improve this Doc View Source InvalidPriorityQueueHandleException(String) Create the exception with an explanation of the reason. Declaration public InvalidPriorityQueueHandleException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IPersistentSorted-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IPersistentSorted-1.html",
    "title": "Interface IPersistentSorted<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPersistentSorted<T> The type of a sorted collection with persistence Inherited Members ISorted<T>.FindMin() ISorted<T>.DeleteMin() ISorted<T>.FindMax() ISorted<T>.DeleteMax() ISorted<T>.Comparer ISorted<T>.TryPredecessor(T, T) ISorted<T>.TrySuccessor(T, T) ISorted<T>.TryWeakPredecessor(T, T) ISorted<T>.TryWeakSuccessor(T, T) ISorted<T>.Predecessor(T) ISorted<T>.Successor(T) ISorted<T>.WeakPredecessor(T) ISorted<T>.WeakSuccessor(T) ISorted<T>.Cut(IComparable<T>, T, Boolean, T, Boolean) ISorted<T>.RangeFrom(T) ISorted<T>.RangeFromTo(T, T) ISorted<T>.RangeTo(T) ISorted<T>.RangeAll() ISorted<T>.AddSorted(IEnumerable<T>) ISorted<T>.RemoveRangeFrom(T) ISorted<T>.RemoveRangeFromTo(T, T) ISorted<T>.RemoveRangeTo(T) ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction System.Collections.Generic.IEnumerable<T>.GetEnumerator() System.IDisposable.Dispose() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IPersistentSorted<T> : ISorted<T>, ISequenced<T>, ICollection<T>, IExtensible<T>, ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable, IDisposable Type Parameters Name Description T Methods | Improve this Doc View Source Snapshot() Make a (read-only) snap shot of this collection. Declaration ISorted<T> Snapshot() Returns Type Description ISorted <T> The snap shot. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IPriorityQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IPriorityQueue-1.html",
    "title": "Interface IPriorityQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPriorityQueue<T> A generic collection of items prioritized by a comparison (order) relation. Supports adding items and reporting or removing extremal elements. When adding an item, the user may choose to have a handle allocated for this item in the queue. The resulting handle may be used for deleting the item even if not extremal, and for replacing the item. A priority queue typically only holds numeric priorities associated with some objects maintained separately in other collection objects. Inherited Members IExtensible<T>.IsReadOnly IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.Add(T) IExtensible<T>.AddAll(IEnumerable<T>) IExtensible<T>.Check() ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) System.Collections.Generic.IEnumerable<T>.GetEnumerator() IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IPriorityQueue<T> : IExtensible<T>, ICollectionValue<T>, IEnumerable<T>, IEnumerable, IShowable, IFormattable Type Parameters Name Description T Properties | Improve this Doc View Source Comparer The comparer object supplied at creation time for this collection Declaration IComparer<T> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <T> The comparer | Improve this Doc View Source Item[IPriorityQueueHandle<T>] Get or set the item corresponding to a handle. Throws exceptions on invalid handles. Declaration T this[IPriorityQueueHandle<T> handle] { get; set; } Parameters Type Name Description IPriorityQueueHandle <T> handle Property Value Type Description T Methods | Improve this Doc View Source Add(ref IPriorityQueueHandle<T>, T) Add an item to the priority queue, receiving a handle for the item in the queue, or reusing an existing unused handle. Declaration bool Add(ref IPriorityQueueHandle<T> handle, T item) Parameters Type Name Description IPriorityQueueHandle <T> handle On output: a handle for the added item. On input: null for allocating a new handle, or a currently unused handle for reuse. A handle for reuse must be compatible with this priority queue, by being created by a priority queue of the same runtime type, but not necessarily the same priority queue object. T item Returns Type Description System.Boolean | Improve this Doc View Source Delete(IPriorityQueueHandle<T>) Delete an item with a handle from a priority queue Declaration T Delete(IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle The handle for the item. The handle will be invalidated, but reusable. Returns Type Description T The deleted item | Improve this Doc View Source DeleteMax() Remove the largest item from this priority queue. Declaration T DeleteMax() Returns Type Description T The removed item. | Improve this Doc View Source DeleteMax(out IPriorityQueueHandle<T>) Remove the largest item from this priority queue. Declaration T DeleteMax(out IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle On return: the handle of the removed item. Returns Type Description T The removed item. | Improve this Doc View Source DeleteMin() Remove the least item from this priority queue. Declaration T DeleteMin() Returns Type Description T The removed item. | Improve this Doc View Source DeleteMin(out IPriorityQueueHandle<T>) Remove the least item from this priority queue. Declaration T DeleteMin(out IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle On return: the handle of the removed item. Returns Type Description T The removed item. | Improve this Doc View Source Find(IPriorityQueueHandle<T>, out T) Check if the entry corresponding to a handle is in the priority queue. Declaration bool Find(IPriorityQueueHandle<T> handle, out T item) Parameters Type Name Description IPriorityQueueHandle <T> handle T item Returns Type Description System.Boolean | Improve this Doc View Source FindMax() Find the current largest item of this priority queue. Declaration T FindMax() Returns Type Description T The largest item. | Improve this Doc View Source FindMax(out IPriorityQueueHandle<T>) Find the current largest item of this priority queue. Declaration T FindMax(out IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle On return: the handle of the item. Returns Type Description T The largest item. | Improve this Doc View Source FindMin() Find the current least item of this priority queue. Declaration T FindMin() Returns Type Description T The least item. | Improve this Doc View Source FindMin(out IPriorityQueueHandle<T>) Find the current least item of this priority queue. Declaration T FindMin(out IPriorityQueueHandle<T> handle) Parameters Type Name Description IPriorityQueueHandle <T> handle On return: the handle of the item. Returns Type Description T The least item. | Improve this Doc View Source Replace(IPriorityQueueHandle<T>, T) Replace an item with a handle in a priority queue with a new item. Typically used for changing the priority of some queued object. Declaration T Replace(IPriorityQueueHandle<T> handle, T item) Parameters Type Name Description IPriorityQueueHandle <T> handle The handle for the old item T item The new item Returns Type Description T The old item Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.CRC32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.CRC32.html",
    "title": "Class CRC32 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CRC32 Inheritance System.Object CRC32 Implements IChecksum Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class CRC32 : IChecksum Properties | Improve this Doc View Source Value Declaration public long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Reset() Declaration public void Reset() | Improve this Doc View Source Update(Byte[]) Declaration public void Update(byte[] buf) Parameters Type Name Description System.Byte [] buf | Improve this Doc View Source Update(Byte[], Int32, Int32) Declaration public void Update(byte[] buf, int off, int len) Parameters Type Name Description System.Byte [] buf System.Int32 off System.Int32 len | Improve this Doc View Source Update(Int32) Declaration public void Update(int bval) Parameters Type Name Description System.Int32 bval Implements IChecksum Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.CultureContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.CultureContext.html",
    "title": "Class CultureContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CultureContext Allows switching the current thread to a new culture in a using block that will automatically return the culture to its previous state upon completion. Inheritance System.Object CultureContext Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public sealed class CultureContext : IDisposable Constructors | Improve this Doc View Source CultureContext(CultureInfo) Declaration public CultureContext(CultureInfo culture) Parameters Type Name Description System.Globalization.CultureInfo culture | Improve this Doc View Source CultureContext(CultureInfo, CultureInfo) Declaration public CultureContext(CultureInfo culture, CultureInfo uiCulture) Parameters Type Name Description System.Globalization.CultureInfo culture System.Globalization.CultureInfo uiCulture | Improve this Doc View Source CultureContext(String) Declaration public CultureContext(string cultureName) Parameters Type Name Description System.String cultureName | Improve this Doc View Source CultureContext(String, String) Declaration public CultureContext(string cultureName, string uiCultureName) Parameters Type Name Description System.String cultureName System.String uiCultureName Properties | Improve this Doc View Source OriginalCulture Declaration public CultureInfo OriginalCulture { get; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source OriginalUICulture Declaration public CultureInfo OriginalUICulture { get; } Property Value Type Description System.Globalization.CultureInfo Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source RestoreOriginalCulture() Declaration public void RestoreOriginalCulture() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xCodec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.Lucene3xCodec.html",
    "title": "Class Lucene3xCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene3xCodec Supports the Lucene 3.x index format (readonly) Inheritance System.Object Codec Lucene3xCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene3x Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading existing 3.x indexes\")] [CodecName(\"Lucene3x\")] public class Lucene3xCodec : Codec Constructors | Improve this Doc View Source Lucene3xCodec() Declaration public Lucene3xCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocStoreFiles(SegmentInfo) Returns file names for shared doc stores, if any, else null . Declaration public static ISet<string> GetDocStoreFiles(SegmentInfo info) Parameters Type Name Description SegmentInfo info Returns Type Description System.Collections.Generic.ISet < System.String > Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsReader.html",
    "title": "Class Lucene40PostingsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40PostingsReader Concrete class that reads the 4.0 frq/prox postings format. Inheritance System.Object PostingsReaderBase Lucene40PostingsReader Implements System.IDisposable Inherited Members PostingsReaderBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] public class Lucene40PostingsReader : PostingsReaderBase, IDisposable Constructors | Improve this Doc View Source Lucene40PostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, String) Sole constructor. Declaration public Lucene40PostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext ioContext, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext ioContext System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Lucene40PostingsFormat"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.RemoveEmptyNonLeafQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.RemoveEmptyNonLeafQueryNodeProcessor.html",
    "title": "Class RemoveEmptyNonLeafQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RemoveEmptyNonLeafQueryNodeProcessor This processor removes every IQueryNode that is not a leaf and has not children. If after processing the entire tree the root node is not a leaf and has no children, a MatchNoDocsQueryNode object is returned. This processor is used at the end of a pipeline to avoid invalid query node tree structures like a GroupQueryNode or ModifierQueryNode with no children. Inheritance System.Object QueryNodeProcessor RemoveEmptyNonLeafQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class RemoveEmptyNonLeafQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source RemoveEmptyNonLeafQueryNodeProcessor() Declaration public RemoveEmptyNonLeafQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also IQueryNode MatchNoDocsQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.StandardQueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.StandardQueryNodeProcessorPipeline.html",
    "title": "Class StandardQueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardQueryNodeProcessorPipeline This pipeline has all the processors needed to process a query node tree, generated by StandardSyntaxParser , already assembled. The order they are assembled affects the results. This processor pipeline was designed to work with StandardQueryConfigHandler . The result query node tree can be used to build a Query object using StandardQueryTreeBuilder . Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline PrecedenceQueryNodeProcessorPipeline Implements IQueryNodeProcessor System.Collections.Generic.IList < IQueryNodeProcessor > System.Collections.Generic.ICollection < IQueryNodeProcessor > System.Collections.Generic.IEnumerable < IQueryNodeProcessor > System.Collections.IEnumerable Inherited Members QueryNodeProcessorPipeline.GetQueryConfigHandler() QueryNodeProcessorPipeline.Process(IQueryNode) QueryNodeProcessorPipeline.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessorPipeline.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Clear() QueryNodeProcessorPipeline.Contains(Object) QueryNodeProcessorPipeline.Item[Int32] QueryNodeProcessorPipeline.IndexOf(IQueryNodeProcessor) QueryNodeProcessorPipeline.GetEnumerator() QueryNodeProcessorPipeline.Remove(IQueryNodeProcessor) QueryNodeProcessorPipeline.RemoveAt(Int32) QueryNodeProcessorPipeline.RemoveRange(Int32, Int32) QueryNodeProcessorPipeline.Set(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.Count QueryNodeProcessorPipeline.IsReadOnly QueryNodeProcessorPipeline.GetRange(Int32, Int32) QueryNodeProcessorPipeline.Insert(Int32, IQueryNodeProcessor) QueryNodeProcessorPipeline.ICollection<IQueryNodeProcessor>.Add(IQueryNodeProcessor) QueryNodeProcessorPipeline.Contains(IQueryNodeProcessor) QueryNodeProcessorPipeline.CopyTo(IQueryNodeProcessor[], Int32) QueryNodeProcessorPipeline.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryNodeProcessorPipeline : QueryNodeProcessorPipeline, IQueryNodeProcessor, IList<IQueryNodeProcessor>, ICollection<IQueryNodeProcessor>, IEnumerable<IQueryNodeProcessor>, IEnumerable Constructors | Improve this Doc View Source StandardQueryNodeProcessorPipeline(QueryConfigHandler) Declaration public StandardQueryNodeProcessorPipeline(QueryConfigHandler queryConfig) Parameters Type Name Description QueryConfigHandler queryConfig Implements IQueryNodeProcessor System.Collections.Generic.IList<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable See Also StandardQueryTreeBuilder StandardQueryConfigHandler StandardSyntaxParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.TermRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.TermRangeQueryNodeProcessor.html",
    "title": "Class TermRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeQueryNodeProcessor This processors process TermRangeQueryNode s. It reads the lower and upper bounds value from the TermRangeQueryNode object and try to parse their values using a dateFormat . If the values cannot be parsed to a date value, it will only create the TermRangeQueryNode using the non-parsed values. If a LOCALE is defined in the QueryConfigHandler it will be used to parse the date, otherwise System.Globalization.CultureInfo.CurrentCulture will be used. If a DATE_RESOLUTION is defined and the DateTools.Resolution is not null it will also be used to parse the date value. Inheritance System.Object QueryNodeProcessor TermRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source TermRangeQueryNodeProcessor() Declaration public TermRangeQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also DATE_RESOLUTION LOCALE TermRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.WildcardQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.WildcardQueryNodeProcessor.html",
    "title": "Class WildcardQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WildcardQueryNodeProcessor The StandardSyntaxParser creates PrefixWildcardQueryNode nodes which have values containing the prefixed wildcard. However, Lucene PrefixQuery cannot contain the prefixed wildcard. So, this processor basically removed the prefixed wildcard from the PrefixWildcardQueryNode value. Inheritance System.Object QueryNodeProcessor WildcardQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source WildcardQueryNodeProcessor() Declaration public WildcardQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also PrefixQuery PrefixWildcardQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.StandardQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.StandardQueryParser.html",
    "title": "Class StandardQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardQueryParser This class is a helper that enables users to easily use the Lucene query parser. To construct a Query object from a query string, use the Parse(String, String) method: StandardQueryParser queryParserHelper = new StandardQueryParser(); Query query = queryParserHelper.Parse(\"a AND b\", \"defaultField\"); To change any configuration before parsing the query string do, for example: // the query config handler returned by StandardQueryParser is a // StandardQueryConfigHandler queryParserHelper.QueryConfigHandler.Analyzer = new WhitespaceAnalyzer(); The syntax for query strings is as follows (copied from the old QueryParser javadoc): A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation. The text parser used by this helper is a StandardSyntaxParser . The query node processor used by this helper is a StandardQueryNodeProcessorPipeline . The builder used by this helper is a StandardQueryTreeBuilder . Inheritance System.Object QueryParserHelper < Query > StandardQueryParser PrecedenceQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParserHelper<Query>.QueryNodeProcessor QueryParserHelper<Query>.SetQueryNodeProcessor(IQueryNodeProcessor) QueryParserHelper<Query>.SetSyntaxParser(ISyntaxParser) QueryParserHelper<Query>.SetQueryBuilder(IQueryBuilder<Query>) QueryParserHelper<Query>.QueryConfigHandler QueryParserHelper<Query>.QueryBuilder QueryParserHelper<Query>.SyntaxParser QueryParserHelper<Query>.SetQueryConfigHandler(QueryConfigHandler) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardQueryParser : QueryParserHelper<Query>, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source StandardQueryParser() Constructs a StandardQueryParser object. Declaration public StandardQueryParser() | Improve this Doc View Source StandardQueryParser(Analyzer) Constructs a StandardQueryParser object and sets an Analyzer to it. The same as: StandardQueryParser qp = new StandardQueryParser(); qp.QueryConfigHandler.Analyzer = analyzer; Declaration public StandardQueryParser(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer the analyzer to be used by this query parser helper Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery . Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Analyzer Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source DateResolution Gets the default DateTools.Resolution used for certain field when no DateTools.Resolution is defined for this field. Declaration public virtual DateTools.Resolution DateResolution { get; } Property Value Type Description DateTools.Resolution | Improve this Doc View Source DateResolutionMap Gets or Sets the field to map used to normalize each date field. Declaration public virtual IDictionary<string, DateTools.Resolution?> DateResolutionMap { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Nullable < DateTools.Resolution >> | Improve this Doc View Source DefaultOperator Gets or Sets the boolean operator of the QueryParser. In default mode ( OR ) terms without any modifiers are considered optional: for example capital of Hungary is equal to capital OR of OR Hungary . In AND mode terms are considered to be in conjunction: the above mentioned query is parsed as capital AND of AND Hungary Declaration public virtual StandardQueryConfigHandler.Operator DefaultOperator { get; set; } Property Value Type Description StandardQueryConfigHandler.Operator | Improve this Doc View Source EnablePositionIncrements Set to true to enable position increments in result query. When set, result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: false. Declaration public virtual bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FieldsBoost Gets or Sets the field to boost map used to set boost for each field. Declaration public virtual IDictionary<string, float?> FieldsBoost { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Nullable < System.Single >> | Improve this Doc View Source FuzzyMinSim Gets or Sets the minimum similarity for fuzzy queries. Default is defined on DefaultMinSimilarity . Declaration public virtual float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Gets or Sets the prefix length for fuzzy queries. Default is 0. Declaration public virtual int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Gets or Sets current locale, allowing access by subclasses. Used by date range parsing Declaration public virtual CultureInfo Locale { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery . Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default, it uses CONSTANT_SCORE_AUTO_REWRITE_DEFAULT when creating a prefix, wildcard and range queries. This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any Exception due to too many listeners. However, if your application really needs to use the old-fashioned boolean queries expansion rewriting and the above points are not relevant then use this change the rewrite method. Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source NumericConfigMap Declaration public virtual IDictionary<string, NumericConfig> NumericConfigMap { get; set; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , NumericConfig > | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. NOTE: Setter is deprecated. Declaration public virtual int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description System.TimeZoneInfo Methods | Improve this Doc View Source GetMultiFields() Returns the fields used to expand the query when the field for a certain query is null Declaration public virtual string[] GetMultiFields() Returns Type Description System.String [] the fields used to expand the query | Improve this Doc View Source Parse(String, String) Overrides Parse(String, String) so it casts the return object to Query . For more reference about this method, check Parse(String, String) . Declaration public override Query Parse(string query, string defaultField) Parameters Type Name Description System.String query the query string System.String defaultField the default field used by the text parser Returns Type Description Query the object built from the query Overrides Lucene.Net.QueryParsers.Flexible.Core.QueryParserHelper<Lucene.Net.Search.Query>.Parse(System.String, System.String) Exceptions Type Condition QueryNodeException if something wrong happens along the three phases | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Sets the default DateTools.Resolution used for certain field when no DateTools.Resolution is defined for this field. Declaration public virtual void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution the default DateTools.Resolution | Improve this Doc View Source SetDateResolution(IDictionary<String, Nullable<DateTools.Resolution>>) Sets the DateTools.Resolution used for each field Declaration [Obsolete(\"Use DateResolutionMap property instead.\")] public virtual void SetDateResolution(IDictionary<string, DateTools.Resolution?> dateRes) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.Nullable < DateTools.Resolution >> dateRes a collection that maps a field to its DateTools.Resolution | Improve this Doc View Source SetDefaultPhraseSlop(Int32) Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration [Obsolete(\"Use PhraseSlop property setter instead.\")] public virtual void SetDefaultPhraseSlop(int defaultPhraseSlop) Parameters Type Name Description System.Int32 defaultPhraseSlop | Improve this Doc View Source SetMultiFields(String[]) Set the fields a query should be expanded to when the field is null Declaration public virtual void SetMultiFields(string[] fields) Parameters Type Name Description System.String [] fields the fields used to expand the query | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements ICommonQueryParserConfiguration See Also StandardQueryParser StandardQueryConfigHandler StandardSyntaxParser StandardQueryNodeProcessorPipeline StandardQueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.SimpleQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.SimpleQueryParser.html",
    "title": "Class SimpleQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleQueryParser SimpleQueryParser is used to parse human readable query syntax. The main idea behind this parser is that a person should be able to type whatever they want to represent a query, and this parser will do its best to interpret what to search for no matter how poorly composed the request may be. Tokens are considered to be any of a term, phrase, or subquery for the operations described below. Whitespace including ' ' '\\n' '\\r' and '\\t' and certain operators may be used to delimit tokens ( ) + | \" . Any errors in query syntax will be ignored and the parser will attempt to decipher what it can; however, this may mean odd or unexpected results. Query Operators ' + ' specifies AND operation: token1+token2 ' | ' specifies OR operation: token1|token2 ' - ' negates a single token: -token0 ' \" ' creates phrases of terms: \"term1 term2 ...\" ' ' at the end of terms specifies prefix query: term ' ~ N' at the end of terms specifies fuzzy query: term~1 ' ~ N' at the end of phrases specifies near query: \"term1 term2\"~5 ' ( ' and ' ) ' specifies precedence: token1 + (token2 | token3) The default operator is OR if no other operator is specified. For example, the following will OR token1 and token2 together: token1 token2 Normal operator precedence will be simple order from right to left. For example, the following will evaluate token1 OR token2 first, then AND with token3 : token1 | token2 + token3 Escaping An individual term may contain any possible character with certain characters requiring escaping using a ' </code>'. The following characters will need to be escaped in terms and phrases: + | \" ( ) ' </code> The ' - ' operator is a special case. On individual terms (not phrases) the first character of a term that is - must be escaped; however, any ' - ' characters beyond the first character do not need to be escaped. For example: -term1 -- Specifies NOT operation against term1 -term1 -- Searches for the term -term1 . term-1 -- Searches for the term term-1 . term-1 -- Searches for the term term-1 . The ' ' operator is a special case. On individual terms (not phrases) the last character of a term that is ' ' must be escaped; however, any ' ' characters before the last character do not need to be escaped: term1 -- Searches for the prefix term1 term1* -- Searches for the term term1 term1 -- Searches for the term term 1 term*1 -- Searches for the term term1 Note that above examples consider the terms before text processing. Inheritance System.Object QueryBuilder SimpleQueryParser Inherited Members QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Simple Assembly : Lucene.Net.QueryParser.dll Syntax public class SimpleQueryParser : QueryBuilder Constructors | Improve this Doc View Source SimpleQueryParser(Analyzer, IDictionary<String, Single>) Creates a new parser searching over multiple fields with different weights. Declaration public SimpleQueryParser(Analyzer analyzer, IDictionary<string, float> weights) Parameters Type Name Description Analyzer analyzer System.Collections.Generic.IDictionary < System.String , System.Single > weights | Improve this Doc View Source SimpleQueryParser(Analyzer, IDictionary<String, Single>, Operator) Creates a new parser with custom flags used to enable/disable certain features. Declaration public SimpleQueryParser(Analyzer analyzer, IDictionary<string, float> weights, Operator flags) Parameters Type Name Description Analyzer analyzer System.Collections.Generic.IDictionary < System.String , System.Single > weights Operator flags | Improve this Doc View Source SimpleQueryParser(Analyzer, String) Creates a new parser searching over a single field. Declaration public SimpleQueryParser(Analyzer analyzer, string field) Parameters Type Name Description Analyzer analyzer System.String field Fields | Improve this Doc View Source m_flags flags to the parser (to turn features on/off) Declaration protected readonly Operator m_flags Field Value Type Description Operator | Improve this Doc View Source m_weights Map of fields to query against with their weights Declaration protected readonly IDictionary<string, float> m_weights Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.Single > Properties | Improve this Doc View Source DefaultOperator Gets or Sets the implicit operator setting, which will be either SHOULD or MUST . Declaration public virtual Occur DefaultOperator { get; set; } Property Value Type Description Occur Methods | Improve this Doc View Source NewDefaultQuery(String) Factory method to generate a standard query (no phrase or prefix operators). Declaration protected virtual Query NewDefaultQuery(string text) Parameters Type Name Description System.String text Returns Type Description Query | Improve this Doc View Source NewFuzzyQuery(String, Int32) Factory method to generate a fuzzy query. Declaration protected virtual Query NewFuzzyQuery(string text, int fuzziness) Parameters Type Name Description System.String text System.Int32 fuzziness Returns Type Description Query | Improve this Doc View Source NewPhraseQuery(String, Int32) Factory method to generate a phrase query with slop. Declaration protected virtual Query NewPhraseQuery(string text, int slop) Parameters Type Name Description System.String text System.Int32 slop Returns Type Description Query | Improve this Doc View Source NewPrefixQuery(String) Factory method to generate a prefix query. Declaration protected virtual Query NewPrefixQuery(string text) Parameters Type Name Description System.String text Returns Type Description Query | Improve this Doc View Source Parse(String) Parses the query text and returns parsed query (or null if empty) Declaration public Query Parse(string queryText) Parameters Type Name Description System.String queryText Returns Type Description Query | Improve this Doc View Source Simplify(BooleanQuery) Helper to simplify boolean queries with 0 or 1 clause Declaration protected virtual Query Simplify(BooleanQuery bq) Parameters Type Name Description BooleanQuery bq Returns Type Description Query"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. Inheritance System.Object FastCharStream Implements ICharStream Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : ICharStream Constructors | Improve this Doc View Source FastCharStream(TextReader) Constructs from a System.IO.TextReader . Declaration public FastCharStream(TextReader r) Parameters Type Name Description System.IO.TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Declaration public string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object System.Exception ParseException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : Exception Constructors | Improve this Doc View Source ParseException() Declaration public ParseException() | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method \"GenerateParseException\" in the generated parser. Calling this constructor generates a new object of this type with the fields currentToken , expectedTokenSequences , and tokenImage set. Declaration public ParseException(Token currentToken, int[][] expectedTokenSequences, string[] tokenImage) Parameters Type Name Description Token currentToken System.Int32 [][] expectedTokenSequences System.String [] tokenImage | Improve this Doc View Source ParseException(String) Declaration public ParseException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source ParseException(String, Exception) Declaration public ParseException(string message, Exception innerException) Parameters Type Name Description System.String message System.Exception innerException Fields | Improve this Doc View Source eol The end of line string for this machine. Declaration protected static string eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token following this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String []"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.CharFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.CharFilter.html",
    "title": "Class CharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharFilter Subclasses of CharFilter can be chained to filter a System.IO.TextReader They can be used as System.IO.TextReader with additional offset correction. Tokenizer s will automatically use CorrectOffset(Int32) if a CharFilter subclass is used. This class is abstract: at a minimum you must implement System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) , transforming the input in some way from m_input , and Correct(Int32) to adjust the offsets to match the originals. You can optionally provide more efficient implementations of additional methods like System.IO.TextReader.Read() , but this is not required. For examples and integration with Analyzer , see the Lucene.Net.Analysis namespace documentation. Inheritance System.Object System.IO.TextReader CharFilter Implements System.IDisposable Inherited Members System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class CharFilter : TextReader, IDisposable Constructors | Improve this Doc View Source CharFilter(TextReader) Create a new CharFilter wrapping the provided reader. Declaration public CharFilter(TextReader input) Parameters Type Name Description System.IO.TextReader input a System.IO.TextReader , can also be a CharFilter for chaining. Fields | Improve this Doc View Source m_input The underlying character-input stream. Declaration protected readonly TextReader m_input Field Value Type Description System.IO.TextReader Properties | Improve this Doc View Source IsMarkSupported Tells whether this stream supports the Mark(Int32) operation. The default implementation always returns false. Subclasses should override this method. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual bool IsMarkSupported { get; } Property Value Type Description System.Boolean true if and only if this stream supports the mark operation. | Improve this Doc View Source IsReady Tells whether this stream is ready to be read. True if the next System.IO.TextReader.Read() is guaranteed not to block for input, false otherwise. Note that returning false does not guarantee that the next read will block. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual bool IsReady { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Correct(Int32) Subclasses override to correct the current offset. Declaration protected abstract int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff current offset Returns Type Description System.Int32 corrected offset | Improve this Doc View Source CorrectOffset(Int32) Chains the corrected offset through the input CharFilter (s). Declaration public int CorrectOffset(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 | Improve this Doc View Source Dispose(Boolean) Closes the underlying input stream. NOTE: The default implementation closes the input System.IO.TextReader , so be sure to call base.Dispose(disposing) when overriding this method. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.TextReader.Dispose(System.Boolean) | Improve this Doc View Source Mark(Int32) Marks the present position in the stream. Subsequent calls to Reset() will attempt to reposition the stream to this point. Not all character-input streams support the Mark(Int32) operation. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual void Mark(int readAheadLimit) Parameters Type Name Description System.Int32 readAheadLimit Limit on the number of characters that may be read while still preserving the mark. After reading this many characters, attempting to reset the stream may fail. | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides System.IO.TextReader.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public abstract override int Read(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Int32 Overrides System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source Reset() LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual void Reset() | Improve this Doc View Source Skip(Int32) Skips characters. This method will block until some characters are available, an I/O error occurs, or the end of the stream is reached. LUCENENET specific. Moved here from the Reader class (in Java) so it can be overridden to provide reader buffering. Declaration public virtual long Skip(int n) Parameters Type Name Description System.Int32 n The number of characters to skip Returns Type Description System.Int64 The number of characters actually skipped Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsReader.html",
    "title": "Class CompressingTermVectorsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingTermVectorsReader TermVectorsReader for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader CompressingTermVectorsReader Implements System.IDisposable Inherited Members TermVectorsReader.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingTermVectorsReader : TermVectorsReader, IDisposable Constructors | Improve this Doc View Source CompressingTermVectorsReader(Directory, SegmentInfo, String, FieldInfos, IOContext, String, CompressionMode) Sole constructor. Declaration public CompressingTermVectorsReader(Directory d, SegmentInfo si, string segmentSuffix, FieldInfos fn, IOContext context, string formatName, CompressionMode compressionMode) Parameters Type Name Description Directory d SegmentInfo si System.String segmentSuffix FieldInfos fn IOContext context System.String formatName CompressionMode compressionMode Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides TermVectorsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides TermVectorsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsReader.Dispose(Boolean) | Improve this Doc View Source Get(Int32) Declaration public override Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields Overrides TermVectorsReader.Get(Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermVectorsReader.RamBytesUsed() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultCodecFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultCodecFactory.html",
    "title": "Class DefaultCodecFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultCodecFactory LUCENENET specific class that implements the default functionality for the ICodecFactory . The most common use cases are: Initialize DefaultCodecFactory with a set of CustomCodecTypes . Subclass DefaultCodecFactory and override GetCodec(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetCodec(String) . Subclass DefaultCodecFactory and override GetCodecType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Subclass DefaultCodecFactory to add new or override the default Codec types by overriding Initialize() and calling PutCodecType(Type) . Subclass DefaultCodecFactory to scan additional assemblies for Codec subclasses in by overriding Initialize() and calling ScanForCodecs(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . Inheritance System.Object NamedServiceFactory < Codec > DefaultCodecFactory Implements ICodecFactory IServiceListable Inherited Members NamedServiceFactory<Codec>.m_initializationLock NamedServiceFactory<Codec>.EnsureInitialized() NamedServiceFactory<Codec>.CodecsAssembly NamedServiceFactory<Codec>.IsServiceType(Type) NamedServiceFactory<Codec>.GetServiceName(Type) NamedServiceFactory<Codec>.GetCanonicalName(Type) NamedServiceFactory<Codec>.IsFullyTrusted System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultCodecFactory : NamedServiceFactory<Codec>, ICodecFactory, IServiceListable Constructors | Improve this Doc View Source DefaultCodecFactory() Creates a new instance of DefaultCodecFactory . Declaration public DefaultCodecFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available Codec s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > A ICollection{string} of Codec names. | Improve this Doc View Source CustomCodecTypes An array of custom Codec -derived types to be registered. This property can be initialized during construction of DefaultCodecFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene Codec (via CodecNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomCodecTypes { get; set; } Property Value Type Description System.Collections.Generic.IEnumerable < System.Type > Methods | Improve this Doc View Source GetCodec(String) Gets the Codec instance from the provided name . Declaration public virtual Codec GetCodec(string name) Parameters Type Name Description System.String name The name of the Codec instance to retrieve. Returns Type Description Codec The Codec instance. | Improve this Doc View Source GetCodec(Type) Gets the Codec instance from the provided type . Declaration protected virtual Codec GetCodec(Type type) Parameters Type Name Description System.Type type The System.Type of Codec to retrieve. Returns Type Description Codec The Codec instance. | Improve this Doc View Source GetCodecType(String) Gets the Codec System.Type from the provided name . Declaration protected virtual Type GetCodecType(string name) Parameters Type Name Description System.String name The name of the Codec System.Type to retrieve. Returns Type Description System.Type The Codec System.Type . | Improve this Doc View Source Initialize() Initializes the codec type cache with the known Codec types. Override this method (and optionally call base.Initialize() ) to add your own Codec types by calling PutCodecType(Type) or ScanForCodecs(Assembly) . If two types have the same name by using the CodecNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.Codec>.Initialize() | Improve this Doc View Source NewCodec(Type) Instantiates a Codec based on the provided type . Declaration protected virtual Codec NewCodec(Type type) Parameters Type Name Description System.Type type The System.Type of Codec to instantiate. Returns Type Description Codec The new instance. | Improve this Doc View Source PutCodecType(Type) Adds a Codec type to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap , using the name provided in the CodecNameAttribute , if present, or the name of the codec class minus the \"Codec\" suffix as the name by default. Note that if a Codec with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutCodecType(Type codec) Parameters Type Name Description System.Type codec A type that subclasses Codec . | Improve this Doc View Source ScanForCodecs(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Note that names will be automatically overridden if the Codec name appears multiple times - the last match wins. Declaration protected virtual void ScanForCodecs(IEnumerable<Assembly> assemblies) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Reflection.Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each Codec name wins. | Improve this Doc View Source ScanForCodecs(Assembly) Scans the given assembly for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Note that names will be automatically overridden if the Codec name appears multiple times - the last match wins. Declaration protected virtual void ScanForCodecs(Assembly assembly) Parameters Type Name Description System.Reflection.Assembly assembly The assembly to scan. Implements ICodecFactory IServiceListable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkTokenStream.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkTokenStream.html",
    "title": "Class TeeSinkTokenFilter.SinkTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TeeSinkTokenFilter.SinkTokenStream TokenStream output from a tee with optional filtering. Inheritance System.Object AttributeSource TokenStream TeeSinkTokenFilter.SinkTokenStream Implements System.IDisposable Inherited Members TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SinkTokenStream : TokenStream, IDisposable Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override sealed void Reset() Overrides TokenStream.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.html",
    "title": "Class TeeSinkTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TeeSinkTokenFilter This TokenFilter provides the ability to set aside attribute states that have already been analyzed. This is useful in situations where multiple fields share many common analysis steps and then go their separate ways. It is also useful for doing things like entity extraction or proper noun analysis as part of the analysis workflow and saving off those tokens for use in another field. TeeSinkTokenFilter source1 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader1)); TeeSinkTokenFilter.SinkTokenStream sink1 = source1.NewSinkTokenStream(); TeeSinkTokenFilter.SinkTokenStream sink2 = source1.NewSinkTokenStream(); TeeSinkTokenFilter source2 = new TeeSinkTokenFilter(new WhitespaceTokenizer(version, reader2)); source2.AddSinkTokenStream(sink1); source2.AddSinkTokenStream(sink2); TokenStream final1 = new LowerCaseFilter(version, source1); TokenStream final2 = source2; TokenStream final3 = new EntityDetect(sink1); TokenStream final4 = new URLDetect(sink2); d.Add(new TextField(\"f1\", final1, Field.Store.NO)); d.Add(new TextField(\"f2\", final2, Field.Store.NO)); d.Add(new TextField(\"f3\", final3, Field.Store.NO)); d.Add(new TextField(\"f4\", final4, Field.Store.NO)); In this example, sink1 and sink2 will both get tokens from both reader1 and reader2 after whitespace tokenizer and now we can further wrap any of these in extra analysis, and more \"sources\" can be inserted if desired. It is important, that tees are consumed before sinks (in the above example, the field names must be less the sink's field names). If you are not sure, which stream is consumed first, you can simply add another sink and then pass all tokens to the sinks at once using ConsumeAllTokens() . This TokenFilter is exhausted after this. In the above example, change the example above to: ... TokenStream final1 = new LowerCaseFilter(version, source1.NewSinkTokenStream()); TokenStream final2 = source2.NewSinkTokenStream(); sink1.ConsumeAllTokens(); sink2.ConsumeAllTokens(); ... In this case, the fields can be added in any order, because the sources are not used anymore and all sinks are ready. Note, the EntityDetect and URLDetect TokenStreams are for the example and do not currently exist in Lucene. Inheritance System.Object AttributeSource TokenStream TokenFilter TeeSinkTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TeeSinkTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TeeSinkTokenFilter(TokenStream) Instantiates a new TeeSinkTokenFilter . Declaration public TeeSinkTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source AddSinkTokenStream(TeeSinkTokenFilter.SinkTokenStream) Adds a TeeSinkTokenFilter.SinkTokenStream created by another TeeSinkTokenFilter to this one. The supplied stream will also receive all consumed tokens. This method can be used to pass tokens from two different tees to one sink. Declaration public void AddSinkTokenStream(TeeSinkTokenFilter.SinkTokenStream sink) Parameters Type Name Description TeeSinkTokenFilter.SinkTokenStream sink | Improve this Doc View Source ConsumeAllTokens() TeeSinkTokenFilter passes all tokens to the added sinks when itself is consumed. To be sure, that all tokens from the input stream are passed to the sinks, you can call this methods. This instance is exhausted after this, but all sinks are instant available. Declaration public void ConsumeAllTokens() | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source NewSinkTokenStream() Returns a new TeeSinkTokenFilter.SinkTokenStream that receives all tokens consumed by this stream. Declaration public TeeSinkTokenFilter.SinkTokenStream NewSinkTokenStream() Returns Type Description TeeSinkTokenFilter.SinkTokenStream | Improve this Doc View Source NewSinkTokenStream(TeeSinkTokenFilter.SinkFilter) Returns a new TeeSinkTokenFilter.SinkTokenStream that receives all tokens consumed by this stream that pass the supplied filter. Declaration public TeeSinkTokenFilter.SinkTokenStream NewSinkTokenStream(TeeSinkTokenFilter.SinkFilter filter) Parameters Type Name Description TeeSinkTokenFilter.SinkFilter filter Returns Type Description TeeSinkTokenFilter.SinkTokenStream See Also TeeSinkTokenFilter.SinkFilter Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TokenRangeSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TokenRangeSinkFilter.html",
    "title": "Class TokenRangeSinkFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenRangeSinkFilter Counts the tokens as they go by and saves to the internal list those between the range of lower and upper, exclusive of upper Inheritance System.Object TeeSinkTokenFilter.SinkFilter TokenRangeSinkFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenRangeSinkFilter : TeeSinkTokenFilter.SinkFilter Constructors | Improve this Doc View Source TokenRangeSinkFilter(Int32, Int32) Declaration public TokenRangeSinkFilter(int lower, int upper) Parameters Type Name Description System.Int32 lower System.Int32 upper Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource) | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TeeSinkTokenFilter.SinkFilter.Reset()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TokenTypeSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.TokenTypeSinkFilter.html",
    "title": "Class TokenTypeSinkFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenTypeSinkFilter Adds a token to the sink if it has a specific type. Inheritance System.Object TeeSinkTokenFilter.SinkFilter TokenTypeSinkFilter Inherited Members TeeSinkTokenFilter.SinkFilter.Reset() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TokenTypeSinkFilter : TeeSinkTokenFilter.SinkFilter Constructors | Improve this Doc View Source TokenTypeSinkFilter(String) Declaration public TokenTypeSinkFilter(string typeToMatch) Parameters Type Name Description System.String typeToMatch Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Snowball.SnowballAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Snowball.SnowballAnalyzer.html",
    "title": "Class SnowballAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SnowballAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter , StopFilter and SnowballFilter . Available stemmers are listed in org.tartarus.snowball.ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer , with the following addition: As of 3.1, uses TurkishLowerCaseFilter for Turkish language. Inheritance System.Object Analyzer SnowballAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use the language-specific analyzer in modules/analysis instead. This analyzer will be removed in Lucene 5.0.\")] public sealed class SnowballAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source SnowballAnalyzer(LuceneVersion, String) Builds the named analyzer with no stop words. Declaration public SnowballAnalyzer(LuceneVersion matchVersion, string name) Parameters Type Name Description LuceneVersion matchVersion System.String name | Improve this Doc View Source SnowballAnalyzer(LuceneVersion, String, CharArraySet) Builds the named analyzer with the given stop words. Declaration public SnowballAnalyzer(LuceneVersion matchVersion, string name, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion System.String name CharArraySet stopWords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Constructs a StandardTokenizer filtered by a StandardFilter , a LowerCaseFilter , a StopFilter , and a SnowballFilter Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Snowball.SnowballFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Snowball.SnowballFilter.html",
    "title": "Class SnowballFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SnowballFilter A filter that stems words using a Snowball-generated stemmer. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. NOTE : SnowballFilter expects lowercased text. For the Turkish language, see TurkishLowerCaseFilter . For other languages, see LowerCaseFilter . Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter SnowballFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SnowballFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SnowballFilter(TokenStream, SnowballProgram) Declaration public SnowballFilter(TokenStream input, SnowballProgram stemmer) Parameters Type Name Description TokenStream input SnowballProgram stemmer | Improve this Doc View Source SnowballFilter(TokenStream, String) Construct the named stemming filter. Available stemmers are listed in Lucene.Net.Tartarus.Snowball.Ext. The name of a stemmer is the part of the class name before \"Stemmer\", e.g., the stemmer in EnglishStemmer is named \"English\". Declaration public SnowballFilter(TokenStream in, string name) Parameters Type Name Description TokenStream in the input tokens to stem System.String name the name of a stemmer Methods | Improve this Doc View Source IncrementToken() Returns the next input Token , after being stemmed Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Snowball.SnowballPorterFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Snowball.SnowballPorterFilterFactory.html",
    "title": "Class SnowballPorterFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SnowballPorterFilterFactory Factory for SnowballFilter , with configurable language Note: Use of the \"Lovins\" stemmer is not recommended, as it is implemented with reflection. <fieldType name=\"text_snowballstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SnowballPorterFilterFactory\" protected=\"protectedkeyword.txt\" language=\"English\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SnowballPorterFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SnowballPorterFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source SnowballPorterFilterFactory(IDictionary<String, String>) Creates a new SnowballPorterFilterFactory Declaration public SnowballPorterFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = \"protected\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizer.html",
    "title": "Class WikipediaTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WikipediaTokenizer Extension of StandardTokenizer that is aware of Wikipedia syntax. It is based off of the Wikipedia tutorial available at http://en.wikipedia.org/wiki/Wikipedia:Tutorial , but it may not be complete. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer WikipediaTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Wikipedia Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WikipediaTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source WikipediaTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, ICollection<String>) Creates a new instance of the WikipediaTokenizer . Attaches the input to a the newly created JFlex scanner. Uses the given AttributeSource.AttributeFactory . Declaration public WikipediaTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int tokenOutput, ICollection<string> untokenizedTypes) Parameters Type Name Description AttributeSource.AttributeFactory factory The AttributeSource.AttributeFactory System.IO.TextReader input The input System.Int32 tokenOutput One of TOKENS_ONLY , UNTOKENIZED_ONLY , BOTH System.Collections.Generic.ICollection < System.String > untokenizedTypes Untokenized types | Improve this Doc View Source WikipediaTokenizer(TextReader) Creates a new instance of the WikipediaTokenizer . Attaches the input to a newly created JFlex scanner. Declaration public WikipediaTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input The Input System.IO.TextReader | Improve this Doc View Source WikipediaTokenizer(TextReader, Int32, ICollection<String>) Creates a new instance of the WikipediaTokenizer . Attaches the input to a the newly created JFlex scanner. Declaration public WikipediaTokenizer(TextReader input, int tokenOutput, ICollection<string> untokenizedTypes) Parameters Type Name Description System.IO.TextReader input The input System.Int32 tokenOutput One of TOKENS_ONLY , UNTOKENIZED_ONLY , BOTH System.Collections.Generic.ICollection < System.String > untokenizedTypes Untokenized types Fields | Improve this Doc View Source ACRONYM_ID Declaration public const int ACRONYM_ID = 2 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM_ID Declaration public const int ALPHANUM_ID = 0 Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE_ID Declaration public const int APOSTROPHE_ID = 1 Field Value Type Description System.Int32 | Improve this Doc View Source BOLD Declaration public const string BOLD = \"b\" Field Value Type Description System.String | Improve this Doc View Source BOLD_ID Declaration public const int BOLD_ID = 12 Field Value Type Description System.Int32 | Improve this Doc View Source BOLD_ITALICS Declaration public const string BOLD_ITALICS = \"bi\" Field Value Type Description System.String | Improve this Doc View Source BOLD_ITALICS_ID Declaration public const int BOLD_ITALICS_ID = 14 Field Value Type Description System.Int32 | Improve this Doc View Source BOTH Output the both the untokenized token and the splits Declaration public const int BOTH = 2 Field Value Type Description System.Int32 | Improve this Doc View Source CATEGORY Declaration public const string CATEGORY = \"c\" Field Value Type Description System.String | Improve this Doc View Source CATEGORY_ID Declaration public const int CATEGORY_ID = 11 Field Value Type Description System.Int32 | Improve this Doc View Source CITATION Declaration public const string CITATION = \"ci\" Field Value Type Description System.String | Improve this Doc View Source CITATION_ID Declaration public const int CITATION_ID = 10 Field Value Type Description System.Int32 | Improve this Doc View Source CJ_ID Declaration public const int CJ_ID = 7 Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY_ID Declaration public const int COMPANY_ID = 3 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL_ID Declaration public const int EMAIL_ID = 4 Field Value Type Description System.Int32 | Improve this Doc View Source EXTERNAL_LINK Declaration public const string EXTERNAL_LINK = \"el\" Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_LINK_ID Declaration public const int EXTERNAL_LINK_ID = 9 Field Value Type Description System.Int32 | Improve this Doc View Source EXTERNAL_LINK_URL Declaration public const string EXTERNAL_LINK_URL = \"elu\" Field Value Type Description System.String | Improve this Doc View Source EXTERNAL_LINK_URL_ID Declaration public const int EXTERNAL_LINK_URL_ID = 17 Field Value Type Description System.Int32 | Improve this Doc View Source HEADING Declaration public const string HEADING = \"h\" Field Value Type Description System.String | Improve this Doc View Source HEADING_ID Declaration public const int HEADING_ID = 15 Field Value Type Description System.Int32 | Improve this Doc View Source HOST_ID Declaration public const int HOST_ID = 5 Field Value Type Description System.Int32 | Improve this Doc View Source INTERNAL_LINK Declaration public const string INTERNAL_LINK = \"il\" Field Value Type Description System.String | Improve this Doc View Source INTERNAL_LINK_ID Declaration public const int INTERNAL_LINK_ID = 8 Field Value Type Description System.Int32 | Improve this Doc View Source ITALICS Declaration public const string ITALICS = \"i\" Field Value Type Description System.String | Improve this Doc View Source ITALICS_ID Declaration public const int ITALICS_ID = 13 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_ID Declaration public const int NUM_ID = 6 Field Value Type Description System.Int32 | Improve this Doc View Source SUB_HEADING Declaration public const string SUB_HEADING = \"sh\" Field Value Type Description System.String | Improve this Doc View Source SUB_HEADING_ID Declaration public const int SUB_HEADING_ID = 16 Field Value Type Description System.Int32 | Improve this Doc View Source TOKEN_TYPES String token types that correspond to token type int constants Declaration public static readonly string[] TOKEN_TYPES Field Value Type Description System.String [] | Improve this Doc View Source TOKENS_ONLY Only output tokens Declaration public const int TOKENS_ONLY = 0 Field Value Type Description System.Int32 | Improve this Doc View Source UNTOKENIZED_ONLY Only output untokenized tokens, which are tokens that would normally be split into several tokens Declaration public const int UNTOKENIZED_ONLY = 1 Field Value Type Description System.Int32 | Improve this Doc View Source UNTOKENIZED_TOKEN_FLAG This flag is used to indicate that the produced \"Token\" would, if TOKENS_ONLY was used, produce multiple tokens. Declaration public const int UNTOKENIZED_TOKEN_FLAG = 1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Wikipedia.WikipediaTokenizerFactory.html",
    "title": "Class WikipediaTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WikipediaTokenizerFactory Factory for WikipediaTokenizer . <fieldType name=\"text_wiki\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WikipediaTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory WikipediaTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Wikipedia Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WikipediaTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source WikipediaTokenizerFactory(IDictionary<String, String>) Creates a new WikipediaTokenizerFactory Declaration public WikipediaTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.ArmenianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.ArmenianStemmer.html",
    "title": "Class ArmenianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArmenianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram ArmenianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArmenianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.BasqueStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.BasqueStemmer.html",
    "title": "Class BasqueStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasqueStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram BasqueStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BasqueStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.CatalanStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.CatalanStemmer.html",
    "title": "Class CatalanStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CatalanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram CatalanStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CatalanStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.DanishStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.DanishStemmer.html",
    "title": "Class DanishStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DanishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram DanishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DanishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.DutchStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.DutchStemmer.html",
    "title": "Class DutchStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DutchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram DutchStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DutchStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.EnglishStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.EnglishStemmer.html",
    "title": "Class EnglishStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram EnglishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.FinnishStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.FinnishStemmer.html",
    "title": "Class FinnishStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FinnishStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram FinnishStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FinnishStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermFirstPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermFirstPassGroupingCollector.html",
    "title": "Class TermFirstPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect groups. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector < BytesRef > TermFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector < BytesRef > ICollector Inherited Members AbstractFirstPassGroupingCollector<BytesRef>.m_orderedGroups AbstractFirstPassGroupingCollector<BytesRef>.GetTopGroups(Int32, Boolean) AbstractFirstPassGroupingCollector<BytesRef>.SetScorer(Scorer) AbstractFirstPassGroupingCollector<BytesRef>.Collect(Int32) AbstractFirstPassGroupingCollector<BytesRef>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermFirstPassGroupingCollector : AbstractFirstPassGroupingCollector<BytesRef>, IAbstractFirstPassGroupingCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermFirstPassGroupingCollector(String, Sort, Int32) Create the first pass collector. Declaration public TermFirstPassGroupingCollector(string groupField, Sort groupSort, int topNGroups) Parameters Type Name Description System.String groupField The field used to group documents. This field must be single-valued and indexed ( FieldCache is used to access its value per-document). Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source CopyDocGroupValue(BytesRef, BytesRef) Declaration protected override BytesRef CopyDocGroupValue(BytesRef groupValue, BytesRef reuse) Parameters Type Name Description BytesRef groupValue BytesRef reuse Returns Type Description BytesRef Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.CopyDocGroupValue(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source GetDocGroupValue(Int32) Declaration protected override BytesRef GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description BytesRef Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.GetDocGroupValue(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.html",
    "title": "Class LZ4 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LZ4 LZ4 compression and decompression routines. http://code.google.com/p/lz4/ http://fastcompression.blogspot.fr/p/lz4.html Inheritance System.Object LZ4 Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class LZ4 Methods | Improve this Doc View Source Compress(Byte[], Int32, Int32, DataOutput, LZ4.HashTable) Compress bytes[off:off+len] into out using at most 16KB of memory. ht shouldn't be shared across threads but can safely be reused. Declaration public static void Compress(byte[] bytes, int off, int len, DataOutput out, LZ4.HashTable ht) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len DataOutput out LZ4.HashTable ht | Improve this Doc View Source CompressHC(Byte[], Int32, Int32, DataOutput, LZ4.HCHashTable) Compress bytes[off:off+len] into out . Compared to Compress(Byte[], Int32, Int32, DataOutput, LZ4.HashTable) , this method is slower and uses more memory (~ 256KB per thread) but should provide better compression ratios (especially on large inputs) because it chooses the best match among up to 256 candidates and then performs trade-offs to fix overlapping matches. ht shouldn't be shared across threads but can safely be reused. Declaration public static void CompressHC(byte[] src, int srcOff, int srcLen, DataOutput out, LZ4.HCHashTable ht) Parameters Type Name Description System.Byte [] src System.Int32 srcOff System.Int32 srcLen DataOutput out LZ4.HCHashTable ht | Improve this Doc View Source Decompress(DataInput, Int32, Byte[], Int32) Decompress at least decompressedLen bytes into dest[dOff] . Please note that dest must be large enough to be able to hold all decompressed data (meaning that you need to know the total decompressed length). Declaration public static int Decompress(DataInput compressed, int decompressedLen, byte[] dest, int dOff) Parameters Type Name Description DataInput compressed System.Int32 decompressedLen System.Byte [] dest System.Int32 dOff Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.Match.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.Match.html",
    "title": "Class LZ4.Match | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LZ4.Match Inheritance System.Object LZ4.Match Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class Match Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsIndexReader.html",
    "title": "Class CompressingStoredFieldsIndexReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsIndexReader Random-access reader for CompressingStoredFieldsIndexWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CompressingStoredFieldsIndexReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsIndexReader Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.Stats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.Stats.html",
    "title": "Class BlockTreeTermsReader.Stats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTreeTermsReader.Stats BlockTree statistics for a single field returned by ComputeStats() . Inheritance System.Object BlockTreeTermsReader.Stats Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class Stats Properties | Improve this Doc View Source BlockCountByPrefixLen Number of blocks at each prefix depth. Declaration public int[] BlockCountByPrefixLen { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Field Field name. Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FloorBlockCount The number of floor blocks (meta-blocks larger than the allowed maxItemsPerBlock ) in the terms file. Declaration public int FloorBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source FloorSubBlockCount The number of sub-blocks within the floor blocks. Declaration public int FloorSubBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source IndexArcCount How many arcs in the index FST. Declaration public long IndexArcCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexNodeCount How many nodes in the index FST. Declaration public long IndexNodeCount { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexNumBytes Byte size of the index. Declaration public long IndexNumBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source MixedBlockCount The number of \"internal\" blocks (that have both terms and sub-blocks). Declaration public int MixedBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NonFloorBlockCount The number of normal (non-floor) blocks in the terms file. Declaration public int NonFloorBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Segment Segment name. Declaration public string Segment { get; } Property Value Type Description System.String | Improve this Doc View Source SubBlocksOnlyBlockCount The number of \"internal\" blocks that do not contain terms (have only sub-blocks). Declaration public int SubBlocksOnlyBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsOnlyBlockCount The number of \"leaf\" blocks (blocks that have only terms). Declaration public int TermsOnlyBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalBlockCount Total number of blocks. Declaration public int TotalBlockCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalBlockOtherBytes Total bytes stored by the PostingsBaseFormat , plus the other few vInts stored in the frame. Declaration public long TotalBlockOtherBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalBlockStatsBytes Total number of bytes used to store term stats (not including what the PostingsBaseFormat stores. Declaration public long TotalBlockStatsBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalBlockSuffixBytes Total number of bytes used to store term suffixes. Declaration public long TotalBlockSuffixBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalTermBytes Total number of bytes (sum of term lengths) across all terms in the field. Declaration public long TotalTermBytes { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalTermCount Total number of terms in the field. Declaration public long TotalTermCount { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragListBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragListBuilder.html",
    "title": "Class BaseFragListBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseFragListBuilder A abstract implementation of IFragListBuilder . Inheritance System.Object BaseFragListBuilder SimpleFragListBuilder WeightedFragListBuilder Implements IFragListBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class BaseFragListBuilder : IFragListBuilder Constructors | Improve this Doc View Source BaseFragListBuilder() Declaration public BaseFragListBuilder() | Improve this Doc View Source BaseFragListBuilder(Int32) Declaration public BaseFragListBuilder(int margin) Parameters Type Name Description System.Int32 margin Fields | Improve this Doc View Source MARGIN_DEFAULT Declaration public static readonly int MARGIN_DEFAULT Field Value Type Description System.Int32 | Improve this Doc View Source MIN_FRAG_CHAR_SIZE_FACTOR Declaration public static readonly int MIN_FRAG_CHAR_SIZE_FACTOR Field Value Type Description System.Int32 Methods | Improve this Doc View Source AcceptPhrase(FieldPhraseList.WeightedPhraseInfo, Int32, Int32) A predicate to decide if the given FieldPhraseList.WeightedPhraseInfo should be accepted as a highlighted phrase or if it should be discarded. The default implementation discards phrases that are composed of more than one term and where the matchLength exceeds the fragment character size. Declaration protected virtual bool AcceptPhrase(FieldPhraseList.WeightedPhraseInfo info, int matchLength, int fragCharSize) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo info the phrase info to accept System.Int32 matchLength the match length of the current phrase System.Int32 fragCharSize the configured fragment character size Returns Type Description System.Boolean true if this phrase info should be accepted as a highligh phrase | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, FieldFragList, Int32) Declaration protected virtual FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, FieldFragList fieldFragList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList FieldFragList fieldFragList System.Int32 fragCharSize Returns Type Description FieldFragList | Improve this Doc View Source CreateFieldFragList(FieldPhraseList, Int32) Declaration public abstract FieldFragList CreateFieldFragList(FieldPhraseList fieldPhraseList, int fragCharSize) Parameters Type Name Description FieldPhraseList fieldPhraseList System.Int32 fragCharSize Returns Type Description FieldFragList Implements IFragListBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragmentsBuilder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.BaseFragmentsBuilder.html",
    "title": "Class BaseFragmentsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseFragmentsBuilder Base IFragmentsBuilder implementation that supports colored pre/post tags and multivalued fields. Uses IBoundaryScanner to determine fragments. Inheritance System.Object BaseFragmentsBuilder ScoreOrderFragmentsBuilder SimpleFragmentsBuilder Implements IFragmentsBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public abstract class BaseFragmentsBuilder : IFragmentsBuilder Constructors | Improve this Doc View Source BaseFragmentsBuilder() Declaration protected BaseFragmentsBuilder() | Improve this Doc View Source BaseFragmentsBuilder(IBoundaryScanner) Declaration protected BaseFragmentsBuilder(IBoundaryScanner boundaryScanner) Parameters Type Name Description IBoundaryScanner boundaryScanner | Improve this Doc View Source BaseFragmentsBuilder(String[], String[]) Declaration protected BaseFragmentsBuilder(string[] preTags, string[] postTags) Parameters Type Name Description System.String [] preTags System.String [] postTags | Improve this Doc View Source BaseFragmentsBuilder(String[], String[], IBoundaryScanner) Declaration protected BaseFragmentsBuilder(string[] preTags, string[] postTags, IBoundaryScanner boundaryScanner) Parameters Type Name Description System.String [] preTags System.String [] postTags IBoundaryScanner boundaryScanner Fields | Improve this Doc View Source COLORED_POST_TAGS Declaration public static readonly string[] COLORED_POST_TAGS Field Value Type Description System.String [] | Improve this Doc View Source COLORED_PRE_TAGS Declaration public static readonly string[] COLORED_PRE_TAGS Field Value Type Description System.String [] | Improve this Doc View Source m_postTags Declaration protected string[] m_postTags Field Value Type Description System.String [] | Improve this Doc View Source m_preTags Declaration protected string[] m_preTags Field Value Type Description System.String [] Properties | Improve this Doc View Source IsDiscreteMultiValueHighlighting Declaration public virtual bool IsDiscreteMultiValueHighlighting { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiValuedSeparator Declaration public virtual char MultiValuedSeparator { get; set; } Property Value Type Description System.Char Methods | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList) Declaration public virtual string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList Returns Type Description System.String | Improve this Doc View Source CreateFragment(IndexReader, Int32, String, FieldFragList, String[], String[], IEncoder) Declaration public virtual string CreateFragment(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32) Declaration public virtual string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.Int32 maxNumFragments Returns Type Description System.String [] | Improve this Doc View Source CreateFragments(IndexReader, Int32, String, FieldFragList, Int32, String[], String[], IEncoder) Declaration public virtual string[] CreateFragments(IndexReader reader, int docId, string fieldName, FieldFragList fieldFragList, int maxNumFragments, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName FieldFragList fieldFragList System.Int32 maxNumFragments System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String [] | Improve this Doc View Source DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo>, Field[]) Declaration protected virtual IList<FieldFragList.WeightedFragInfo> DiscreteMultiValueHighlighting(IList<FieldFragList.WeightedFragInfo> fragInfos, Field[] fields) Parameters Type Name Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > fragInfos Field [] fields Returns Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > | Improve this Doc View Source GetFields(IndexReader, Int32, String) Declaration protected virtual Field[] GetFields(IndexReader reader, int docId, string fieldName) Parameters Type Name Description IndexReader reader System.Int32 docId System.String fieldName Returns Type Description Field [] | Improve this Doc View Source GetFragmentSource(StringBuilder, Int32[], Field[], Int32, Int32) Declaration protected virtual string GetFragmentSource(StringBuilder buffer, int[] index, Field[] values, int startOffset, int endOffset) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 [] index Field [] values System.Int32 startOffset System.Int32 endOffset Returns Type Description System.String | Improve this Doc View Source GetFragmentSourceMSO(StringBuilder, Int32[], Field[], Int32, Int32, Int32[]) Declaration protected virtual string GetFragmentSourceMSO(StringBuilder buffer, int[] index, Field[] values, int startOffset, int endOffset, int[] modifiedStartOffset) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 [] index Field [] values System.Int32 startOffset System.Int32 endOffset System.Int32 [] modifiedStartOffset Returns Type Description System.String | Improve this Doc View Source GetPostTag(Int32) Declaration protected virtual string GetPostTag(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPostTag(String[], Int32) Declaration protected virtual string GetPostTag(string[] postTags, int num) Parameters Type Name Description System.String [] postTags System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPreTag(Int32) Declaration protected virtual string GetPreTag(int num) Parameters Type Name Description System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetPreTag(String[], Int32) Declaration protected virtual string GetPreTag(string[] preTags, int num) Parameters Type Name Description System.String [] preTags System.Int32 num Returns Type Description System.String | Improve this Doc View Source GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo>) Declaration public abstract IList<FieldFragList.WeightedFragInfo> GetWeightedFragInfoList(IList<FieldFragList.WeightedFragInfo> src) Parameters Type Name Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > src Returns Type Description System.Collections.Generic.IList < FieldFragList.WeightedFragInfo > | Improve this Doc View Source MakeFragment(StringBuilder, Int32[], Field[], FieldFragList.WeightedFragInfo, String[], String[], IEncoder) Declaration protected virtual string MakeFragment(StringBuilder buffer, int[] index, Field[] values, FieldFragList.WeightedFragInfo fragInfo, string[] preTags, string[] postTags, IEncoder encoder) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 [] index Field [] values FieldFragList.WeightedFragInfo fragInfo System.String [] preTags System.String [] postTags IEncoder encoder Returns Type Description System.String Implements IFragmentsBuilder"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.Toffs.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.Toffs.html",
    "title": "Class FieldPhraseList.WeightedPhraseInfo.Toffs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldPhraseList.WeightedPhraseInfo.Toffs Term offsets (start + end) Inheritance System.Object FieldPhraseList.WeightedPhraseInfo.Toffs Implements System.IComparable < FieldPhraseList.WeightedPhraseInfo.Toffs > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class Toffs : IComparable<FieldPhraseList.WeightedPhraseInfo.Toffs> Constructors | Improve this Doc View Source Toffs(Int32, Int32) Declaration public Toffs(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(FieldPhraseList.WeightedPhraseInfo.Toffs) Declaration public virtual int CompareTo(FieldPhraseList.WeightedPhraseInfo.Toffs other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo.Toffs other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldPhraseList.WeightedPhraseInfo.html",
    "title": "Class FieldPhraseList.WeightedPhraseInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldPhraseList.WeightedPhraseInfo Represents the list of term offsets and boost for some text Inheritance System.Object FieldPhraseList.WeightedPhraseInfo Implements System.IComparable < FieldPhraseList.WeightedPhraseInfo > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class WeightedPhraseInfo : IComparable<FieldPhraseList.WeightedPhraseInfo> Constructors | Improve this Doc View Source WeightedPhraseInfo(ICollection<FieldPhraseList.WeightedPhraseInfo>) Merging constructor. Note that this just grabs seqnum from the first info. Declaration public WeightedPhraseInfo(ICollection<FieldPhraseList.WeightedPhraseInfo> toMerge) Parameters Type Name Description System.Collections.Generic.ICollection < FieldPhraseList.WeightedPhraseInfo > toMerge | Improve this Doc View Source WeightedPhraseInfo(IList<FieldTermStack.TermInfo>, Single) Declaration public WeightedPhraseInfo(IList<FieldTermStack.TermInfo> terms, float boost) Parameters Type Name Description System.Collections.Generic.IList < FieldTermStack.TermInfo > terms System.Single boost | Improve this Doc View Source WeightedPhraseInfo(IList<FieldTermStack.TermInfo>, Single, Int32) Declaration public WeightedPhraseInfo(IList<FieldTermStack.TermInfo> terms, float boost, int seqnum) Parameters Type Name Description System.Collections.Generic.IList < FieldTermStack.TermInfo > terms System.Single boost System.Int32 seqnum Properties | Improve this Doc View Source Boost the boost Declaration public virtual float Boost { get; } Property Value Type Description System.Single | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Seqnum the seqnum Declaration public virtual int Seqnum { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TermsInfos the termInfos Declaration public virtual IList<FieldTermStack.TermInfo> TermsInfos { get; } Property Value Type Description System.Collections.Generic.IList < FieldTermStack.TermInfo > | Improve this Doc View Source TermsOffsets the termsOffsets Declaration public virtual IList<FieldPhraseList.WeightedPhraseInfo.Toffs> TermsOffsets { get; } Property Value Type Description System.Collections.Generic.IList < FieldPhraseList.WeightedPhraseInfo.Toffs > Methods | Improve this Doc View Source CompareTo(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual int CompareTo(FieldPhraseList.WeightedPhraseInfo other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetText() Text of the match, calculated on the fly. Use for debugging only. Declaration public virtual string GetText() Returns Type Description System.String the text | Improve this Doc View Source IsOffsetOverlap(FieldPhraseList.WeightedPhraseInfo) Declaration public virtual bool IsOffsetOverlap(FieldPhraseList.WeightedPhraseInfo other) Parameters Type Name Description FieldPhraseList.WeightedPhraseInfo other Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.TermInfo.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.FieldTermStack.TermInfo.html",
    "title": "Class FieldTermStack.TermInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldTermStack.TermInfo Single term with its position/offsets in the document and IDF weight. It is System.IComparable<T> but considers only position. Inheritance System.Object FieldTermStack.TermInfo Implements System.IComparable < FieldTermStack.TermInfo > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TermInfo : IComparable<FieldTermStack.TermInfo> Constructors | Improve this Doc View Source TermInfo(String, Int32, Int32, Int32, Single) Declaration public TermInfo(string text, int startOffset, int endOffset, int position, float weight) Parameters Type Name Description System.String text System.Int32 startOffset System.Int32 endOffset System.Int32 position System.Single weight Properties | Improve this Doc View Source EndOffset Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Next Returns the next TermInfo at this same position. This is a circular list! Declaration public virtual FieldTermStack.TermInfo Next { get; } Property Value Type Description FieldTermStack.TermInfo | Improve this Doc View Source Position Declaration public virtual int Position { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Text Declaration public virtual string Text { get; } Property Value Type Description System.String | Improve this Doc View Source Weight Declaration public virtual float Weight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source CompareTo(FieldTermStack.TermInfo) Declaration public virtual int CompareTo(FieldTermStack.TermInfo o) Parameters Type Name Description FieldTermStack.TermInfo o Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.ScoreComparer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.VectorHighlight.ScoreOrderFragmentsBuilder.ScoreComparer.html",
    "title": "Class ScoreOrderFragmentsBuilder.ScoreComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoreOrderFragmentsBuilder.ScoreComparer System.Collections.Generic.IComparer<T> for FieldFragList.WeightedFragInfo by boost, breaking ties by offset. Inheritance System.Object ScoreOrderFragmentsBuilder.ScoreComparer Implements System.Collections.Generic.IComparer < FieldFragList.WeightedFragInfo > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.Highlighter.dll Syntax public class ScoreComparer : IComparer<FieldFragList.WeightedFragInfo> Methods | Improve this Doc View Source Compare(FieldFragList.WeightedFragInfo, FieldFragList.WeightedFragInfo) Declaration public virtual int Compare(FieldFragList.WeightedFragInfo o1, FieldFragList.WeightedFragInfo o2) Parameters Type Name Description FieldFragList.WeightedFragInfo o1 FieldFragList.WeightedFragInfo o2 Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T>"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.MemoryOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.MemoryOrdinalMap.html",
    "title": "Class DirectoryTaxonomyWriter.MemoryOrdinalMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter.MemoryOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained in memory Inheritance System.Object DirectoryTaxonomyWriter.MemoryOrdinalMap Implements DirectoryTaxonomyWriter.IOrdinalMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public sealed class MemoryOrdinalMap : DirectoryTaxonomyWriter.IOrdinalMap Constructors | Improve this Doc View Source MemoryOrdinalMap() Sole constructor. Declaration public MemoryOrdinalMap() Methods | Improve this Doc View Source AddDone() Declaration public void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Declaration public int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Declaration public void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize Implements DirectoryTaxonomyWriter.IOrdinalMap"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsReader.html",
    "title": "Class SimpleTextStoredFieldsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextStoredFieldsReader Reads plain text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader SimpleTextStoredFieldsReader Implements System.IDisposable Inherited Members StoredFieldsReader.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsReader : StoredFieldsReader, IDisposable Constructors | Improve this Doc View Source SimpleTextStoredFieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public SimpleTextStoredFieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsReader.Dispose(Boolean) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int n, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 n StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsWriter.html",
    "title": "Class SimpleTextStoredFieldsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextStoredFieldsWriter Writes plain-text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter SimpleTextStoredFieldsWriter Implements System.IDisposable Inherited Members StoredFieldsWriter.FinishDocument() StoredFieldsWriter.Merge(MergeState) StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) StoredFieldsWriter.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsWriter : StoredFieldsWriter, IDisposable Constructors | Improve this Doc View Source SimpleTextStoredFieldsWriter(Directory, String, IOContext) Declaration public SimpleTextStoredFieldsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides StoredFieldsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields Overrides StoredFieldsWriter.StartDocument(Int32) | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.UnlistenableEventException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.UnlistenableEventException.html",
    "title": "Class UnlistenableEventException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnlistenableEventException Inheritance System.Object System.Exception UnlistenableEventException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class UnlistenableEventException : Exception Constructors | Improve this Doc View Source UnlistenableEventException() Create a simple exception with no further explanation. Declaration public UnlistenableEventException() | Improve this Doc View Source UnlistenableEventException(String) Create the exception with an explanation of the reason. Declaration public UnlistenableEventException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.UnsequencedCollectionEqualityComparer-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.UnsequencedCollectionEqualityComparer-2.html",
    "title": "Class UnsequencedCollectionEqualityComparer<T, W> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnsequencedCollectionEqualityComparer<T, W> Prototype for an unsequenced equalityComparer for something (T) that implements ICollection[W] This will use ICollection[W] specific implementations of the equalityComparer operations Inheritance System.Object UnsequencedCollectionEqualityComparer<T, W> Implements System.Collections.Generic.IEqualityComparer <T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class UnsequencedCollectionEqualityComparer<T, W> : IEqualityComparer<T> where T : ICollection<W> Type Parameters Name Description T W Properties | Improve this Doc View Source Default Declaration public static UnsequencedCollectionEqualityComparer<T, W> Default { get; } Property Value Type Description UnsequencedCollectionEqualityComparer <T, W> Methods | Improve this Doc View Source Equals(T, T) Check if two collections are equal with respect to this unsequenced equalityComparer Declaration public bool Equals(T collection1, T collection2) Parameters Type Name Description T collection1 first collection T collection2 second collection Returns Type Description System.Boolean True if equal | Improve this Doc View Source GetHashCode(T) Get the hash code with respect to this unsequenced equalityComparer Declaration public int GetHashCode(T collection) Parameters Type Name Description T collection The collection Returns Type Description System.Int32 The hash code Implements System.Collections.Generic.IEqualityComparer<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ViewDisposedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ViewDisposedException.html",
    "title": "Class ViewDisposedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ViewDisposedException An exception thrown when trying to access a view (a list view on a C5.IList`1 or a snapshot on a C5.IPersistentSorted`1 ) that has been invalidated by some earlier operation. The typical scenario is a view on a list that hash been invalidated by a call to Sort, Reverse or Shuffle on some other, overlapping view or the whole list. Inheritance System.Object System.Exception ViewDisposedException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ViewDisposedException : Exception Constructors | Improve this Doc View Source ViewDisposedException() Create a simple exception with no further explanation. Declaration public ViewDisposedException() | Improve this Doc View Source ViewDisposedException(String) Create the exception with an explanation of the reason. Declaration public ViewDisposedException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityHashSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityHashSet-1.html",
    "title": "Class IdentityHashSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityHashSet<T> Inheritance System.Object System.Collections.Generic.HashSet <T> IdentityHashSet<T> Implements System.Collections.Generic.IReadOnlyCollection <T> System.Collections.Generic.ISet <T> System.Collections.Generic.ICollection <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members System.Collections.Generic.HashSet<T>.Add(T) System.Collections.Generic.HashSet<T>.Clear() System.Collections.Generic.HashSet<T>.Contains(T) System.Collections.Generic.HashSet<T>.CopyTo(T[]) System.Collections.Generic.HashSet<T>.CopyTo(T[], System.Int32) System.Collections.Generic.HashSet<T>.CopyTo(T[], System.Int32, System.Int32) System.Collections.Generic.HashSet<T>.ExceptWith(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.GetEnumerator() System.Collections.Generic.HashSet<T>.IntersectWith(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.IsProperSubsetOf(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.IsProperSupersetOf(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.IsSubsetOf(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.IsSupersetOf(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.Overlaps(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.Remove(T) System.Collections.Generic.HashSet<T>.RemoveWhere(System.Predicate<T>) System.Collections.Generic.HashSet<T>.SetEquals(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.SymmetricExceptWith(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.System.Collections.Generic.ICollection<T>.Add(T) System.Collections.Generic.HashSet<T>.System.Collections.Generic.IEnumerable<T>.GetEnumerator() System.Collections.Generic.HashSet<T>.System.Collections.IEnumerable.GetEnumerator() System.Collections.Generic.HashSet<T>.TrimExcess() System.Collections.Generic.HashSet<T>.UnionWith(System.Collections.Generic.IEnumerable<T>) System.Collections.Generic.HashSet<T>.Comparer System.Collections.Generic.HashSet<T>.Count System.Collections.Generic.HashSet<T>.System.Collections.Generic.ICollection<T>.IsReadOnly System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityHashSet<T> : HashSet<T>, IReadOnlyCollection<T>, ISet<T>, ICollection<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Constructors | Improve this Doc View Source IdentityHashSet() Declaration public IdentityHashSet() | Improve this Doc View Source IdentityHashSet(IEnumerable<T>) Declaration public IdentityHashSet(IEnumerable<T> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> collection Implements System.Collections.Generic.IReadOnlyCollection<T> System.Collections.Generic.ISet<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityWeakReference-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityWeakReference-1.html",
    "title": "Class IdentityWeakReference<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityWeakReference<T> Inheritance System.Object System.WeakReference IdentityWeakReference<T> Inherited Members System.WeakReference.IsAlive System.WeakReference.TrackResurrection System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityWeakReference<T> : WeakReference where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source IdentityWeakReference(T) Declaration public IdentityWeakReference(T target) Parameters Type Name Description T target Properties | Improve this Doc View Source Target Declaration public T Target { get; set; } Property Value Type Description T Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.BinaryReaderDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.BinaryReaderDataInput.html",
    "title": "Class BinaryReaderDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryReaderDataInput Inheritance System.Object DataInput BinaryReaderDataInput Implements System.IDisposable Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class BinaryReaderDataInput : DataInput, IDisposable Constructors | Improve this Doc View Source BinaryReaderDataInput(BinaryReader) Declaration public BinaryReaderDataInput(BinaryReader br) Parameters Type Name Description System.IO.BinaryReader br Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.BinaryWriterDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.BinaryWriterDataOutput.html",
    "title": "Class BinaryWriterDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryWriterDataOutput Inheritance System.Object DataOutput BinaryWriterDataOutput Implements System.IDisposable Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class BinaryWriterDataOutput : DataOutput, IDisposable Constructors | Improve this Doc View Source BinaryWriterDataOutput(BinaryWriter) Declaration public BinaryWriterDataOutput(BinaryWriter bw) Parameters Type Name Description System.IO.BinaryWriter bw Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64sRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64sRef.html",
    "title": "Class Int64sRef | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64sRef Represents long[] , as a slice (offset + length) into an existing long[] . The Int64s member should never be null ; use EMPTY_INT64S if necessary. NOTE: This was LongsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int64sRef Implements System.IComparable < Int64sRef > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Int64sRef : IComparable<Int64sRef> Constructors | Improve this Doc View Source Int64sRef() Create a Int64sRef with EMPTY_INT64S Declaration public Int64sRef() | Improve this Doc View Source Int64sRef(Int32) Create a Int64sRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public Int64sRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source Int64sRef(Int64[], Int32, Int32) This instance will directly reference longs w/o making a copy. longs should not be null . Declaration public Int64sRef(long[] longs, int offset, int length) Parameters Type Name Description System.Int64 [] longs System.Int32 offset System.Int32 length Fields | Improve this Doc View Source EMPTY_INT64S An empty System.Int64 array for convenience NOTE: This was EMPTY_LONGS in Lucene Declaration public static readonly long[] EMPTY_INT64S Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Int64s The contents of the Int64sRef . Should never be null . NOTE: This was longs (field) in Lucene Declaration public long[] Int64s { get; set; } Property Value Type Description System.Int64 [] | Improve this Doc View Source Length Length of used longs. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid long. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying System.Int64 s are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(Int64sRef) | Improve this Doc View Source CompareTo(Int64sRef) Signed System.Int32 order comparison Declaration public int CompareTo(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyInt64s(Int64sRef) NOTE: This was copyLongs() in Lucene Declaration public void CopyInt64s(Int64sRef other) Parameters Type Name Description Int64sRef other | Improve this Doc View Source DeepCopyOf(Int64sRef) Creates a new Int64sRef that points to a copy of the System.Int64 s from other . The returned Int64sRef will have a length of other.Length and an offset of zero. Declaration public static Int64sRef DeepCopyOf(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description Int64sRef | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source Int64sEquals(Int64sRef) NOTE: This was longsEquals() in Lucene Declaration public bool Int64sEquals(Int64sRef other) Parameters Type Name Description Int64sRef other Returns Type Description System.Boolean | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws System.InvalidOperationException ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Lift.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Lift.html",
    "title": "Class Lift | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lift The Lift class is a data structure that is a variation of a Patricia trie. Lift's raison d'etre is to implement reduction of the trie via the Lift-Up method., which makes the data structure less liable to overstemming. Inheritance System.Object Reduce Lift Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Lift : Reduce Constructors | Improve this Doc View Source Lift(Boolean) Constructor for the Lift object. Declaration public Lift(bool changeSkip) Parameters Type Name Description System.Boolean changeSkip when set to true , comparison of two Cells takes a skip command into account Methods | Improve this Doc View Source LiftUp(Row, IList<Row>) Reduce the trie using Lift-Up reduction. The Lift-Up reduction propagates all leaf-values (patch commands), where possible, to higher levels which are closer to the root of the trie. Declaration public void LiftUp(Row in, IList<Row> nodes) Parameters Type Name Description Row in the Row to consider when optimizing System.Collections.Generic.IList < Row > nodes contains the patch commands | Improve this Doc View Source Optimize(Trie) Optimize (eliminate rows with no content) the given Trie and return the reduced Trie. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimized Returns Type Description Trie the reduced Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.MultiTrie.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.MultiTrie.html",
    "title": "Class MultiTrie | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTrie The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands individually (each command by itself). Inheritance System.Object Trie MultiTrie MultiTrie2 Inherited Members Trie.GetAll(String) Trie.GetCells() Trie.GetCellsPnt() Trie.GetCellsVal() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class MultiTrie : Trie Constructors | Improve this Doc View Source MultiTrie(IDataInput) Constructor for the MultiTrie object. Declaration public MultiTrie(IDataInput is) Parameters Type Name Description IDataInput is the input stream Exceptions Type Condition System.IO.IOException if an I/O error occurs | Improve this Doc View Source MultiTrie(Boolean) Constructor for the MultiTrie object Declaration public MultiTrie(bool forward) Parameters Type Name Description System.Boolean forward set to true if the elements should be read left to right Fields | Improve this Doc View Source m_tries Declaration protected List<Trie> m_tries Field Value Type Description System.Collections.Generic.List < Trie > Methods | Improve this Doc View Source Add(String, String) Add an element to this structure consisting of the given key and patch command. This method will return without executing if the cmd parameter's length is 0. Declaration public override void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command Overrides Trie.Add(String, String) | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public override string GetFully(string key) Parameters Type Name Description System.String key the key to the cell holding the desired element Returns Type Description System.String the element Overrides Trie.GetFully(String) | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path belonging to the given key. Declaration public override string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the element that is stored as last on a path Overrides Trie.GetLastOnPath(String) | Improve this Doc View Source PrintInfo(TextWriter, String) Print the given prefix and the position(s) in the Trie where it appears. Declaration public override void PrintInfo(TextWriter out, string prefix) Parameters Type Name Description System.IO.TextWriter out System.String prefix the desired prefix Overrides Trie.PrintInfo(TextWriter, String) | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie . Declaration public override Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie the newly reduced Trie Overrides Trie.Reduce(Reduce) | Improve this Doc View Source Store(IDataOutput) Write this data structure to the given output stream. Declaration public override void Store(IDataOutput os) Parameters Type Name Description IDataOutput os the output stream Overrides Trie.Store(IDataOutput) Exceptions Type Condition System.IO.IOException if an I/O error occurs"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.MultiTrie2.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.MultiTrie2.html",
    "title": "Class MultiTrie2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTrie2 The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands broken into their constituent parts, as a MultiTrie does, but the commands are delimited by the skip command. Inheritance System.Object Trie MultiTrie MultiTrie2 Inherited Members MultiTrie.m_tries MultiTrie.PrintInfo(TextWriter, String) Trie.GetAll(String) Trie.GetCells() Trie.GetCellsPnt() Trie.GetCellsVal() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class MultiTrie2 : MultiTrie Constructors | Improve this Doc View Source MultiTrie2(IDataInput) Constructor for the MultiTrie object. Declaration public MultiTrie2(IDataInput is) Parameters Type Name Description IDataInput is the input stream Exceptions Type Condition System.IO.IOException if an I/O error occurs | Improve this Doc View Source MultiTrie2(Boolean) Constructor for the MultiTrie2 object Declaration public MultiTrie2(bool forward) Parameters Type Name Description System.Boolean forward set to true if the elements should be read left to right Methods | Improve this Doc View Source Add(String, String) Add an element to this structure consisting of the given key and patch command. This method will return without executing if the cmd parameter's length is 0. Declaration public override void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command Overrides MultiTrie.Add(String, String) | Improve this Doc View Source Decompose(String) Break the given patch command into its constituent pieces. The pieces are delimited by NOOP commands. Declaration public virtual string[] Decompose(string cmd) Parameters Type Name Description System.String cmd the patch command Returns Type Description System.String [] an array containing the pieces of the command | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public override string GetFully(string key) Parameters Type Name Description System.String key the key to the cell holding the desired element Returns Type Description System.String the element Overrides MultiTrie.GetFully(String) | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path belonging to the given key. Declaration public override string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the element that is stored as last on a path Overrides MultiTrie.GetLastOnPath(String) | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie. Declaration public override Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie the newly reduced Trie Overrides MultiTrie.Reduce(Reduce) | Improve this Doc View Source Store(IDataOutput) Write this data structure to the given output stream. Declaration public override void Store(IDataOutput os) Parameters Type Name Description IDataOutput os the output stream Overrides MultiTrie.Store(IDataOutput) Exceptions Type Condition System.IO.IOException if an I/O error occurs"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Optimizer.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Optimizer.html",
    "title": "Class Optimizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Optimizer The Optimizer class is a Trie that will be reduced (have empty rows removed). The reduction will be made by joining two rows where the first is a subset of the second. Inheritance System.Object Reduce Optimizer Optimizer2 Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Optimizer : Reduce Constructors | Improve this Doc View Source Optimizer() Constructor for the Optimizer object. Declaration public Optimizer() Methods | Improve this Doc View Source Merge(Cell, Cell) Merge the given Cell s and return the resulting Cell . Declaration public virtual Cell Merge(Cell m, Cell e) Parameters Type Name Description Cell m the master Cell Cell e the existing Cell Returns Type Description Cell the resulting Cell , or null if the operation cannot be realized | Improve this Doc View Source Merge(Row, Row) Merge the given rows and return the resulting Row . Declaration public Row Merge(Row master, Row existing) Parameters Type Name Description Row master the master Row Row existing the existing Row Returns Type Description Row the resulting Row , or null if the operation cannot be realized | Improve this Doc View Source Optimize(Trie) Optimize (remove empty rows) from the given Trie and return the resulting Trie. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to consolidate Returns Type Description Trie the newly consolidated Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Optimizer2.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Optimizer2.html",
    "title": "Class Optimizer2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Optimizer2 The Optimizer class is a Trie that will be reduced (have empty rows removed). This is the result of allowing a joining of rows when there is no collision between non- null values in the rows. Information loss, resulting in the stemmer not being able to recognize words (as in Optimizer), is curtailed, allowing the stemmer to recognize words for which the original trie was built. Use of this class allows the stemmer to be self-teaching. Inheritance System.Object Reduce Optimizer Optimizer2 Inherited Members Optimizer.Optimize(Trie) Optimizer.Merge(Row, Row) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Optimizer2 : Optimizer Constructors | Improve this Doc View Source Optimizer2() Constructor for the Optimizer2 object. Declaration public Optimizer2() Methods | Improve this Doc View Source Merge(Cell, Cell) Merge the given Cell s and return the resulting Cell . Declaration public override Cell Merge(Cell m, Cell e) Parameters Type Name Description Cell m the master Cell Cell e the existing Cell Returns Type Description Cell the resulting Cell , or null if the operation cannot be realized Overrides Optimizer.Merge(Cell, Cell)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicAnalyzer.html",
    "title": "Class ArabicAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicAnalyzer Analyzer for Arabic. This analyzer implements light-stemming as specified by: Light Stemming for Arabic Information Retrieval http://www.mtholyoke.edu/~lballest/Pubs/arab_stem05.pdf The analysis package contains three primary components: ArabicNormalizationFilter : Arabic orthographic normalization. ArabicStemFilter : Arabic light stemming Arabic stop words file: a set of default Arabic stop words. Inheritance System.Object Analyzer StopwordAnalyzerBase ArabicAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ArabicAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ArabicAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source ArabicAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public ArabicAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ArabicAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop word. If a none-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before ArabicStemFilter . Declaration public ArabicAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Arabic stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from an StandardTokenizer filtered with LowerCaseFilter , StopFilter , ArabicNormalizationFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and ArabicStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicLetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicLetterTokenizer.html",
    "title": "Class ArabicLetterTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicLetterTokenizer Tokenizer that breaks text into runs of letters and diacritics. The problem with the standard Letter tokenizer is that it fails on diacritics. Handling similar to this is necessary for Indic Scripts, Hebrew, Thaana, etc. You must specify the required LuceneVersion compatibility when creating ArabicLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer ArabicLetterTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardTokenizer instead.\")] public class ArabicLetterTokenizer : LetterTokenizer, IDisposable Constructors | Improve this Doc View Source ArabicLetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new ArabicLetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public ArabicLetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match - See LuceneVersion . AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source ArabicLetterTokenizer(LuceneVersion, TextReader) Construct a new ArabicLetterTokenizer. Declaration public ArabicLetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Allows for Letter category or NonspacingMark category Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides LetterTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicLetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicLetterTokenizerFactory.html",
    "title": "Class ArabicLetterTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicLetterTokenizerFactory Factory for ArabicLetterTokenizer Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ArabicLetterTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardTokenizerFactory instead.\")] public class ArabicLetterTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ArabicLetterTokenizerFactory(IDictionary<String, String>) Creates a new ArabicNormalizationFilterFactory Declaration public ArabicLetterTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicNormalizationFilter.html",
    "title": "Class ArabicNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicNormalizationFilter A TokenFilter that applies ArabicNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter ArabicNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ArabicNormalizationFilter(TokenStream) Declaration public ArabicNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicNormalizationFilterFactory.html",
    "title": "Class ArabicNormalizationFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicNormalizationFilterFactory Factory for ArabicNormalizationFilter . <fieldType name=\"text_arnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ArabicNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source ArabicNormalizationFilterFactory(IDictionary<String, String>) Creates a new ArabicNormalizationFilterFactory Declaration public ArabicNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicStemFilter.html",
    "title": "Class ArabicStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicStemFilter A TokenFilter that applies ArabicStemmer to stem Arabic words.. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter ArabicStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArabicStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ArabicStemFilter(TokenStream) Declaration public ArabicStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianAnalyzer.html",
    "title": "Class GalicianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianAnalyzer Analyzer for Galician. Inheritance System.Object Analyzer StopwordAnalyzerBase GalicianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source GalicianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public GalicianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source GalicianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public GalicianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source GalicianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public GalicianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Galician stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and GalicianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilter.html",
    "title": "Class GalicianMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianMinimalStemFilter A TokenFilter that applies GalicianMinimalStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GalicianMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GalicianMinimalStemFilter(TokenStream) Declaration public GalicianMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianMinimalStemFilterFactory.html",
    "title": "Class GalicianMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianMinimalStemFilterFactory Factory for GalicianMinimalStemFilter . <fieldType name=\"text_glplural\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GalicianMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GalicianMinimalStemFilterFactory(IDictionary<String, String>) Creates a new GalicianMinimalStemFilterFactory Declaration public GalicianMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianMinimalStemmer.html",
    "title": "Class GalicianMinimalStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianMinimalStemmer Minimal Stemmer for Galician This follows the \"RSLP-S\" algorithm, but modified for Galician. Hence this stemmer only applies the plural reduction step of: \"Regras do lematizador para o galego\" Inheritance System.Object RSLPStemmerBase GalicianMinimalStemmer Inherited Members RSLPStemmerBase.Parse(Type, String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianMinimalStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianStemFilter.html",
    "title": "Class GalicianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianStemFilter A TokenFilter that applies GalicianStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GalicianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GalicianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GalicianStemFilter(TokenStream) Declaration public GalicianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianStemFilterFactory.html",
    "title": "Class GalicianStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianStemFilterFactory Factory for GalicianStemFilter . <fieldType name=\"text_glstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GalicianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GalicianStemFilterFactory(IDictionary<String, String>) Creates a new GalicianStemFilterFactory Declaration public GalicianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.GalicianStemmer.html",
    "title": "Class GalicianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GalicianStemmer Galician stemmer implementing \"Regras do lematizador para o galego\". Inheritance System.Object RSLPStemmerBase GalicianStemmer Inherited Members RSLPStemmerBase.Parse(Type, String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Gl Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GalicianStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s buffer, oversized to at least len+1 System.Int32 len initial valid length of buffer Returns Type Description System.Int32 new valid length, stemmed See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiAnalyzer.html",
    "title": "Class HindiAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiAnalyzer Analyzer for Hindi. You must specify the required LuceneVersion compatibility when creating HindiAnalyzer: As of 3.6, StandardTokenizer is used for tokenization Inheritance System.Object Analyzer StopwordAnalyzerBase HindiAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source HindiAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public HindiAnalyzer(LuceneVersion version) Parameters Type Name Description LuceneVersion version | Improve this Doc View Source HindiAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public HindiAnalyzer(LuceneVersion version, CharArraySet stopwords) Parameters Type Name Description LuceneVersion version lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source HindiAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public HindiAnalyzer(LuceneVersion version, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion version lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Hindi stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , IndicNormalizationFilter , HindiNormalizationFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, HindiStemFilter , and Hindi Stop words Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiNormalizationFilter.html",
    "title": "Class HindiNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiNormalizationFilter A TokenFilter that applies HindiNormalizer to normalize the orthography. In some cases the normalization may cause unrelated terms to conflate, so to prevent terms from being normalized use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter HindiNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HindiNormalizationFilter(TokenStream) Declaration public HindiNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also HindiNormalizer"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiNormalizationFilterFactory.html",
    "title": "Class HindiNormalizationFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiNormalizationFilterFactory Factory for HindiNormalizationFilter . <fieldType name=\"text_hinormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.HindiNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HindiNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source HindiNormalizationFilterFactory(IDictionary<String, String>) Creates a new HindiNormalizationFilterFactory Declaration public HindiNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiStemFilter.html",
    "title": "Class HindiStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiStemFilter A TokenFilter that applies HindiStemmer to stem Hindi words. Inheritance System.Object AttributeSource TokenStream TokenFilter HindiStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HindiStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HindiStemFilter(TokenStream) Declaration public HindiStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.WFSTCompletionLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.WFSTCompletionLookup.html",
    "title": "Class WFSTCompletionLookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WFSTCompletionLookup Suggester based on a weighted FST: it first traverses the prefix, then walks the n shortest paths to retrieve top-ranked suggestions. NOTE : Input weights must be between 0 and System.Int32.MaxValue , any other values will be rejected. @lucene.experimental Inheritance System.Object Lookup WFSTCompletionLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class WFSTCompletionLookup : Lookup Constructors | Improve this Doc View Source WFSTCompletionLookup() Calls WFSTCompletionLookup(Boolean) Declaration public WFSTCompletionLookup() | Improve this Doc View Source WFSTCompletionLookup(Boolean) Creates a new suggester. Declaration public WFSTCompletionLookup(bool exactFirst) Parameters Type Name Description System.Boolean exactFirst true if suggestions that match the prefix exactly should always be returned first, regardless of score. This has no performance impact, but could result in low-quality suggestions. Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the weight associated with an input string, or null if it does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying FST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.IInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.IInputIterator.html",
    "title": "Interface IInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IInputIterator Interface for enumerating term,weight,payload triples for suggester consumption; currently only AnalyzingSuggester , FuzzySuggester and AnalyzingInfixSuggester support payloads. Inherited Members IBytesRefIterator.Next() IBytesRefIterator.Comparer Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public interface IInputIterator : IBytesRefIterator Properties | Improve this Doc View Source Contexts A term's contexts context can be used to filter suggestions. May return null, if suggest entries do not have any context Declaration IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Returns true if the iterator has contexts Declaration bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if the iterator has payloads Declaration bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload An arbitrary byte[] to record per suggestion. See Payload to retrieve the payload for each suggestion. Declaration BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight A term's weight, higher numbers mean better suggestions. Declaration long Weight { get; } Property Value Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InMemorySorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InMemorySorter.html",
    "title": "Class InMemorySorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InMemorySorter An IBytesRefSorter that keeps all the entries in memory. @lucene.experimental This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InMemorySorter Implements IBytesRefSorter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class InMemorySorter : IBytesRefSorter Constructors | Improve this Doc View Source InMemorySorter(IComparer<BytesRef>) Creates an InMemorySorter, sorting entries by the provided comparer. Declaration public InMemorySorter(IComparer<BytesRef> comparer) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Declaration public void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 | Improve this Doc View Source GetIterator() Declaration public IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator Implements IBytesRefSorter"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InputIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.InputIteratorWrapper.html",
    "title": "Class InputIteratorWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InputIteratorWrapper Wraps a IBytesRefIterator as a suggester IInputIterator , with all weights set to 1 and carries no payload Inheritance System.Object InputIteratorWrapper Implements IInputIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class InputIteratorWrapper : IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source InputIteratorWrapper(IBytesRefIterator) Creates a new wrapper, wrapping the specified iterator and specifying a weight value of 1 for all terms and nullifies associated payloads. Declaration public InputIteratorWrapper(IBytesRefIterator wrapped) Parameters Type Name Description IBytesRefIterator wrapped Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellLookup.html",
    "title": "Class JaspellLookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JaspellLookup Suggest implementation based on JaSpell . Inheritance System.Object Lookup JaspellLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public class JaspellLookup : Lookup Constructors | Improve this Doc View Source JaspellLookup() Creates a new empty trie Declaration public JaspellLookup() See Also Build(IInputIterator) Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(String, Object) Adds a new node if key already exists, otherwise replaces its value. This method always returns false. Declaration public virtual bool Add(string key, object value) Parameters Type Name Description System.String key A System.String index. System.Object value The object to be stored in the Trie. Returns Type Description System.Boolean | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator tfit) Parameters Type Name Description IInputIterator tfit Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the value for the specified key, or null if the key does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key A System.String index. Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying TST. Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also JaspellTernarySearchTrie"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupPriorityQueue.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupPriorityQueue.html",
    "title": "Class Lookup.LookupPriorityQueue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lookup.LookupPriorityQueue A PriorityQueue<T> collecting a fixed size of high priority Lookup.LookupResult s. Inheritance System.Object PriorityQueue < Lookup.LookupResult > Lookup.LookupPriorityQueue Inherited Members PriorityQueue<Lookup.LookupResult>.GetSentinelObject() PriorityQueue<Lookup.LookupResult>.Add(Lookup.LookupResult) PriorityQueue<Lookup.LookupResult>.InsertWithOverflow(Lookup.LookupResult) PriorityQueue<Lookup.LookupResult>.Top PriorityQueue<Lookup.LookupResult>.Pop() PriorityQueue<Lookup.LookupResult>.UpdateTop() PriorityQueue<Lookup.LookupResult>.Count PriorityQueue<Lookup.LookupResult>.Clear() PriorityQueue<Lookup.LookupResult>.HeapArray System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LookupPriorityQueue : PriorityQueue<Lookup.LookupResult> Constructors | Improve this Doc View Source LookupPriorityQueue(Int32) Creates a new priority queue of the specified size. Declaration public LookupPriorityQueue(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source GetResults() Returns the top N results in descending order. Declaration public Lookup.LookupResult[] GetResults() Returns Type Description Lookup.LookupResult [] the top N results in descending order. | Improve this Doc View Source LessThan(Lookup.LookupResult, Lookup.LookupResult) Declaration protected override bool LessThan(Lookup.LookupResult a, Lookup.LookupResult b) Parameters Type Name Description Lookup.LookupResult a Lookup.LookupResult b Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Search.Suggest.Lookup.LookupResult>.LessThan(Lucene.Net.Search.Suggest.Lookup.LookupResult, Lucene.Net.Search.Suggest.Lookup.LookupResult)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupResult.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.LookupResult.html",
    "title": "Class Lookup.LookupResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lookup.LookupResult Result of a lookup. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup.LookupResult Implements System.IComparable < Lookup.LookupResult > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public sealed class LookupResult : IComparable<Lookup.LookupResult> Constructors | Improve this Doc View Source LookupResult(String, Int64) Create a new result from a key+weight pair. Declaration public LookupResult(string key, long value) Parameters Type Name Description System.String key System.Int64 value | Improve this Doc View Source LookupResult(String, Int64, BytesRef) Create a new result from a key+weight+payload triple. Declaration public LookupResult(string key, long value, BytesRef payload) Parameters Type Name Description System.String key System.Int64 value BytesRef payload | Improve this Doc View Source LookupResult(String, Int64, BytesRef, IEnumerable<BytesRef>) Create a new result from a key+weight+payload+contexts triple. Declaration public LookupResult(string key, long value, BytesRef payload, IEnumerable<BytesRef> contexts) Parameters Type Name Description System.String key System.Int64 value BytesRef payload System.Collections.Generic.IEnumerable < BytesRef > contexts | Improve this Doc View Source LookupResult(String, Int64, HashSet<BytesRef>) Create a new result from a key+weight+contexts triple. Declaration public LookupResult(string key, long value, HashSet<BytesRef> contexts) Parameters Type Name Description System.String key System.Int64 value System.Collections.Generic.HashSet < BytesRef > contexts | Improve this Doc View Source LookupResult(String, Object, Int64, BytesRef) Create a new result from a key+highlightKey+weight+payload triple. Declaration public LookupResult(string key, object highlightKey, long value, BytesRef payload) Parameters Type Name Description System.String key System.Object highlightKey System.Int64 value BytesRef payload | Improve this Doc View Source LookupResult(String, Object, Int64, BytesRef, IEnumerable<BytesRef>) Create a new result from a key+highlightKey+weight+payload+contexts triple. Declaration public LookupResult(string key, object highlightKey, long value, BytesRef payload, IEnumerable<BytesRef> contexts) Parameters Type Name Description System.String key System.Object highlightKey System.Int64 value BytesRef payload System.Collections.Generic.IEnumerable < BytesRef > contexts Properties | Improve this Doc View Source Contexts the key's contexts (null if not present) Declaration public IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HighlightKey Expert: custom Object to hold the result of a highlighted suggestion. Declaration public object HighlightKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Key the key's text Declaration public string Key { get; } Property Value Type Description System.String | Improve this Doc View Source Payload the key's payload (null if not present) Declaration public BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Value the key's weight Declaration public long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CompareTo(Lookup.LookupResult) Compare alphabetically. Declaration public int CompareTo(Lookup.LookupResult o) Parameters Type Name Description Lookup.LookupResult o Returns Type Description System.Int32 | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedInputIterator.html",
    "title": "Class SortedInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedInputIterator This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SortedInputIterator Implements IInputIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class SortedInputIterator : IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source SortedInputIterator(IInputIterator) Creates a new sorted wrapper, using UTF8SortedAsUnicodeComparer for sorting. Declaration public SortedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source | Improve this Doc View Source SortedInputIterator(IInputIterator, IComparer<BytesRef>) Creates a new sorted wrapper, sorting by BytesRef (ascending) then cost (ascending). Declaration public SortedInputIterator(IInputIterator source, IComparer<BytesRef> comparer) Parameters Type Name Description IInputIterator source System.Collections.Generic.IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Decode(BytesRef, ByteArrayDataInput) decodes the weight at the current position Declaration protected virtual long Decode(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description System.Int64 | Improve this Doc View Source DecodeContexts(BytesRef, ByteArrayDataInput) decodes the contexts at the current position Declaration protected virtual ISet<BytesRef> DecodeContexts(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description System.Collections.Generic.ISet < BytesRef > | Improve this Doc View Source DecodePayload(BytesRef, ByteArrayDataInput) decodes the payload at the current position Declaration protected virtual BytesRef DecodePayload(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description BytesRef | Improve this Doc View Source Encode(OfflineSorter.ByteSequencesWriter, ByteArrayDataOutput, Byte[], BytesRef, BytesRef, IEnumerable<BytesRef>, Int64) encodes an entry (bytes+(contexts)+(payload)+weight) to the provided writer Declaration protected virtual void Encode(OfflineSorter.ByteSequencesWriter writer, ByteArrayDataOutput output, byte[] buffer, BytesRef spare, BytesRef payload, IEnumerable<BytesRef> contexts, long weight) Parameters Type Name Description OfflineSorter.ByteSequencesWriter writer ByteArrayDataOutput output System.Byte [] buffer BytesRef spare BytesRef payload System.Collections.Generic.IEnumerable < BytesRef > contexts System.Int64 weight | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedTermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.SortedTermFreqIteratorWrapper.html",
    "title": "Class SortedTermFreqIteratorWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedTermFreqIteratorWrapper This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SortedTermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class SortedTermFreqIteratorWrapper : ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source SortedTermFreqIteratorWrapper(ITermFreqIterator) Creates a new sorted wrapper, using UTF8SortedAsUnicodeComparer for sorting. Declaration public SortedTermFreqIteratorWrapper(ITermFreqIterator source) Parameters Type Name Description ITermFreqIterator source | Improve this Doc View Source SortedTermFreqIteratorWrapper(ITermFreqIterator, IComparer<BytesRef>) Creates a new sorted wrapper, sorting by BytesRef (ascending) then cost (ascending). Declaration public SortedTermFreqIteratorWrapper(ITermFreqIterator source, IComparer<BytesRef> comparer) Parameters Type Name Description ITermFreqIterator source System.Collections.Generic.IComparer < BytesRef > comparer Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Decode(BytesRef, ByteArrayDataInput) decodes the weight at the current position Declaration protected virtual long Decode(BytesRef scratch, ByteArrayDataInput tmpInput) Parameters Type Name Description BytesRef scratch ByteArrayDataInput tmpInput Returns Type Description System.Int64 | Improve this Doc View Source Encode(OfflineSorter.ByteSequencesWriter, ByteArrayDataOutput, Byte[], BytesRef, Int64) encodes an entry (bytes+weight) to the provided writer Declaration protected virtual void Encode(OfflineSorter.ByteSequencesWriter writer, ByteArrayDataOutput output, byte[] buffer, BytesRef spare, long weight) Parameters Type Name Description OfflineSorter.ByteSequencesWriter writer ByteArrayDataOutput output System.Byte [] buffer BytesRef spare System.Int64 weight | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTLookup.html",
    "title": "Class TSTLookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TSTLookup Suggest implementation based on a Ternary Search Tree Inheritance System.Object Lookup TSTLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TSTLookup : Lookup Constructors | Improve this Doc View Source TSTLookup() Creates a new TSTLookup with an empty Ternary Search Tree. Declaration public TSTLookup() See Also Build(IInputIterator) Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Add(String, Object) Adds a new node if key already exists, otherwise replaces its value. This method always returns true. Declaration public virtual bool Add(string key, object value) Parameters Type Name Description System.String key System.Object value Returns Type Description System.Boolean | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator tfit) Parameters Type Name Description IInputIterator tfit Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean onlyMorePopular System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the value for the specified key, or null if the key does not exist. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Returns byte size of the underlying TST Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also TSTAutocomplete"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.UnsortedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.UnsortedInputIterator.html",
    "title": "Class UnsortedInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnsortedInputIterator This wrapper buffers the incoming elements and makes sure they are in random order. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferedInputIterator UnsortedInputIterator Implements IInputIterator IBytesRefIterator Inherited Members BufferedInputIterator.m_entries BufferedInputIterator.m_payloads BufferedInputIterator.m_contextSets BufferedInputIterator.m_curPos BufferedInputIterator.m_freqs BufferedInputIterator.HasPayloads BufferedInputIterator.Comparer BufferedInputIterator.HasContexts System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class UnsortedInputIterator : BufferedInputIterator, IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source UnsortedInputIterator(IInputIterator) Creates a new iterator, wrapping the specified iterator and returning elements in a random order. Declaration public UnsortedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source Properties | Improve this Doc View Source Contexts Declaration public override IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > Overrides BufferedInputIterator.Contexts | Improve this Doc View Source Payload Declaration public override BytesRef Payload { get; } Property Value Type Description BytesRef Overrides BufferedInputIterator.Payload | Improve this Doc View Source Weight Declaration public override long Weight { get; } Property Value Type Description System.Int64 Overrides BufferedInputIterator.Weight Methods | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides BufferedInputIterator.Next() Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.html",
    "title": "Class Analyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Analyzer An Analyzer builds TokenStream s, which analyze text. It thus represents a policy for extracting index terms from text. In order to define what analysis is done, subclasses must define their TokenStreamComponents in CreateComponents(String, TextReader) . The components are then reused in each call to GetTokenStream(String, TextReader) . Simple example: Analyzer analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); For more examples, see the Lucene.Net.Analysis namespace documentation. For some concrete implementations bundled with Lucene, look in the analysis modules: Common: Analyzers for indexing content in different languages and domains. ICU: Exposes functionality from ICU to Apache Lucene. Kuromoji: Morphological analyzer for Japanese text. Morfologik: Dictionary-driven lemmatization for the Polish language. Phonetic: Analysis for indexing phonetic signatures (for sounds-alike search). Smart Chinese: Analyzer for Simplified Chinese, which indexes words. Stempel: Algorithmic Stemmer for the Polish Language. UIMA: Analysis integration with Apache UIMA. Inheritance System.Object Analyzer AnalyzerWrapper Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class Analyzer : IDisposable Constructors | Improve this Doc View Source Analyzer() Create a new Analyzer , reusing the same set of components per-thread across calls to GetTokenStream(String, TextReader) . Declaration public Analyzer() | Improve this Doc View Source Analyzer(ReuseStrategy) Expert: create a new Analyzer with a custom ReuseStrategy . NOTE: if you just want to reuse on a per-field basis, its easier to use a subclass of AnalyzerWrapper such as Lucene.Net.Analysis.Common.Miscellaneous.PerFieldAnalyzerWrapper instead. Declaration public Analyzer(ReuseStrategy reuseStrategy) Parameters Type Name Description ReuseStrategy reuseStrategy Fields | Improve this Doc View Source GLOBAL_REUSE_STRATEGY A predefined ReuseStrategy that reuses the same components for every field. Declaration public static readonly ReuseStrategy GLOBAL_REUSE_STRATEGY Field Value Type Description ReuseStrategy | Improve this Doc View Source PER_FIELD_REUSE_STRATEGY A predefined ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. Declaration public static readonly ReuseStrategy PER_FIELD_REUSE_STRATEGY Field Value Type Description ReuseStrategy Properties | Improve this Doc View Source Strategy Returns the used ReuseStrategy . Declaration public ReuseStrategy Strategy { get; } Property Value Type Description ReuseStrategy Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a new TokenStreamComponents instance for this analyzer. Declaration protected abstract TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName the name of the fields content passed to the TokenStreamComponents sink as a reader System.IO.TextReader reader the reader passed to the Tokenizer constructor Returns Type Description TokenStreamComponents the TokenStreamComponents for this analyzer. | Improve this Doc View Source Dispose() Frees persistent resources used by this Analyzer Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Frees persistent resources used by this Analyzer Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetOffsetGap(String) Just like GetPositionIncrementGap(String) , except for Token offsets instead. By default this returns 1. this method is only called if the field produced at least one token for indexing. Declaration public virtual int GetOffsetGap(string fieldName) Parameters Type Name Description System.String fieldName the field just indexed Returns Type Description System.Int32 offset gap, added to the next token emitted from GetTokenStream(String, TextReader) . this value must be >= 0 . | Improve this Doc View Source GetPositionIncrementGap(String) Invoked before indexing a IIndexableField instance if terms have already been added to that field. This allows custom analyzers to place an automatic position increment gap between IIndexableField instances using the same field name. The default value position increment gap is 0. With a 0 position increment gap and the typical default token position increment of 1, all terms in a field, including across IIndexableField instances, are in successive positions, allowing exact PhraseQuery matches, for instance, across IIndexableField instance boundaries. Declaration public virtual int GetPositionIncrementGap(string fieldName) Parameters Type Name Description System.String fieldName IIndexableField name being indexed. Returns Type Description System.Int32 position increment gap, added to the next token emitted from GetTokenStream(String, TextReader) . this value must be >= 0 . | Improve this Doc View Source GetTokenStream(String, TextReader) Returns a TokenStream suitable for fieldName , tokenizing the contents of text . This method uses CreateComponents(String, TextReader) to obtain an instance of TokenStreamComponents . It returns the sink of the components and stores the components internally. Subsequent calls to this method will reuse the previously stored components after resetting them through SetReader(TextReader) . NOTE: After calling this method, the consumer must follow the workflow described in TokenStream to properly consume its contents. See the Lucene.Net.Analysis namespace documentation for some examples demonstrating this. Declaration public TokenStream GetTokenStream(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName the name of the field the created TokenStream is used for System.IO.TextReader reader the reader the streams source reads from Returns Type Description TokenStream TokenStream for iterating the analyzed content of System.IO.TextReader Exceptions Type Condition System.ObjectDisposedException if the Analyzer is disposed. System.IO.IOException if an i/o error occurs (may rarely happen for strings). See Also GetTokenStream(String, String) | Improve this Doc View Source GetTokenStream(String, String) Returns a TokenStream suitable for fieldName , tokenizing the contents of text . This method uses CreateComponents(String, TextReader) to obtain an instance of TokenStreamComponents . It returns the sink of the components and stores the components internally. Subsequent calls to this method will reuse the previously stored components after resetting them through SetReader(TextReader) . NOTE: After calling this method, the consumer must follow the workflow described in TokenStream to properly consume its contents. See the Lucene.Net.Analysis namespace documentation for some examples demonstrating this. Declaration public TokenStream GetTokenStream(string fieldName, string text) Parameters Type Name Description System.String fieldName the name of the field the created TokenStream is used for System.String text the System.String the streams source reads from Returns Type Description TokenStream TokenStream for iterating the analyzed content of reader Exceptions Type Condition System.ObjectDisposedException if the Analyzer is disposed. System.IO.IOException if an i/o error occurs (may rarely happen for strings). See Also GetTokenStream(String, TextReader) | Improve this Doc View Source InitReader(String, TextReader) Override this if you want to add a CharFilter chain. The default implementation returns reader unchanged. Declaration protected virtual TextReader InitReader(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName IIndexableField name being indexed System.IO.TextReader reader original System.IO.TextReader Returns Type Description System.IO.TextReader reader, optionally decorated with CharFilter (s) | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter. Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents) Parameters Type Name Description System.Func < System.String , System.IO.TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the TokenStreamComponents for this analyzer. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter and allows the use of a ReuseStrategy . Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, reuseStrategy); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, ReuseStrategy reuseStrategy) Parameters Type Name Description System.Func < System.String , System.IO.TextReader , TokenStreamComponents > createComponents An delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the TokenStreamComponents for this analyzer. ReuseStrategy reuseStrategy A custom ReuseStrategy instance. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter and the body of the InitReader(String, TextReader) method through the initReader parameter. Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, initReader: (fieldName, reader) => { return new HTMLStripCharFilter(reader); }); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, Func<string, TextReader, TextReader> initReader) Parameters Type Name Description System.Func < System.String , System.IO.TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the TokenStreamComponents for this analyzer. System.Func < System.String , System.IO.TextReader , System.IO.TextReader > initReader A delegate method that represents (is called by) the InitReader(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the System.IO.TextReader that can be modified or wrapped by the initReader method. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. | Improve this Doc View Source NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Creates a new instance with the ability to specify the body of the CreateComponents(String, TextReader) method through the createComponents parameter, the body of the InitReader(String, TextReader) method through the initReader parameter, and allows the use of a ReuseStrategy . Simple example: var analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }, initReader: (fieldName, reader) => { return new HTMLStripCharFilter(reader); }, reuseStrategy); LUCENENET specific Declaration public static Analyzer NewAnonymous(Func<string, TextReader, TokenStreamComponents> createComponents, Func<string, TextReader, TextReader> initReader, ReuseStrategy reuseStrategy) Parameters Type Name Description System.Func < System.String , System.IO.TextReader , TokenStreamComponents > createComponents A delegate method that represents (is called by) the CreateComponents(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the TokenStreamComponents for this analyzer. System.Func < System.String , System.IO.TextReader , System.IO.TextReader > initReader A delegate method that represents (is called by) the InitReader(String, TextReader) method. It accepts a System.String fieldName and a System.IO.TextReader reader and returns the System.IO.TextReader that can be modified or wrapped by the initReader method. ReuseStrategy reuseStrategy A custom ReuseStrategy instance. Returns Type Description Analyzer A new Lucene.Net.Analysis.Analyzer.AnonymousAnalyzer instance. Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IKeywordAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IKeywordAttribute.html",
    "title": "Interface IKeywordAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IKeywordAttribute This attribute can be used to mark a token as a keyword. Keyword aware TokenStream s can decide to modify a token based on the return value of IsKeyword if the token is modified. Stemming filters for instance can use this attribute to conditionally skip a term if IsKeyword returns true . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IKeywordAttribute : IAttribute Properties | Improve this Doc View Source IsKeyword Gets or Sets whether the current token is a keyword. true if the current token is a keyword, otherwise false . Declaration bool IsKeyword { get; set; } Property Value Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITermToBytesRefAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITermToBytesRefAttribute.html",
    "title": "Interface ITermToBytesRefAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITermToBytesRefAttribute This attribute is requested by TermsHashPerField to index the contents. This attribute can be used to customize the final byte[] encoding of terms. Consumers of this attribute call BytesRef up-front, and then invoke FillBytesRef() for each term. Example: TermToBytesRefAttribute termAtt = tokenStream.GetAttribute<TermToBytesRefAttribute>; BytesRef bytes = termAtt.BytesRef; while (tokenStream.IncrementToken() { // you must call termAtt.FillBytesRef() before doing something with the bytes. // this encodes the term value (internally it might be a char[], etc) into the bytes. int hashCode = termAtt.FillBytesRef(); if (IsInteresting(bytes)) { // because the bytes are reused by the attribute (like CharTermAttribute's char[] buffer), // you should make a copy if you need persistent access to the bytes, otherwise they will // be rewritten across calls to IncrementToken() DoSomethingWith(new BytesRef(bytes)); } } ... @lucene.experimental this is a very expert API, please use CharTermAttribute and its implementation of this method for UTF-8 terms. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ITermToBytesRefAttribute : IAttribute Properties | Improve this Doc View Source BytesRef Retrieve this attribute's BytesRef . The bytes are updated from the current term when the consumer calls FillBytesRef() . Declaration BytesRef BytesRef { get; } Property Value Type Description BytesRef this IAttribute s internal BytesRef . Methods | Improve this Doc View Source FillBytesRef() Updates the bytes BytesRef to contain this term's final encoding. Declaration void FillBytesRef() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PayloadAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PayloadAttribute.html",
    "title": "Class PayloadAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadAttribute Default implementation of IPayloadAttribute . Inheritance System.Object Attribute PayloadAttribute Implements IPayloadAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PayloadAttribute : Attribute, IPayloadAttribute, IAttribute Constructors | Improve this Doc View Source PayloadAttribute() Initialize this attribute with no payload. Declaration public PayloadAttribute() | Improve this Doc View Source PayloadAttribute(BytesRef) Initialize this attribute with the given payload. Declaration public PayloadAttribute(BytesRef payload) Parameters Type Name Description BytesRef payload Properties | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IPayloadAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenFilter.html",
    "title": "Class TokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenFilter A TokenFilter is a TokenStream whose input is another TokenStream . This is an abstract class; subclasses must override IncrementToken() . Inheritance System.Object AttributeSource TokenStream TokenFilter CachingTokenFilter Implements System.IDisposable Inherited Members TokenStream.IncrementToken() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class TokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source TokenFilter(TokenStream) Construct a token stream filtering the given input. Declaration protected TokenFilter(TokenStream input) Parameters Type Name Description TokenStream input Fields | Improve this Doc View Source m_input The source of tokens for this filter. Declaration protected readonly TokenStream m_input Field Value Type Description TokenStream Methods | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on reuse). NOTE: The default implementation chains the call to the input TokenStream, so be sure to call base.Dispose(disposing) when overriding this method. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) | Improve this Doc View Source End() This method is called by the consumer after the last token has been consumed, after IncrementToken() returned false (using the new TokenStream API). Streams implementing the old API should upgrade to use this feature. This method can be used to perform any end-of-stream operations, such as setting the final offset of a stream. The final offset of a stream might differ from the offset of the last token eg in case one or more whitespaces followed after the last token, but a WhitespaceTokenizer was used. Additionally any skipped positions (such as those removed by a stopfilter) can be applied to the position increment, or any adjustment of other attributes where the end-of-stream value may be important. NOTE: The default implementation chains the call to the input TokenStream, so be sure to call base.End() first when overriding this method. Declaration public override void End() Overrides TokenStream.End() Exceptions Type Condition System.IO.IOException If an I/O error occurs | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenStream.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also TokenStream"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsReader.html",
    "title": "Class CompressingStoredFieldsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsReader StoredFieldsReader impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsReader CompressingStoredFieldsReader Implements System.IDisposable Inherited Members StoredFieldsReader.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsReader : StoredFieldsReader, IDisposable Constructors | Improve this Doc View Source CompressingStoredFieldsReader(Directory, SegmentInfo, String, FieldInfos, IOContext, String, CompressionMode) Sole constructor. Declaration public CompressingStoredFieldsReader(Directory d, SegmentInfo si, string segmentSuffix, FieldInfos fn, IOContext context, string formatName, CompressionMode compressionMode) Parameters Type Name Description Directory d SegmentInfo si System.String segmentSuffix FieldInfos fn IOContext context System.String formatName CompressionMode compressionMode Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides StoredFieldsReader.CheckIntegrity() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides StoredFieldsReader.Clone() | Improve this Doc View Source Dispose(Boolean) Dispose the underlying IndexInput s. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsReader.Dispose(Boolean) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides StoredFieldsReader.RamBytesUsed() | Improve this Doc View Source VisitDocument(Int32, StoredFieldVisitor) Declaration public override void VisitDocument(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides StoredFieldsReader.VisitDocument(Int32, StoredFieldVisitor) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultPostingsFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultPostingsFormatFactory.html",
    "title": "Class DefaultPostingsFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultPostingsFormatFactory LUCENENET specific class that implements the default functionality for the IPostingsFormatFactory . The most common use cases are: Initialize DefaultPostingsFormatFactory with a set of CustomPostingsFormatTypes . Subclass DefaultPostingsFormatFactory and override GetPostingsFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetPostingsFormat(String) . Subclass DefaultPostingsFormatFactory and override GetPostingsFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Subclass DefaultPostingsFormatFactory to add new or override the default PostingsFormat types by overriding Initialize() and calling PutPostingsFormatType(Type) . Subclass DefaultPostingsFormatFactory to scan additional assemblies for PostingsFormat subclasses in by overriding Initialize() and calling ScanForPostingsFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . Inheritance System.Object NamedServiceFactory < PostingsFormat > DefaultPostingsFormatFactory Implements IPostingsFormatFactory IServiceListable Inherited Members NamedServiceFactory<PostingsFormat>.m_initializationLock NamedServiceFactory<PostingsFormat>.EnsureInitialized() NamedServiceFactory<PostingsFormat>.CodecsAssembly NamedServiceFactory<PostingsFormat>.IsServiceType(Type) NamedServiceFactory<PostingsFormat>.GetServiceName(Type) NamedServiceFactory<PostingsFormat>.GetCanonicalName(Type) NamedServiceFactory<PostingsFormat>.IsFullyTrusted System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultPostingsFormatFactory : NamedServiceFactory<PostingsFormat>, IPostingsFormatFactory, IServiceListable Constructors | Improve this Doc View Source DefaultPostingsFormatFactory() Creates a new instance of DefaultPostingsFormatFactory . Declaration public DefaultPostingsFormatFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available PostingsFormat s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > A ICollection{string} of PostingsFormat names. | Improve this Doc View Source CustomPostingsFormatTypes An array of custom PostingsFormat -derived types to be registered. This property can be initialized during construction of DefaultPostingsFormatFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene PostingsFormat (via PostingsFormatNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomPostingsFormatTypes { get; set; } Property Value Type Description System.Collections.Generic.IEnumerable < System.Type > Methods | Improve this Doc View Source GetPostingsFormat(String) Gets the PostingsFormat instance from the provided name . Declaration public virtual PostingsFormat GetPostingsFormat(string name) Parameters Type Name Description System.String name The name of the PostingsFormat instance to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. | Improve this Doc View Source GetPostingsFormat(Type) Gets the PostingsFormat instance from the provided type . Declaration protected virtual PostingsFormat GetPostingsFormat(Type type) Parameters Type Name Description System.Type type The System.Type of PostingsFormat to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. | Improve this Doc View Source GetPostingsFormatType(String) Gets the PostingsFormat System.Type from the provided name . Declaration protected virtual Type GetPostingsFormatType(string name) Parameters Type Name Description System.String name The name of the PostingsFormat System.Type to retrieve. Returns Type Description System.Type The PostingsFormat System.Type . | Improve this Doc View Source Initialize() Initializes the codec type cache with the known PostingsFormat types. Override this method (and optionally call base.Initialize() ) to add your own PostingsFormat types by calling PutPostingsFormatType(Type) or ScanForPostingsFormats(Assembly) . If two types have the same name by using the PostingsFormatNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.PostingsFormat>.Initialize() | Improve this Doc View Source NewPostingsFormat(Type) Instantiates a PostingsFormat based on the provided type . Declaration protected virtual PostingsFormat NewPostingsFormat(Type type) Parameters Type Name Description System.Type type The System.Type of PostingsFormat to instantiate. Returns Type Description PostingsFormat The new instance. | Improve this Doc View Source PutPostingsFormatType(Type) Adds a PostingsFormat type to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap , using the name provided in the PostingsFormatNameAttribute , if present, or the name of the codec class minus the \"Codec\" suffix as the name by default. Note that if a PostingsFormat with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutPostingsFormatType(Type postingsFormat) Parameters Type Name Description System.Type postingsFormat A type that subclasses PostingsFormat . | Improve this Doc View Source ScanForPostingsFormats(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Note that names will be automatically overridden if the PostingsFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForPostingsFormats(IEnumerable<Assembly> assemblies) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Reflection.Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each PostingsFormat name wins. | Improve this Doc View Source ScanForPostingsFormats(Assembly) Scans the given assembly for subclasses of PostingsFormat and adds their names to the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Note that names will be automatically overridden if the PostingsFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForPostingsFormats(Assembly assembly) Parameters Type Name Description System.Reflection.Assembly assembly The assembly to scan. Implements IPostingsFormatFactory IServiceListable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ExcludePostingsFormatFromScanAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ExcludePostingsFormatFromScanAttribute.html",
    "title": "Class ExcludePostingsFormatFromScanAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExcludePostingsFormatFromScanAttribute When placed on a class that subclasses PostingsFormat , adding this attribute will exclude the type from consideration in the ScanForPostingsFormats(Assembly) method. However, the PostingsFormat type can still be added manually using PutPostingsFormatType(Type) . Inheritance System.Object System.Attribute ExcludeServiceAttribute ExcludePostingsFormatFromScanAttribute Inherited Members System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class ExcludePostingsFormatFromScanAttribute : ExcludeServiceAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40Codec.html",
    "title": "Class Lucene40Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40Codec Implements the Lucene 4.0 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene40 package documentation for file format details. Inheritance System.Object Codec Lucene40Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] [CodecName(\"Lucene40\")] public class Lucene40Codec : Codec Constructors | Improve this Doc View Source Lucene40Codec() Sole constructor. Declaration public Lucene40Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene40\". Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SegmentInfoWriter.html",
    "title": "Class Lucene40SegmentInfoWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene40SegmentInfoWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete] public class Lucene40SegmentInfoWriter : SegmentInfoWriter Constructors | Improve this Doc View Source Lucene40SegmentInfoWriter() Sole constructor. Declaration public Lucene40SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Save a single segment's info. Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext) Extension Methods Number.IsNumber(Object) See Also Lucene40SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SkipListReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40SkipListReader.html",
    "title": "Class Lucene40SkipListReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40SkipListReader Implements the skip list reader for the 4.0 posting list format that stores positions and payloads. Inheritance System.Object MultiLevelSkipListReader Lucene40SkipListReader Implements System.IDisposable Inherited Members MultiLevelSkipListReader.m_maxNumberOfSkipLevels MultiLevelSkipListReader.m_skipDoc MultiLevelSkipListReader.Doc MultiLevelSkipListReader.SkipTo(Int32) MultiLevelSkipListReader.Dispose() MultiLevelSkipListReader.Dispose(Boolean) MultiLevelSkipListReader.Init(Int64, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] public class Lucene40SkipListReader : MultiLevelSkipListReader, IDisposable Constructors | Improve this Doc View Source Lucene40SkipListReader(IndexInput, Int32, Int32) Sole constructor. Declaration public Lucene40SkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) Parameters Type Name Description IndexInput skipStream System.Int32 maxSkipLevels System.Int32 skipInterval Properties | Improve this Doc View Source FreqPointer Returns the freq pointer of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual long FreqPointer { get; } Property Value Type Description System.Int64 | Improve this Doc View Source OffsetLength Returns the offset length (endOffset-startOffset) of the position stored just before the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int OffsetLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PayloadLength Returns the payload length of the payload stored just before the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual int PayloadLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ProxPointer Returns the prox pointer of the doc to which the last call of SkipTo(Int32) has skipped. Declaration public virtual long ProxPointer { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Init(Int64, Int64, Int64, Int32, Boolean, Boolean) Per-term initialization. Declaration public virtual void Init(long skipPointer, long freqBasePointer, long proxBasePointer, int df, bool storesPayloads, bool storesOffsets) Parameters Type Name Description System.Int64 skipPointer System.Int64 freqBasePointer System.Int64 proxBasePointer System.Int32 df System.Boolean storesPayloads System.Boolean storesOffsets | Improve this Doc View Source ReadSkipData(Int32, IndexInput) Declaration protected override int ReadSkipData(int level, IndexInput skipStream) Parameters Type Name Description System.Int32 level IndexInput skipStream Returns Type Description System.Int32 Overrides MultiLevelSkipListReader.ReadSkipData(Int32, IndexInput) | Improve this Doc View Source SeekChild(Int32) Declaration protected override void SeekChild(int level) Parameters Type Name Description System.Int32 level Overrides MultiLevelSkipListReader.SeekChild(Int32) | Improve this Doc View Source SetLastSkipData(Int32) Declaration protected override void SetLastSkipData(int level) Parameters Type Name Description System.Int32 level Overrides MultiLevelSkipListReader.SetLastSkipData(Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Lucene40PostingsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42DocValuesFormat.html",
    "title": "Class Lucene42DocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42DocValuesFormat Lucene 4.2 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with seven basic strategies. Delta-compressed Numerics: per-document integers written in blocks of 4096. For each block the minimum value is encoded, and each entry is a delta from that minimum value. Table-compressed Numerics: when the number of unique values is very small, a lookup table is written instead. Each per-document entry is instead the ordinal to this table. Uncompressed Numerics: when all values would fit into a single byte, and the acceptableOverheadRatio would pack values into 8 bits per value anyway, they are written as absolute values (with no indirection or packing) for performance. GCD-compressed Numerics: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed by maxDoc*length . Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 4096, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Sorted: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinals written using one of the numeric strategies above. SortedSet: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinal list written using one of the binary strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<FieldNumber,EntryType,Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry NumericEntry --> DataOffset,CompressionType,PackedVersion BinaryEntry --> DataOffset,DataLength,MinLength,MaxLength,PackedVersion?,BlockSize? SortedEntry --> DataOffset,ValueCount FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) ) DataOffset,DataLength --> Int64 ( WriteInt64(Int64) ) EntryType,CompressionType --> Byte ( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a SortedEntry with the FST metadata, and an ordinary NumericEntry for the document-to-ord metadata. SortedSet fields have two entries: a SortedEntry with the FST metadata, and an ordinary BinaryEntry for the document-to-ord-list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 (NumericEntry), 1 (BinaryEntry, or 2 (SortedEntry) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) CompressionType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 4096 integers, every integer is delta-encoded from the minimum value within the block. 1 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. 2 --> uncompressed. When the acceptableOverheadRatio parameter would upgrade the number of bits required to 8, and all values fit in a byte, these are written as absolute binary values for performance. 3 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length) . Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | UncompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=4096) ( BlockPackedWriter ) TableCompressedNumerics --> TableSize, Int64 ( WriteInt64(Int64) ) TableSize , PackedInts ( PackedInt32s ) UncompressedNumerics --> Byte ( WriteByte(Byte) ) maxdoc Addresses --> MonotonicBlockPackedInts(blockSize=4096) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Inheritance System.Object DocValuesFormat Lucene42DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.2 segments\")] [DocValuesFormatName(\"Lucene42\")] public class Lucene42DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene42DocValuesFormat() Calls Lucene42DocValuesFormat(PackedInts.DEFAULT) ( Lucene42DocValuesFormat(Single) . Declaration public Lucene42DocValuesFormat() | Improve this Doc View Source Lucene42DocValuesFormat(Single) Creates a new Lucene42DocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public Lucene42DocValuesFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Fields | Improve this Doc View Source m_acceptableOverheadRatio Declaration protected readonly float m_acceptableOverheadRatio Field Value Type Description System.Single | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42FieldInfosFormat.html",
    "title": "Class Lucene42FieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42FieldInfosFormat Lucene 4.2 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader WriteHeader(DataOutput, String, Int32) FieldsCount --> VInt WriteVInt32(Int32) FieldName --> String WriteString(String) FieldBits, DocValuesBits --> Byte WriteByte(Byte) FieldNumber --> VInt WriteInt32(Int32) Attributes --> IDictionary<String,String> WriteStringStringMap(IDictionary<String, String>) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues. ( NUMERIC ) 2: BinaryDocValues. ( BINARY ) 3: SortedDocValues. ( SORTED ) Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene42FieldInfosFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.2-4.5 segments\")] public class Lucene42FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene42FieldInfosFormat() Sole constructor. Declaration public Lucene42FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46FieldInfosFormat.html",
    "title": "Class Lucene46FieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46FieldInfosFormat Lucene 4.6 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,DocValuesGen,Attributes> FieldsCount ,Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) DocValuesGen --> Int64 ( WriteInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 string. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a System.Byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a System.Byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues . ( NUMERIC ) 2: BinaryDocValues . ( BINARY ) 3: SortedDocValues . ( SORTED ) DocValuesGen is the generation count of the field's DocValues . If this is -1, there are no DocValues updates to that field. Anything above zero means there are updates stored by DocValuesFormat . Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene46FieldInfosFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public sealed class Lucene46FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene46FieldInfosFormat() Sole constructor. Declaration public Lucene46FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoFormat.html",
    "title": "Class Lucene46SegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46SegmentInfoFormat Lucene 4.6 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Files, Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( WriteStringSet(ISet<String>) ) Diagnostics --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Files is a list of files referred to by this segment. @lucene.experimental Inheritance System.Object SegmentInfoFormat Lucene46SegmentInfoFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoFormat : SegmentInfoFormat Constructors | Improve this Doc View Source Lucene46SegmentInfoFormat() Sole constructor. Declaration public Lucene46SegmentInfoFormat() Fields | Improve this Doc View Source SI_EXTENSION File extension used to store SegmentInfo . Declaration public static readonly string SI_EXTENSION Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter Extension Methods Number.IsNumber(Object) See Also SegmentInfos"
  },
  "api/Lucene.Net/Lucene.Net.Index.Fields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Fields.html",
    "title": "Class Fields | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Fields Flex API for access to fields and terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FilterAtomicReader.FilterFields MultiFields Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class Fields : IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source Fields() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected Fields() Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length Fields array. Declaration public static readonly Fields[] EMPTY_ARRAY Field Value Type Description Fields [] Properties | Improve this Doc View Source Count Gets the number of fields or -1 if the number of distinct field names is unknown. If >= 0, GetEnumerator() will return as many field names. NOTE: This was size() in Lucene. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UniqueTermCount Returns the number of terms for all fields, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration [Obsolete(\"Iterate fields and add their Count instead. This method is only provided as a transition mechanism to access this statistic for 3.x indexes, which do not have this statistic per-field.\")] public virtual long UniqueTermCount { get; } Property Value Type Description System.Int64 See Also Count Methods | Improve this Doc View Source GetEnumerator() Returns an enumerator that will step through all field names. This will not return null . Declaration public abstract IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > | Improve this Doc View Source GetTerms(String) Get the Terms for this field. This will return null if the field does not exist. Declaration public abstract Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsAndPositionsEnum.html",
    "title": "Class FilterAtomicReader.FilterDocsAndPositionsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterDocsAndPositionsEnum Base class for filtering DocsAndPositionsEnum implementations. Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum FilterAtomicReader.FilterDocsAndPositionsEnum Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source FilterDocsAndPositionsEnum(DocsAndPositionsEnum) Create a new FilterAtomicReader.FilterDocsAndPositionsEnum Declaration public FilterDocsAndPositionsEnum(DocsAndPositionsEnum input) Parameters Type Name Description DocsAndPositionsEnum input the underlying DocsAndPositionsEnum instance. Fields | Improve this Doc View Source m_input The underlying DocsAndPositionsEnum instance. Declaration protected readonly DocsAndPositionsEnum m_input Field Value Type Description DocsAndPositionsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides DocsEnum.Attributes | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IConcurrentMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IConcurrentMergeScheduler.html",
    "title": "Interface IConcurrentMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IConcurrentMergeScheduler Inherited Members IMergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) IMergeScheduler.Clone() System.IDisposable.Dispose() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IConcurrentMergeScheduler : IMergeScheduler, IDisposable Properties | Improve this Doc View Source MaxMergeCount Declaration int MaxMergeCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxThreadCount Declaration int MaxThreadCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeThreadPriority Declaration int MergeThreadPriority { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ClearSuppressExceptions() Declaration void ClearSuppressExceptions() | Improve this Doc View Source SetMaxMergesAndThreads(Int32, Int32) Declaration void SetMaxMergesAndThreads(int maxMergeCount, int maxThreadCount) Parameters Type Name Description System.Int32 maxMergeCount System.Int32 maxThreadCount | Improve this Doc View Source SetMergeThreadPriority(Int32) Declaration void SetMergeThreadPriority(int priority) Parameters Type Name Description System.Int32 priority | Improve this Doc View Source SetSuppressExceptions() Declaration void SetSuppressExceptions() | Improve this Doc View Source Sync() Declaration void Sync() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeAbortedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeAbortedException.html",
    "title": "Class MergePolicy.MergeAbortedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.MergeAbortedException Thrown when a merge was explicity aborted because Dispose(Boolean) was called with false . Normally this exception is privately caught and suppresed by IndexWriter . Inheritance System.Object System.Exception System.IO.IOException MergePolicy.MergeAbortedException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeAbortedException : IOException Constructors | Improve this Doc View Source MergeAbortedException() Create a MergePolicy.MergeAbortedException . Declaration public MergeAbortedException() | Improve this Doc View Source MergeAbortedException(String) Create a MergePolicy.MergeAbortedException with a specified message. Declaration public MergeAbortedException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeException.html",
    "title": "Class MergePolicy.MergeException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.MergeException Exception thrown if there are any problems while executing a merge. Inheritance System.Object System.Exception MergePolicy.MergeException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeException : Exception Constructors | Improve this Doc View Source MergeException(Exception, Directory) Create a MergePolicy.MergeException . Declaration public MergeException(Exception exc, Directory dir) Parameters Type Name Description System.Exception exc Directory dir | Improve this Doc View Source MergeException(String, Directory) Create a MergePolicy.MergeException . Declaration public MergeException(string message, Directory dir) Parameters Type Name Description System.String message Directory dir Properties | Improve this Doc View Source Directory Returns the Directory of the index that hit the exception. Declaration public virtual Directory Directory { get; } Property Value Type Description Directory Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.html",
    "title": "Class MultiTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermsEnum Exposes TermsEnum API, merged from TermsEnum API of sub-segments. This does a merge sort, by term text, of the sub-readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsEnum MultiTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Attributes TermsEnum.SeekExact(BytesRef, TermState) TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.GetTermState() TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source MultiTermsEnum(ReaderSlice[]) Sole constructor. Declaration public MultiTermsEnum(ReaderSlice[] slices) Parameters Type Name Description ReaderSlice [] slices Which sub-reader slices we should merge. Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source MatchArray Returns sub-reader slices positioned to the current term. Declaration public MultiTermsEnum.TermsEnumWithSlice[] MatchArray { get; } Property Value Type Description MultiTermsEnum.TermsEnumWithSlice [] | Improve this Doc View Source MatchCount Returns how many sub-reader slices contain the current term. Declaration public int MatchCount { get; } Property Value Type Description System.Int32 See Also MatchArray | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source Reset(MultiTermsEnum.TermsEnumIndex[]) The terms array must be newly created TermsEnum , ie Next() has not yet been called. Declaration public TermsEnum Reset(MultiTermsEnum.TermsEnumIndex[] termsEnumsIndex) Parameters Type Name Description MultiTermsEnum.TermsEnumIndex [] termsEnumsIndex Returns Type Description TermsEnum | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(BytesRef) Declaration public override bool SeekExact(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoDeletionPolicy.html",
    "title": "Class NoDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoDeletionPolicy An IndexDeletionPolicy which keeps all index commits around, never deleting them. This class is a singleton and can be accessed by referencing INSTANCE . Inheritance System.Object IndexDeletionPolicy NoDeletionPolicy Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class NoDeletionPolicy : IndexDeletionPolicy Fields | Improve this Doc View Source INSTANCE The single instance of this class. Declaration public static readonly IndexDeletionPolicy INSTANCE Field Value Type Description IndexDeletionPolicy Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexDeletionPolicy.Clone() | Improve this Doc View Source OnCommit<T>(IList<T>) Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(System.Collections.Generic.IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(System.Collections.Generic.IList<T>) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoMergePolicy.html",
    "title": "Class NoMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoMergePolicy A MergePolicy which never returns merges to execute (hence it's name). It is also a singleton and can be accessed through NO_COMPOUND_FILES if you want to indicate the index does not use compound files, or through COMPOUND_FILES otherwise. Use it if you want to prevent an IndexWriter from ever executing merges, without going through the hassle of tweaking a merge policy's settings to achieve that, such as changing its merge factor. Inheritance System.Object MergePolicy NoMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.Dispose() MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class NoMergePolicy : MergePolicy, IDisposable Fields | Improve this Doc View Source COMPOUND_FILES A singleton NoMergePolicy which indicates the index uses compound files. Declaration public static readonly MergePolicy COMPOUND_FILES Field Value Type Description MergePolicy | Improve this Doc View Source NO_COMPOUND_FILES A singleton NoMergePolicy which indicates the index does not use compound files. Declaration public static readonly MergePolicy NO_COMPOUND_FILES Field Value Type Description MergePolicy Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.NoMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NoMergeScheduler.html",
    "title": "Class NoMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoMergeScheduler A MergeScheduler which never executes any merges. It is also a singleton and can be accessed through INSTANCE . Use it if you want to prevent an IndexWriter from ever executing merges, regardless of the MergePolicy used. Note that you can achieve the same thing by using NoMergePolicy , however with NoMergeScheduler you also ensure that no unnecessary code of any MergeScheduler implementation is ever executed. Hence it is recommended to use both if you want to disable merges from ever happening. Inheritance System.Object MergeScheduler NoMergeScheduler Implements IMergeScheduler System.IDisposable Inherited Members MergeScheduler.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class NoMergeScheduler : MergeScheduler, IMergeScheduler, IDisposable Fields | Improve this Doc View Source INSTANCE The single instance of NoMergeScheduler Declaration public static readonly MergeScheduler INSTANCE Field Value Type Description MergeScheduler Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergeScheduler.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) Implements IMergeScheduler System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SimpleMergedSegmentWarmer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SimpleMergedSegmentWarmer.html",
    "title": "Class SimpleMergedSegmentWarmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleMergedSegmentWarmer A very simple merged segment warmer that just ensures data structures are initialized. Inheritance System.Object IndexWriter.IndexReaderWarmer SimpleMergedSegmentWarmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SimpleMergedSegmentWarmer : IndexWriter.IndexReaderWarmer Constructors | Improve this Doc View Source SimpleMergedSegmentWarmer(InfoStream) Creates a new SimpleMergedSegmentWarmer Declaration public SimpleMergedSegmentWarmer(InfoStream infoStream) Parameters Type Name Description InfoStream infoStream InfoStream to log statistics about warming. Methods | Improve this Doc View Source Warm(AtomicReader) Declaration public override void Warm(AtomicReader reader) Parameters Type Name Description AtomicReader reader Overrides IndexWriter.IndexReaderWarmer.Warm(AtomicReader) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SingleTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SingleTermsEnum.html",
    "title": "Class SingleTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleTermsEnum Subclass of FilteredTermsEnum for enumerating a single term. For example, this can be used by MultiTermQuery s that need only visit one term, but want to preserve MultiTermQuery semantics such as MultiTermRewriteMethod . Inheritance System.Object TermsEnum FilteredTermsEnum SingleTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SingleTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source SingleTermsEnum(TermsEnum, BytesRef) Creates a new SingleTermsEnum . After calling the constructor the enumeration is already pointing to the term, if it exists. Declaration public SingleTermsEnum(TermsEnum tenum, BytesRef termText) Parameters Type Name Description TermsEnum tenum BytesRef termText Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SlowCompositeReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SlowCompositeReaderWrapper.html",
    "title": "Class SlowCompositeReaderWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SlowCompositeReaderWrapper This class forces a composite reader (eg a MultiReader or DirectoryReader ) to emulate an atomic reader. This requires implementing the postings APIs on-the-fly, using the static methods in MultiFields , MultiDocValues , by stepping through the sub-readers to merge fields/terms, appending docs, etc. NOTE : This class almost always results in a performance hit. If this is important to your use case, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. Inheritance System.Object IndexReader AtomicReader SlowCompositeReaderWrapper Implements System.IDisposable Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class SlowCompositeReaderWrapper : AtomicReader, IDisposable Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Declaration public override object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object Overrides IndexReader.CombinedCoreAndDeletesKey | Improve this Doc View Source CoreCacheKey Declaration public override object CoreCacheKey { get; } Property Value Type Description System.Object Overrides IndexReader.CoreCacheKey | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Wrap(IndexReader) This method is sugar for getting an AtomicReader from an IndexReader of any kind. If the reader is already atomic, it is returned unchanged, otherwise wrapped by this class. Declaration public static AtomicReader Wrap(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description AtomicReader Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SnapshotDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SnapshotDeletionPolicy.html",
    "title": "Class SnapshotDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SnapshotDeletionPolicy An IndexDeletionPolicy that wraps any other IndexDeletionPolicy and adds the ability to hold and later release snapshots of an index. While a snapshot is held, the IndexWriter will not remove any files associated with it even if the index is otherwise being actively, arbitrarily changed. Because we wrap another arbitrary IndexDeletionPolicy , this gives you the freedom to continue using whatever IndexDeletionPolicy you would normally want to use with your index. This class maintains all snapshots in-memory, and so the information is not persisted and not protected against system failures. If persistence is important, you can use PersistentSnapshotDeletionPolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexDeletionPolicy SnapshotDeletionPolicy PersistentSnapshotDeletionPolicy Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SnapshotDeletionPolicy : IndexDeletionPolicy Constructors | Improve this Doc View Source SnapshotDeletionPolicy(IndexDeletionPolicy) Sole constructor, taking the incoming IndexDeletionPolicy to wrap. Declaration public SnapshotDeletionPolicy(IndexDeletionPolicy primary) Parameters Type Name Description IndexDeletionPolicy primary Fields | Improve this Doc View Source m_indexCommits Used to map gen to IndexCommit . Declaration protected IDictionary<long?, IndexCommit> m_indexCommits Field Value Type Description System.Collections.Generic.IDictionary < System.Nullable < System.Int64 >, IndexCommit > | Improve this Doc View Source m_lastCommit Most recently committed IndexCommit . Declaration protected IndexCommit m_lastCommit Field Value Type Description IndexCommit | Improve this Doc View Source m_refCounts Records how many snapshots are held against each commit generation Declaration protected IDictionary<long, int> m_refCounts Field Value Type Description System.Collections.Generic.IDictionary < System.Int64 , System.Int32 > Properties | Improve this Doc View Source SnapshotCount Returns the total number of snapshots currently held. Declaration public virtual int SnapshotCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexDeletionPolicy.Clone() | Improve this Doc View Source GetIndexCommit(Int64) Retrieve an IndexCommit from its generation; returns null if this IndexCommit is not currently snapshotted Declaration public virtual IndexCommit GetIndexCommit(long gen) Parameters Type Name Description System.Int64 gen Returns Type Description IndexCommit | Improve this Doc View Source GetSnapshots() Returns all IndexCommit s held by at least one snapshot. Declaration public virtual IList<IndexCommit> GetSnapshots() Returns Type Description System.Collections.Generic.IList < IndexCommit > | Improve this Doc View Source IncRef(IndexCommit) Increments the refCount for this IndexCommit . Declaration protected virtual void IncRef(IndexCommit ic) Parameters Type Name Description IndexCommit ic | Improve this Doc View Source OnCommit<T>(IList<T>) Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(System.Collections.Generic.IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(System.Collections.Generic.IList<T>) | Improve this Doc View Source Release(IndexCommit) Release a snapshotted commit. Declaration public virtual void Release(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit previously returned by Snapshot() | Improve this Doc View Source ReleaseGen(Int64) Release a snapshot by generation. Declaration protected virtual void ReleaseGen(long gen) Parameters Type Name Description System.Int64 gen | Improve this Doc View Source Snapshot() Snapshots the last commit and returns it. Once a commit is 'snapshotted,' it is protected from deletion (as long as this IndexDeletionPolicy is used). The snapshot can be removed by calling Release(IndexCommit) followed by a call to DeleteUnusedFiles() . NOTE: while the snapshot is held, the files it references will not be deleted, which will consume additional disk space in your index. If you take a snapshot at a particularly bad time (say just before you call ForceMerge(Int32) ) then in the worst case this could consume an extra 1X of your total index size, until you release the snapshot. Declaration public virtual IndexCommit Snapshot() Returns Type Description IndexCommit the IndexCommit that was snapshotted. Exceptions Type Condition System.InvalidOperationException if this index does not have any commits yet Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.AutomatonQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.AutomatonQuery.html",
    "title": "Class AutomatonQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AutomatonQuery A Query that will match terms against a finite-state machine. This query will match documents that contain terms accepted by a given finite-state machine. The automaton can be constructed with the Lucene.Net.Util.Automaton API. Alternatively, it can be created from a regular expression with RegexpQuery or from the standard Lucene wildcard syntax with WildcardQuery . When the query is executed, it will create an equivalent DFA of the finite-state machine, and will enumerate the term dictionary in an intelligent way to reduce the number of comparisons. For example: the regular expression of [dl]og? will make approximately four comparisons: do, dog, lo, and log. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query MultiTermQuery AutomatonQuery RegexpQuery WildcardQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class AutomatonQuery : MultiTermQuery Constructors | Improve this Doc View Source AutomatonQuery(Term, Automaton) Create a new AutomatonQuery from an Automaton . Declaration public AutomatonQuery(Term term, Automaton automaton) Parameters Type Name Description Term term Term containing field and possibly some pattern structure. The term text is ignored. Automaton automaton Automaton to run, terms that are accepted are considered a match. Fields | Improve this Doc View Source m_automaton The automaton to match index terms against Declaration protected readonly Automaton m_automaton Field Value Type Description Automaton | Improve this Doc View Source m_compiled Declaration protected readonly CompiledAutomaton m_compiled Field Value Type Description CompiledAutomaton | Improve this Doc View Source m_term Term containing the field, and possibly some pattern structure Declaration protected readonly Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Automaton Returns the automaton used to create this query Declaration public virtual Automaton Automaton { get; } Property Value Type Description Automaton Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BitsFilteredDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BitsFilteredDocIdSet.html",
    "title": "Class BitsFilteredDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BitsFilteredDocIdSet This implementation supplies a filtered DocIdSet , that excludes all docids which are not in a IBits instance. This is especially useful in Filter to apply the Lucene.Net.Search.BitsFilteredDocIdSet.acceptDocs passed to GetDocIdSet(AtomicReaderContext, IBits) before returning the final DocIdSet . Inheritance System.Object DocIdSet FilteredDocIdSet BitsFilteredDocIdSet Inherited Members FilteredDocIdSet.IsCacheable FilteredDocIdSet.Bits FilteredDocIdSet.GetIterator() DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class BitsFilteredDocIdSet : FilteredDocIdSet Constructors | Improve this Doc View Source BitsFilteredDocIdSet(DocIdSet, IBits) Constructor. Declaration public BitsFilteredDocIdSet(DocIdSet innerSet, IBits acceptDocs) Parameters Type Name Description DocIdSet innerSet Underlying DocIdSet IBits acceptDocs Allowed docs, all docids not in this set will not be returned by this DocIdSet Methods | Improve this Doc View Source Match(Int32) Declaration protected override bool Match(int docid) Parameters Type Name Description System.Int32 docid Returns Type Description System.Boolean Overrides FilteredDocIdSet.Match(Int32) | Improve this Doc View Source Wrap(DocIdSet, IBits) Convenience wrapper method: If acceptDocs == null it returns the original set without wrapping. Declaration public static DocIdSet Wrap(DocIdSet set, IBits acceptDocs) Parameters Type Name Description DocIdSet set Underlying DocIdSet. If null , this method returns null IBits acceptDocs Allowed docs, all docids not in this set will not be returned by this DocIdSet . If null , this method returns the original set without wrapping. Returns Type Description DocIdSet Extension Methods Number.IsNumber(Object) See Also DocIdSet Filter"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanClause.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanClause.html",
    "title": "Class BooleanClause | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanClause A clause in a BooleanQuery . Inheritance System.Object BooleanClause Implements System.IEquatable < BooleanClause > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class BooleanClause : IEquatable<BooleanClause> Constructors | Improve this Doc View Source BooleanClause(Query, Occur) Constructs a BooleanClause . Declaration public BooleanClause(Query query, Occur occur) Parameters Type Name Description Query query Occur occur Properties | Improve this Doc View Source IsProhibited Declaration public virtual bool IsProhibited { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsRequired Declaration public virtual bool IsRequired { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Occur Declaration public virtual Occur Occur { get; set; } Property Value Type Description Occur | Improve this Doc View Source Query Declaration public virtual Query Query { get; set; } Property Value Type Description Query Methods | Improve this Doc View Source Equals(BooleanClause) Declaration public bool Equals(BooleanClause other) Parameters Type Name Description BooleanClause other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(Occur) Declaration public static string ToString(Occur occur) Parameters Type Name Description Occur occur Returns Type Description System.String Implements System.IEquatable<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.BooleanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.BooleanWeight.html",
    "title": "Class BooleanQuery.BooleanWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQuery.BooleanWeight Expert: the Weight for BooleanQuery , used to normalize, score and explain these queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Weight BooleanQuery.BooleanWeight Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class BooleanWeight : Weight Constructors | Improve this Doc View Source BooleanWeight(BooleanQuery, IndexSearcher, Boolean) Declaration public BooleanWeight(BooleanQuery outerInstance, IndexSearcher searcher, bool disableCoord) Parameters Type Name Description BooleanQuery outerInstance IndexSearcher searcher System.Boolean disableCoord Fields | Improve this Doc View Source m_maxCoord Declaration protected int m_maxCoord Field Value Type Description System.Int32 | Improve this Doc View Source m_similarity The Similarity implementation. Declaration protected Similarity m_similarity Field Value Type Description Similarity | Improve this Doc View Source m_weights Declaration protected List<Weight> m_weights Field Value Type Description System.Collections.Generic.List < Weight > Properties | Improve this Doc View Source MaxCoord Declaration public int MaxCoord { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query | Improve this Doc View Source ScoresDocsOutOfOrder Declaration public override bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Weight.ScoresDocsOutOfOrder | Improve this Doc View Source Similarity Declaration public Similarity Similarity { get; } Property Value Type Description Similarity Methods | Improve this Doc View Source Coord(Int32, Int32) Declaration public virtual float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap System.Int32 maxOverlap Returns Type Description System.Single | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Declaration public override BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context System.Boolean scoreDocsInOrder IBits acceptDocs Returns Type Description BulkScorer Overrides Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantScorer.html",
    "title": "Class ConstantScoreQuery.ConstantScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer ConstantScoreQuery.ConstantScorer Inherited Members Scorer.m_weight Scorer.Weight DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class ConstantScorer : Scorer Constructors | Improve this Doc View Source ConstantScorer(ConstantScoreQuery, DocIdSetIterator, Weight, Single) Declaration public ConstantScorer(ConstantScoreQuery outerInstance, DocIdSetIterator docIdSetIterator, Weight w, float theScore) Parameters Type Name Description ConstantScoreQuery outerInstance DocIdSetIterator docIdSetIterator Weight w System.Single theScore Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetChildren() Declaration public override ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description System.Collections.Generic.ICollection < Scorer.ChildScorer > Overrides Scorer.GetChildren() | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.ConstantWeight.html",
    "title": "Class ConstantScoreQuery.ConstantWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQuery.ConstantWeight Inheritance System.Object Weight ConstantScoreQuery.ConstantWeight Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class ConstantWeight : Weight Constructors | Improve this Doc View Source ConstantWeight(ConstantScoreQuery, IndexSearcher) Declaration public ConstantWeight(ConstantScoreQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description ConstantScoreQuery outerInstance IndexSearcher searcher Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query | Improve this Doc View Source ScoresDocsOutOfOrder Declaration public override bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Weight.ScoresDocsOutOfOrder Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Declaration public override BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context System.Boolean scoreDocsInOrder IBits acceptDocs Returns Type Description BulkScorer Overrides Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ConstantScoreQuery.html",
    "title": "Class ConstantScoreQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstantScoreQuery A query that wraps another query or a filter and simply returns a constant score equal to the query boost for every document that matches the filter or query. For queries it therefore simply strips of all scores and returns a constant one. Inheritance System.Object Query ConstantScoreQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ConstantScoreQuery : Query Constructors | Improve this Doc View Source ConstantScoreQuery(Filter) Wraps a Filter as a Query . The hits will get a constant score dependent on the boost factor of this query. If you simply want to strip off scores from a Query , no longer use new ConstantScoreQuery(new QueryWrapperFilter(query)) , instead use ConstantScoreQuery(Query) ! Declaration public ConstantScoreQuery(Filter filter) Parameters Type Name Description Filter filter | Improve this Doc View Source ConstantScoreQuery(Query) Strips off scores from the passed in Query . The hits will get a constant score dependent on the boost factor of this query. Declaration public ConstantScoreQuery(Query query) Parameters Type Name Description Query query Fields | Improve this Doc View Source m_filter Declaration protected readonly Filter m_filter Field Value Type Description Filter | Improve this Doc View Source m_query Declaration protected readonly Query m_query Field Value Type Description Query Properties | Improve this Doc View Source Filter Returns the encapsulated filter, returns null if a query is wrapped. Declaration public virtual Filter Filter { get; } Property Value Type Description Filter | Improve this Doc View Source Query Returns the encapsulated query, returns null if a filter is wrapped. Declaration public virtual Query Query { get; } Property Value Type Description Query Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ControlledRealTimeReopenThread-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ControlledRealTimeReopenThread-1.html",
    "title": "Class ControlledRealTimeReopenThread<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ControlledRealTimeReopenThread<T> Utility class that runs a thread to manage periodic reopens of a ReferenceManager<G> , with methods to wait for a specific index changes to become visible. To use this class you must first wrap your IndexWriter with a TrackingIndexWriter and always use it to make changes to the index, saving the returned generation. Then, when a given search request needs to see a specific index change, call the WaitForGeneration(Int64) to wait for that change to be visible. Note that this will only scale well if most searches do not need to wait for a specific index generation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ThreadClass ControlledRealTimeReopenThread<T> Implements IThreadRunnable System.IDisposable Inherited Members ThreadClass.SafeRun(ThreadStart) ThreadClass.Start() ThreadClass.Interrupt() ThreadClass.Instance ThreadClass.Name ThreadClass.SetDaemon(Boolean) ThreadClass.IsAlive ThreadClass.IsBackground ThreadClass.IsDebug ThreadClass.Join() ThreadClass.Join(Int64) ThreadClass.Join(Int64, Int32) ThreadClass.Resume() ThreadClass.Suspend() ThreadClass.ToString() ThreadClass.CurrentThread() ThreadClass.Sleep(Int64) ThreadClass.Current() ThreadClass.Equals(Object) ThreadClass.GetHashCode() ThreadClass.State System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ControlledRealTimeReopenThread<T> : ThreadClass, IThreadRunnable, IDisposable where T : class Type Parameters Name Description T Constructors | Improve this Doc View Source ControlledRealTimeReopenThread(TrackingIndexWriter, ReferenceManager<T>, Double, Double) Create ControlledRealTimeReopenThread<T> , to periodically reopen the a ReferenceManager<G> . Declaration public ControlledRealTimeReopenThread(TrackingIndexWriter writer, ReferenceManager<T> manager, double targetMaxStaleSec, double targetMinStaleSec) Parameters Type Name Description TrackingIndexWriter writer ReferenceManager <T> manager System.Double targetMaxStaleSec Maximum time until a new reader must be opened; this sets the upper bound on how slowly reopens may occur, when no caller is waiting for a specific generation to become visible. System.Double targetMinStaleSec Mininum time until a new reader can be opened; this sets the lower bound on how quickly reopens may occur, when a caller is waiting for a specific generation to become visible. Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Run() Declaration public override void Run() Overrides ThreadClass.Run() | Improve this Doc View Source WaitForGeneration(Int64) Waits for the target generation to become visible in the searcher. If the current searcher is older than the target generation, this method will block until the searcher is reopened, by another via MaybeRefresh() or until the ReferenceManager<G> is closed. Declaration public virtual void WaitForGeneration(long targetGen) Parameters Type Name Description System.Int64 targetGen The generation to wait for | Improve this Doc View Source WaitForGeneration(Int64, Int32) Waits for the target generation to become visible in the searcher, up to a maximum specified milli-seconds. If the current searcher is older than the target generation, this method will block until the searcher has been reopened by another thread via MaybeRefresh() , the given waiting time has elapsed, or until the ReferenceManager<G> is closed. NOTE: if the waiting time elapses before the requested target generation is available the current SearcherManager is returned instead. Declaration public virtual bool WaitForGeneration(long targetGen, int maxMS) Parameters Type Name Description System.Int64 targetGen The generation to wait for System.Int32 maxMS Maximum milliseconds to wait, or -1 to wait indefinitely Returns Type Description System.Boolean true if the targetGen is now available, or false if maxMS wait time was exceeded Implements IThreadRunnable System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.ListOfOutputs-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.ListOfOutputs-1.html",
    "title": "Class ListOfOutputs<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ListOfOutputs<T> Wraps another Outputs implementation and encodes one or more of its output values. You can use this when a single input may need to map to more than one output, maintaining order: pass the same input with a different output by calling Add(Int32sRef, T) multiple times. The builder will then combine the outputs using the Merge(T, T) method. The resulting FST may not be minimal when an input has more than one output, as this requires pushing all multi-output values to a final state. NOTE: the only way to create multiple outputs is to add the same input to the FST multiple times in a row. This is how the FST maps a single input to multiple outputs (e.g. you cannot pass a List<Object> to Add(Int32sRef, T) ). If your outputs are longs, and you need at most 2, then use UpToTwoPositiveInt64Outputs instead since it stores the outputs more compactly (by stealing a bit from each long value). NOTE: this cannot wrap itself (ie you cannot make an FST with List<List<Object>> outputs using this). @lucene.experimental Inheritance System.Object Outputs < System.Object > ListOfOutputs<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class ListOfOutputs<T> : Outputs<object> Type Parameters Name Description T Constructors | Improve this Doc View Source ListOfOutputs(Outputs<T>) Declaration public ListOfOutputs(Outputs<T> outputs) Parameters Type Name Description Outputs <T> outputs Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source AsList(Object) Declaration public IList<T> AsList(object output) Parameters Type Name Description System.Object output Returns Type Description System.Collections.Generic.IList <T> | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source ReadFinalOutput(DataInput) Declaration public override object ReadFinalOutput(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.ReadFinalOutput(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object object, object inc) Parameters Type Name Description System.Object object System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput) | Improve this Doc View Source WriteFinalOutput(Object, DataOutput) Declaration public override void WriteFinalOutput(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.WriteFinalOutput(System.Object, Lucene.Net.Store.DataOutput) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.NoOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.NoOutputs.html",
    "title": "Class NoOutputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoOutputs A null FST Outputs<T> implementation; use this if you just want to build an FSA. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Object > NoOutputs Inherited Members Outputs<Object>.WriteFinalOutput(Object, DataOutput) Outputs<Object>.ReadFinalOutput(DataInput) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class NoOutputs : Outputs<object> Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput | Improve this Doc View Source Singleton Declaration public static NoOutputs Singleton { get; } Property Value Type Description NoOutputs Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object output, object inc) Parameters Type Name Description System.Object output System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object prefix, DataOutput out) Parameters Type Name Description System.Object prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PairOutputs-2.html",
    "title": "Class PairOutputs<A, B> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PairOutputs<A, B> An FST Outputs<T> implementation, holding two other outputs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < PairOutputs.Pair <>> PairOutputs<A, B> Inherited Members Outputs<PairOutputs<A, B>.Pair>.WriteFinalOutput(PairOutputs.Pair<>, DataOutput) Outputs<PairOutputs<A, B>.Pair>.ReadFinalOutput(DataInput) Outputs<PairOutputs<A, B>.Pair>.Merge(PairOutputs.Pair<>, PairOutputs.Pair<>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class PairOutputs<A, B> : Outputs<PairOutputs<A, B>.Pair> Type Parameters Name Description A B Constructors | Improve this Doc View Source PairOutputs(Outputs<A>, Outputs<B>) Declaration public PairOutputs(Outputs<A> outputs1, Outputs<B> outputs2) Parameters Type Name Description Outputs <A> outputs1 Outputs <B> outputs2 Properties | Improve this Doc View Source NoOutput Declaration public override PairOutputs<A, B>.Pair NoOutput { get; } Property Value Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.NoOutput Methods | Improve this Doc View Source Add(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Add(PairOutputs<A, B>.Pair prefix, PairOutputs<A, B>.Pair output) Parameters Type Name Description PairOutputs.Pair <> prefix PairOutputs.Pair <> output Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Add(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source Common(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Common(PairOutputs<A, B>.Pair pair1, PairOutputs<A, B>.Pair pair2) Parameters Type Name Description PairOutputs.Pair <> pair1 PairOutputs.Pair <> pair2 Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Common(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source NewPair(A, B) Create a new PairOutputs<A, B>.Pair Declaration public virtual PairOutputs<A, B>.Pair NewPair(A a, B b) Parameters Type Name Description A a B b Returns Type Description PairOutputs.Pair <> | Improve this Doc View Source OutputToString(PairOutputs<A, B>.Pair) Declaration public override string OutputToString(PairOutputs<A, B>.Pair output) Parameters Type Name Description PairOutputs.Pair <> output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.OutputToString(Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source Read(DataInput) Declaration public override PairOutputs<A, B>.Pair Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(PairOutputs<A, B>.Pair, PairOutputs<A, B>.Pair) Declaration public override PairOutputs<A, B>.Pair Subtract(PairOutputs<A, B>.Pair output, PairOutputs<A, B>.Pair inc) Parameters Type Name Description PairOutputs.Pair <> output PairOutputs.Pair <> inc Returns Type Description PairOutputs.Pair <> Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Subtract(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Util.Fst.PairOutputs.Pair<>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Write(PairOutputs<A, B>.Pair, DataOutput) Declaration public override void Write(PairOutputs<A, B>.Pair output, DataOutput writer) Parameters Type Name Description PairOutputs.Pair <> output DataOutput writer Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Fst.PairOutputs<A, B>.Pair>.Write(Lucene.Net.Util.Fst.PairOutputs.Pair<>, Lucene.Net.Store.DataOutput) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.PositiveInt32Outputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.PositiveInt32Outputs.html",
    "title": "Class PositiveInt32Outputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositiveInt32Outputs An FST Outputs<T> implementation where each output is a non-negative value. NOTE: This was PositiveIntOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Nullable < System.Int64 >> PositiveInt32Outputs Inherited Members Outputs<Nullable<Int64>>.WriteFinalOutput(Nullable<Int64>, DataOutput) Outputs<Nullable<Int64>>.ReadFinalOutput(DataInput) Outputs<Nullable<Int64>>.Merge(Nullable<Int64>, Nullable<Int64>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class PositiveInt32Outputs : Outputs<long?> Properties | Improve this Doc View Source NoOutput Declaration public override long? NoOutput { get; } Property Value Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.NoOutput | Improve this Doc View Source Singleton Declaration public static PositiveInt32Outputs Singleton { get; } Property Value Type Description PositiveInt32Outputs Methods | Improve this Doc View Source Add(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Add(long? prefix, long? output) Parameters Type Name Description System.Nullable < System.Int64 > prefix System.Nullable < System.Int64 > output Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Add(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source Common(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Common(long? output1, long? output2) Parameters Type Name Description System.Nullable < System.Int64 > output1 System.Nullable < System.Int64 > output2 Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Common(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source OutputToString(Nullable<Int64>) Declaration public override string OutputToString(long? output) Parameters Type Name Description System.Nullable < System.Int64 > output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.OutputToString(System.Nullable<System.Int64>) | Improve this Doc View Source Read(DataInput) Declaration public override long? Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Nullable<Int64>, Nullable<Int64>) Declaration public override long? Subtract(long? output, long? inc) Parameters Type Name Description System.Nullable < System.Int64 > output System.Nullable < System.Int64 > inc Returns Type Description System.Nullable < System.Int64 > Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Subtract(System.Nullable<System.Int64>, System.Nullable<System.Int64>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Write(Nullable<Int64>, DataOutput) Declaration public override void Write(long? output, DataOutput out) Parameters Type Name Description System.Nullable < System.Int64 > output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Nullable<System.Int64>>.Write(System.Nullable<System.Int64>, Lucene.Net.Store.DataOutput) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.UpToTwoPositiveInt64Outputs.html",
    "title": "Class UpToTwoPositiveInt64Outputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpToTwoPositiveInt64Outputs An FST Outputs<T> implementation where each output is one or two non-negative long values. If it's a System.Single output, System.Nullable<T> is returned; else, TwoLongs. Order is preserved in the TwoLongs case, ie .first is the first input/output added to Builder<T> , and .second is the second. You cannot store 0 output with this (that's reserved to mean \"no output\")! NOTE: the only way to create a TwoLongs output is to add the same input to the FST twice in a row. This is how the FST maps a single input to two outputs (e.g. you cannot pass a UpToTwoPositiveInt64Outputs.TwoInt64s to Add(Int32sRef, T) . If you need more than two then use ListOfOutputs<T> , but if you only have at most 2 then this implementation will require fewer bytes as it steals one bit from each long value. NOTE: the resulting FST is not guaranteed to be minimal! See Builder<T> . NOTE: This was UpToTwoPositiveIntOutputs in Lucene - the data type (int) was wrong there - it should have been long This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < System.Object > UpToTwoPositiveInt64Outputs Inherited Members Outputs<Object>.WriteFinalOutput(Object, DataOutput) Outputs<Object>.ReadFinalOutput(DataInput) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.Misc.dll Syntax public sealed class UpToTwoPositiveInt64Outputs : Outputs<object> Properties | Improve this Doc View Source NoOutput Declaration public override object NoOutput { get; } Property Value Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.NoOutput Methods | Improve this Doc View Source Add(Object, Object) Declaration public override object Add(object prefix, object output) Parameters Type Name Description System.Object prefix System.Object output Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Add(System.Object, System.Object) | Improve this Doc View Source Common(Object, Object) Declaration public override object Common(object output1, object output2) Parameters Type Name Description System.Object output1 System.Object output2 Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Common(System.Object, System.Object) | Improve this Doc View Source Get(Int64) Declaration public long? Get(long v) Parameters Type Name Description System.Int64 v Returns Type Description System.Nullable < System.Int64 > | Improve this Doc View Source Get(Int64, Int64) Declaration public UpToTwoPositiveInt64Outputs.TwoInt64s Get(long first, long second) Parameters Type Name Description System.Int64 first System.Int64 second Returns Type Description UpToTwoPositiveInt64Outputs.TwoInt64s | Improve this Doc View Source GetSingleton(Boolean) Declaration public static UpToTwoPositiveInt64Outputs GetSingleton(bool doShare) Parameters Type Name Description System.Boolean doShare Returns Type Description UpToTwoPositiveInt64Outputs | Improve this Doc View Source Merge(Object, Object) Declaration public override object Merge(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Merge(System.Object, System.Object) | Improve this Doc View Source OutputToString(Object) Declaration public override string OutputToString(object output) Parameters Type Name Description System.Object output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.OutputToString(System.Object) | Improve this Doc View Source Read(DataInput) Declaration public override object Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Object, Object) Declaration public override object Subtract(object output, object inc) Parameters Type Name Description System.Object output System.Object inc Returns Type Description System.Object Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Subtract(System.Object, System.Object) | Improve this Doc View Source Write(Object, DataOutput) Declaration public override void Write(object output, DataOutput out) Parameters Type Name Description System.Object output DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<System.Object>.Write(System.Object, Lucene.Net.Store.DataOutput) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopResults-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Util.TopResults-1.html",
    "title": "Class Util.TopResults<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Util.TopResults<T> Holds the results for a top N search using Util.TopNSearcher<T> Inheritance System.Object Util.TopResults<T> Implements System.Collections.Generic.IEnumerable < Util.Result <T>> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class TopResults<T> : IEnumerable<Util.Result<T>>, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source IsComplete true iff this is a complete result ie. if the specified queue size was large enough to find the complete list of results. this might be false if the Util.TopNSearcher<T> rejected too many results. Declaration public bool IsComplete { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TopN The top results Declaration public IList<Util.Result<T>> TopN { get; } Property Value Type Description System.Collections.Generic.IList < Util.Result <T>> Methods | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<Util.Result<T>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Util.Result <T>> Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.GrowableByteArrayDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.GrowableByteArrayDataOutput.html",
    "title": "Class GrowableByteArrayDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GrowableByteArrayDataOutput A DataOutput that can be used to build a byte[] . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataOutput GrowableByteArrayDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class GrowableByteArrayDataOutput : DataOutput Constructors | Improve this Doc View Source GrowableByteArrayDataOutput(Int32) Create a GrowableByteArrayDataOutput with the given initial capacity. Declaration public GrowableByteArrayDataOutput(int cp) Parameters Type Name Description System.Int32 cp Properties | Improve this Doc View Source Bytes The bytes Declaration public byte[] Bytes { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Length The length Declaration public int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int off, int len) Parameters Type Name Description System.Byte [] b System.Int32 off System.Int32 len Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.TextWriterInfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.TextWriterInfoStream.html",
    "title": "Class TextWriterInfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TextWriterInfoStream InfoStream implementation over a System.IO.TextWriter such as System.Console.Out . NOTE: This is analogous to PrintStreamInfoStream in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InfoStream TextWriterInfoStream PrintStreamInfoStream Implements System.IDisposable Inherited Members InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class TextWriterInfoStream : InfoStream, IDisposable Constructors | Improve this Doc View Source TextWriterInfoStream(TextWriter) Declaration public TextWriterInfoStream(TextWriter stream) Parameters Type Name Description System.IO.TextWriter stream | Improve this Doc View Source TextWriterInfoStream(TextWriter, Int32) Declaration public TextWriterInfoStream(TextWriter stream, int messageID) Parameters Type Name Description System.IO.TextWriter stream System.Int32 messageID Fields | Improve this Doc View Source m_messageID Declaration protected readonly int m_messageID Field Value Type Description System.Int32 | Improve this Doc View Source m_stream Declaration protected readonly TextWriter m_stream Field Value Type Description System.IO.TextWriter Properties | Improve this Doc View Source IsSystemStream Declaration public virtual bool IsSystemStream { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides InfoStream.Dispose(Boolean) | Improve this Doc View Source IsEnabled(String) Declaration public override bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean Overrides InfoStream.IsEnabled(String) | Improve this Doc View Source Message(String, String) Declaration public override void Message(string component, string message) Parameters Type Name Description System.String component System.String message Overrides InfoStream.Message(String, String) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.TimSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.TimSorter.html",
    "title": "Class TimSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimSorter Sorter implementation based on the TimSort algorithm. This implementation is especially good at sorting partially-sorted arrays and sorts small arrays with binary sort. NOTE :There are a few differences with the original implementation: The extra amount of memory to perform merges is configurable. This allows small merges to be very fast while large merges will be performed in-place (slightly slower). You can make sure that the fast merge routine will always be used by having maxTempSlots equal to half of the length of the slice of data to sort. Only the fast merge routine can gallop (the one that doesn't run in-place) and it only gallops on the longest slice. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter TimSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class TimSorter : Sorter Constructors | Improve this Doc View Source TimSorter(Int32) Create a new TimSorter . Declaration protected TimSorter(int maxTempSlots) Parameters Type Name Description System.Int32 maxTempSlots The maximum amount of extra memory to run merges Methods | Improve this Doc View Source CompareSaved(Int32, Int32) Compare element i from the temporary storage with element j from the slice to sort, similarly to Compare(Int32, Int32) . Declaration protected abstract int CompareSaved(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source Copy(Int32, Int32) Copy data from slot src to slot dest >. Declaration protected abstract void Copy(int src, int dest) Parameters Type Name Description System.Int32 src System.Int32 dest | Improve this Doc View Source Restore(Int32, Int32) Restore element j from the temporary storage into slot i . Declaration protected abstract void Restore(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j | Improve this Doc View Source Save(Int32, Int32) Save all elements between slots i and i + len into the temporary storage. Declaration protected abstract void Save(int i, int len) Parameters Type Name Description System.Int32 i System.Int32 len | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.Builder.html",
    "title": "Class WAH8DocIdSet.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WAH8DocIdSet.Builder A builder for WAH8DocIdSet s. Inheritance System.Object WAH8DocIdSet.WordBuilder WAH8DocIdSet.Builder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Builder : WAH8DocIdSet.WordBuilder Constructors | Improve this Doc View Source Builder() Sole constructor Declaration public Builder() Methods | Improve this Doc View Source Add(DocIdSetIterator) Add the content of the provided DocIdSetIterator . Declaration public WAH8DocIdSet.Builder Add(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi Returns Type Description WAH8DocIdSet.Builder | Improve this Doc View Source Add(Int32) Add a document to this builder. Documents must be added in order. Declaration public WAH8DocIdSet.Builder Add(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description WAH8DocIdSet.Builder | Improve this Doc View Source Build() Declaration public override WAH8DocIdSet Build() Returns Type Description WAH8DocIdSet Overrides WAH8DocIdSet.WordBuilder.Build() | Improve this Doc View Source SetIndexInterval(Int32) Declaration public override object SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description System.Object Overrides WAH8DocIdSet.WordBuilder.SetIndexInterval(Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WAH8DocIdSet.html",
    "title": "Class WAH8DocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WAH8DocIdSet DocIdSet implementation based on word-aligned hybrid encoding on words of 8 bits. This implementation doesn't support random-access but has a fast DocIdSetIterator which can advance in logarithmic time thanks to an index. The compression scheme is simplistic and should work well with sparse and very dense doc id sets while being only slightly larger than a FixedBitSet for incompressible sets (overhead<2% in the worst case) in spite of the index. Format : The format is byte-aligned. An 8-bits word is either clean, meaning composed only of zeros or ones, or dirty, meaning that it contains between 1 and 7 bits set. The idea is to encode sequences of clean words using run-length encoding and to leave sequences of dirty words as-is. TokenClean length+Dirty length+Dirty words 1 byte0-n bytes0-n bytes0-n bytes Token encodes whether clean means full of zeros or ones in the first bit, the number of clean words minus 2 on the next 3 bits and the number of dirty words on the last 4 bits. The higher-order bit is a continuation bit, meaning that the number is incomplete and needs additional bytes to be read. Clean length+ : If clean length has its higher-order bit set, you need to read a vint ( ReadVInt32() ), shift it by 3 bits on the left side and add it to the 3 bits which have been read in the token. Dirty length+ works the same way as Clean length+ but on 4 bits and for the length of dirty words. Dirty words are the dirty words, there are Dirty length of them. This format cannot encode sequences of less than 2 clean words and 0 dirty word. The reason is that if you find a single clean word, you should rather encode it as a dirty word. This takes the same space as starting a new sequence (since you need one byte for the token) but will be lighter to decode. There is however an exception for the first sequence. Since the first sequence may start directly with a dirty word, the clean length is encoded directly, without subtracting 2. There is an additional restriction on the format: the sequence of dirty words is not allowed to contain two consecutive clean words. This restriction exists to make sure no space is wasted and to make sure iterators can read the next doc ID by reading at most 2 dirty words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSet WAH8DocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class WAH8DocIdSet : DocIdSet Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL Default index interval. Declaration public const int DEFAULT_INDEX_INTERVAL = 24 Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsCacheable Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source Cardinality() Return the number of documents in this DocIdSet in constant time. Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source Intersect(ICollection<WAH8DocIdSet>) Same as Intersect(ICollection<WAH8DocIdSet>, Int32) with the default index interval. Declaration public static WAH8DocIdSet Intersect(ICollection<WAH8DocIdSet> docIdSets) Parameters Type Name Description System.Collections.Generic.ICollection < WAH8DocIdSet > docIdSets Returns Type Description WAH8DocIdSet | Improve this Doc View Source Intersect(ICollection<WAH8DocIdSet>, Int32) Compute the intersection of the provided sets. This method is much faster than computing the intersection manually since it operates directly at the byte level. Declaration public static WAH8DocIdSet Intersect(ICollection<WAH8DocIdSet> docIdSets, int indexInterval) Parameters Type Name Description System.Collections.Generic.ICollection < WAH8DocIdSet > docIdSets System.Int32 indexInterval Returns Type Description WAH8DocIdSet | Improve this Doc View Source RamBytesUsed() Return the memory usage of this class in bytes. Declaration public long RamBytesUsed() Returns Type Description System.Int64 | Improve this Doc View Source Union(ICollection<WAH8DocIdSet>) Same as Union(ICollection<WAH8DocIdSet>, Int32) with the default index interval. Declaration public static WAH8DocIdSet Union(ICollection<WAH8DocIdSet> docIdSets) Parameters Type Name Description System.Collections.Generic.ICollection < WAH8DocIdSet > docIdSets Returns Type Description WAH8DocIdSet | Improve this Doc View Source Union(ICollection<WAH8DocIdSet>, Int32) Compute the union of the provided sets. This method is much faster than computing the union manually since it operates directly at the byte level. Declaration public static WAH8DocIdSet Union(ICollection<WAH8DocIdSet> docIdSets, int indexInterval) Parameters Type Name Description System.Collections.Generic.ICollection < WAH8DocIdSet > docIdSets System.Int32 indexInterval Returns Type Description WAH8DocIdSet Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.WeakIdentityMap-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.WeakIdentityMap-2.html",
    "title": "Class WeakIdentityMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WeakIdentityMap<TKey, TValue> Implements a combination of java.util.WeakHashMap and java.util.IdentityHashMap . Useful for caches that need to key off of a == comparison instead of a .Equals(object) . This class is not a general-purpose System.Collections.Generic.IDictionary<TKey, TValue> implementation! It intentionally violates System.Collections.Generic.IDictionary<TKey, TValue> 's general contract, which mandates the use of the System.Object.Equals(System.Object) method when comparing objects. This class is designed for use only in the rare cases wherein reference-equality semantics are required. This implementation was forked from Apache CXF but modified to not implement the System.Collections.Generic.IDictionary<TKey, TValue> interface and without any set views on it, as those are error-prone and inefficient, if not implemented carefully. The map only contains System.Collections.Generic.IEnumerable<T>.GetEnumerator() implementations on the values and not-GCed keys. Lucene's implementation also supports null keys, but those are never weak! The map supports two modes of operation: reapOnRead = true : This behaves identical to a java.util.WeakHashMap where it also cleans up the reference queue on every read operation ( Get(Object) , ContainsKey(Object) , Count , GetValueEnumerator() ), freeing map entries of already GCed keys. reapOnRead = false : This mode does not call Reap() on every read operation. In this case, the reference queue is only cleaned up on write operations (like Put(TKey, TValue) ). This is ideal for maps with few entries where the keys are unlikely be garbage collected, but there are lots of Get(Object) operations. The code can still call Reap() to manually clean up the queue without doing a write operation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object WeakIdentityMap<TKey, TValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class WeakIdentityMap<TKey, TValue> where TKey : class Type Parameters Name Description TKey TValue Properties | Improve this Doc View Source Count Returns the number of key-value mappings in this map. This result is a snapshot, and may not reflect unprocessed entries that will be removed before next attempted access because they are no longer referenced. NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsEmpty Returns true if this map contains no key-value mappings. Declaration public bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Keys Gets an System.Collections.Generic.IEnumerable<T> object containing the keys of the WeakIdentityMap<TKey, TValue> . Declaration public IEnumerable<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TKey> | Improve this Doc View Source Values Gets an System.Collections.Generic.IEnumerable<T> object containing the values of the WeakIdentityMap<TKey, TValue> . Declaration public IEnumerable<TValue> Values { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TValue> Methods | Improve this Doc View Source Clear() Removes all of the mappings from this map. Declaration public void Clear() | Improve this Doc View Source ContainsKey(Object) Returns true if this map contains a mapping for the specified key. Declaration public bool ContainsKey(object key) Parameters Type Name Description System.Object key Returns Type Description System.Boolean | Improve this Doc View Source Get(Object) Returns the value to which the specified key is mapped. Declaration public TValue Get(object key) Parameters Type Name Description System.Object key Returns Type Description TValue | Improve this Doc View Source GetValueEnumerator() Returns an iterator over all values of this map. This iterator may return values whose key is already garbage collected while iterator is consumed, especially if Lucene.Net.Util.WeakIdentityMap`2.reapOnRead is false . NOTE: This was valueIterator() in Lucene. Declaration public IEnumerator<TValue> GetValueEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <TValue> | Improve this Doc View Source NewConcurrentHashMap() Creates a new WeakIdentityMap<TKey, TValue> based on a System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue> . The map cleans up the reference queue on every read operation . Declaration public static WeakIdentityMap<TKey, TValue> NewConcurrentHashMap() Returns Type Description WeakIdentityMap <TKey, TValue> | Improve this Doc View Source NewConcurrentHashMap(Boolean) Creates a new WeakIdentityMap<TKey, TValue> based on a System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue> . Declaration public static WeakIdentityMap<TKey, TValue> NewConcurrentHashMap(bool reapOnRead) Parameters Type Name Description System.Boolean reapOnRead controls if the map cleans up the reference queue on every read operation . Returns Type Description WeakIdentityMap <TKey, TValue> | Improve this Doc View Source NewHashMap() Creates a new WeakIdentityMap<TKey, TValue> based on a non-synchronized System.Collections.Generic.Dictionary`2 . The map cleans up the reference queue on every read operation . Declaration public static WeakIdentityMap<TKey, TValue> NewHashMap() Returns Type Description WeakIdentityMap <TKey, TValue> | Improve this Doc View Source NewHashMap(Boolean) Creates a new WeakIdentityMap<TKey, TValue> based on a non-synchronized System.Collections.Generic.Dictionary`2 . Declaration public static WeakIdentityMap<TKey, TValue> NewHashMap(bool reapOnRead) Parameters Type Name Description System.Boolean reapOnRead controls if the map cleans up the reference queue on every read operation . Returns Type Description WeakIdentityMap <TKey, TValue> | Improve this Doc View Source Put(TKey, TValue) Associates the specified value with the specified key in this map. If the map previously contained a mapping for this key, the old value is replaced. Declaration public TValue Put(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description TValue | Improve this Doc View Source Reap() This method manually cleans up the reference queue to remove all garbage collected key/value pairs from the map. Calling this method is not needed if reapOnRead = true . Otherwise it might be a good idea to call this method when there is spare time (e.g. from a background thread). Information about the reapOnRead setting Declaration public void Reap() | Improve this Doc View Source Remove(Object) Removes the mapping for a key from this weak hash map if it is present. Returns the value to which this map previously associated the key, or null if the map contained no mapping for the key. A return value of null does not necessarily indicate that the map contained. Declaration public bool Remove(object key) Parameters Type Name Description System.Object key Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.LikeThisQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.LikeThisQueryBuilder.html",
    "title": "Class LikeThisQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LikeThisQueryBuilder Builder for MoreLikeThisQuery Inheritance System.Object LikeThisQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class LikeThisQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source LikeThisQueryBuilder(Analyzer, String[]) Declaration public LikeThisQueryBuilder(Analyzer analyzer, string[] defaultFieldNames) Parameters Type Name Description Analyzer analyzer System.String [] defaultFieldNames Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.MatchAllDocsQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.MatchAllDocsQueryBuilder.html",
    "title": "Class MatchAllDocsQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQueryBuilder Builder for MatchAllDocsQuery Inheritance System.Object MatchAllDocsQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeFilterBuilder.html",
    "title": "Class NumericRangeFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeFilterBuilder Creates a NumericRangeFilter . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for NumericRangeFilter : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 If an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type , then the error will be silently ignored and the resulting filter will not match any documents. Inheritance System.Object NumericRangeFilterBuilder Implements IFilterBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeFilterBuilder : IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter | Improve this Doc View Source SetStrictMode(Boolean) Specifies how this NumericRangeFilterBuilder will handle errors. If this is set to true, GetFilter(XmlElement) will throw a ParserException if it is unable to parse the lowerTerm or upperTerm into the appropriate numeric type. If this is set to false, then this exception will be silently ignored and the resulting filter will not match any documents. Defaults to false. Declaration public void SetStrictMode(bool strictMode) Parameters Type Name Description System.Boolean strictMode Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.NumericRangeQueryBuilder.html",
    "title": "Class NumericRangeQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQueryBuilder Creates a NumericRangeQuery . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for NumericRangeQuery : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 A ParserException will be thrown if an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type . Inheritance System.Object NumericRangeQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.RangeFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.RangeFilterBuilder.html",
    "title": "Class RangeFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RangeFilterBuilder Builder for TermRangeFilter Inheritance System.Object RangeFilterBuilder Implements IFilterBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class RangeFilterBuilder : IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.html",
    "title": "Namespace Lucene.Net.Search.Grouping.Function | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping.Function Classes FunctionAllGroupHeadsCollector An implementation of AbstractAllGroupHeadsCollector for retrieving the most relevant groups when grouping by ValueSource . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionAllGroupHeadsCollector.GroupHead Holds current head document for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: Uses ValueSource and FunctionValues to retrieve the field values to group by. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionDistinctValuesCollector Function based implementation of AbstractDistinctValuesCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.Docs.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.Docs.html",
    "title": "Class FacetsCollector.Docs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsCollector.Docs Used during collection to record matching docs and then return a DocIdSet that contains them. Inheritance System.Object FacetsCollector.Docs Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax protected abstract class Docs Constructors | Improve this Doc View Source Docs() Sole constructor. Declaration public Docs() Properties | Improve this Doc View Source DocIdSet Return the DocIdSet which contains all the recorded docs. Declaration public abstract DocIdSet DocIdSet { get; } Property Value Type Description DocIdSet Methods | Improve this Doc View Source AddDoc(Int32) Record the given document. Declaration public abstract void AddDoc(int docId) Parameters Type Name Description System.Int32 docId"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Facets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Facets.html",
    "title": "Class Facets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Facets Common base class for all facets implementations. @lucene.experimental Inheritance System.Object Facets MultiFacets RangeFacetCounts SortedSetDocValuesFacetCounts TaxonomyFacets Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public abstract class Facets Constructors | Improve this Doc View Source Facets() Default constructor. Declaration public Facets() Methods | Improve this Doc View Source GetAllDims(Int32) Returns topN labels for any dimension that had hits, sorted by the number of hits that dimension matched; this is used for \"sparse\" faceting, where many different dimensions were indexed, for example depending on the type of document. Declaration public abstract IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > | Improve this Doc View Source GetSpecificValue(String, String[]) Return the count or value for a specific path. Returns -1 if this path doesn't exist, else the count. Declaration public abstract float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Returns the topN child labels under the specified path. Returns null if the specified path doesn't exist or if this dimension was never seen. Declaration public abstract FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html",
    "title": "Class FacetResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetResult Counts or aggregates for a single dimension. Inheritance System.Object FacetResult Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class FacetResult Constructors | Improve this Doc View Source FacetResult(String, String[], Int32, LabelAndValue[], Int32) Constructor for System.Int32 value . Makes the ToString() method print the value as an System.Int32 with no decimal. Declaration public FacetResult(string dim, string[] path, int value, LabelAndValue[] labelValues, int childCount) Parameters Type Name Description System.String dim System.String [] path System.Int32 value LabelAndValue [] labelValues System.Int32 childCount | Improve this Doc View Source FacetResult(String, String[], Single, LabelAndValue[], Int32) Constructor for System.Single value . Makes the ToString() method print the value as a System.Single with at least 1 number after the decimal. Declaration public FacetResult(string dim, string[] path, float value, LabelAndValue[] labelValues, int childCount) Parameters Type Name Description System.String dim System.String [] path System.Single value LabelAndValue [] labelValues System.Int32 childCount Properties | Improve this Doc View Source ChildCount How many child labels were encountered. Declaration public int ChildCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Dim Dimension that was requested. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source LabelValues Child counts. Declaration public LabelAndValue[] LabelValues { get; } Property Value Type Description LabelAndValue [] | Improve this Doc View Source Path Path whose children were requested. Declaration public string[] Path { get; } Property Value Type Description System.String [] | Improve this Doc View Source TypeOfValue The original data type of Value that was passed through the constructor. Declaration public Type TypeOfValue { get; } Property Value Type Description System.Type | Improve this Doc View Source Value Total value for this path (sum of all child counts, or sum of all child values), even those not included in the topN. Declaration public float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSidewaysResult.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSidewaysResult.html",
    "title": "Class DrillSidewaysResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DrillSidewaysResult Result of a drill sideways search, including the Facets and TopDocs . Inheritance System.Object DrillSidewaysResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class DrillSidewaysResult Constructors | Improve this Doc View Source DrillSidewaysResult(Facets, TopDocs) Sole constructor. Declaration public DrillSidewaysResult(Facets facets, TopDocs hits) Parameters Type Name Description Facets facets TopDocs hits Properties | Improve this Doc View Source Facets Combined drill down & sideways results. Declaration public Facets Facets { get; } Property Value Type Description Facets | Improve this Doc View Source Hits Hits. Declaration public TopDocs Hits { get; } Property Value Type Description TopDocs"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSideways.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.DrillSideways.html",
    "title": "Class DrillSideways | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DrillSideways Computes drill down and sideways counts for the provided DrillDownQuery . Drill sideways counts include alternative values/aggregates for the drill-down dimensions so that a dimension does not disappear after the user drills down into it. Use one of the static search methods to do the search, and then get the hits and facet results from the returned DrillSidewaysResult . NOTE : this allocates one FacetsCollector for each drill-down, plus one. If your index has high number of facet labels then this will multiply your memory usage. @lucene.experimental Inheritance System.Object DrillSideways Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class DrillSideways Constructors | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, SortedSetDocValuesReaderState) Create a new DrillSideways instance, assuming the categories were indexed with SortedSetDocValuesFacetField . Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, SortedSetDocValuesReaderState state) Parameters Type Name Description IndexSearcher searcher FacetsConfig config SortedSetDocValuesReaderState state | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, TaxonomyReader) Create a new DrillSideways instance. Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader) Parameters Type Name Description IndexSearcher searcher FacetsConfig config TaxonomyReader taxoReader | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, TaxonomyReader, SortedSetDocValuesReaderState) Create a new DrillSideways instance, where some dimensions were indexed with SortedSetDocValuesFacetField and others were indexed with FacetField . Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader, SortedSetDocValuesReaderState state) Parameters Type Name Description IndexSearcher searcher FacetsConfig config TaxonomyReader taxoReader SortedSetDocValuesReaderState state Fields | Improve this Doc View Source m_config FacetsConfig passed to constructor. Declaration protected readonly FacetsConfig m_config Field Value Type Description FacetsConfig | Improve this Doc View Source m_searcher IndexSearcher passed to constructor. Declaration protected readonly IndexSearcher m_searcher Field Value Type Description IndexSearcher | Improve this Doc View Source m_state SortedSetDocValuesReaderState passed to constructor; can be null . Declaration protected readonly SortedSetDocValuesReaderState m_state Field Value Type Description SortedSetDocValuesReaderState | Improve this Doc View Source m_taxoReader TaxonomyReader passed to constructor. Declaration protected readonly TaxonomyReader m_taxoReader Field Value Type Description TaxonomyReader Methods | Improve this Doc View Source BuildFacetsResult(FacetsCollector, FacetsCollector[], String[]) Subclass can override to customize per-dim Facets impl. Declaration protected virtual Facets BuildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, string[] drillSidewaysDims) Parameters Type Name Description FacetsCollector drillDowns FacetsCollector [] drillSideways System.String [] drillSidewaysDims Returns Type Description Facets | Improve this Doc View Source ScoreSubDocsAtOnce() Override this and return true if your collector (e.g., ToParentBlockJoinCollector ) expects all sub-scorers to be positioned on the document being collected. This will cause some performance loss; default is false . Note that if you return true from this method (in a subclass) be sure your collector also returns false from AcceptsDocsOutOfOrder : this will trick BooleanQuery into also scoring all subDocs at once. Declaration protected virtual bool ScoreSubDocsAtOnce() Returns Type Description System.Boolean | Improve this Doc View Source Search(DrillDownQuery, Filter, FieldDoc, Int32, Sort, Boolean, Boolean) Search, sorting by Sort , and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, Filter filter, FieldDoc after, int topN, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description DrillDownQuery query Filter filter FieldDoc after System.Int32 topN Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(DrillDownQuery, ICollector) Search, collecting hits with a ICollector , and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, ICollector hitCollector) Parameters Type Name Description DrillDownQuery query ICollector hitCollector Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(DrillDownQuery, Int32) Search, sorting by score, and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, int topN) Parameters Type Name Description DrillDownQuery query System.Int32 topN Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(ScoreDoc, DrillDownQuery, Int32) Search, sorting by score, and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(ScoreDoc after, DrillDownQuery query, int topN) Parameters Type Name Description ScoreDoc after DrillDownQuery query System.Int32 topN Returns Type Description DrillSidewaysResult"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The logical representation of a Document for indexing and searching. The document package provides the user level logical representation of content to be indexed and searched. The package also provides utilities for working with Document s and <xref:Lucene.Net.Index.IndexableField>s. Document and IndexableField A Document is a collection of <xref:Lucene.Net.Index.IndexableField>s. A <xref:Lucene.Net.Index.IndexableField> is a logical representation of a user's content that needs to be indexed or stored. <xref:Lucene.Net.Index.IndexableField>s have a number of properties that tell Lucene how to treat the content (like indexed, tokenized, stored, etc.) See the Field implementation of <xref:Lucene.Net.Index.IndexableField> for specifics on these properties. Note: it is common to refer to Document s having Field s, even though technically they have <xref:Lucene.Net.Index.IndexableField>s. Working with Documents First and foremost, a Document is something created by the user application. It is your job to create Documents based on the content of the files you are working with in your application (Word, txt, PDF, Excel or any other format.) How this is done is completely up to you. That being said, there are many tools available in other projects that can make the process of taking a file and converting it into a Lucene Document . The DateTools is a utility class to make dates and times searchable (remember, Lucene only searches text). <xref:Lucene.Net.Documents.IntField>, <xref:Lucene.Net.Documents.LongField>, <xref:Lucene.Net.Documents.FloatField> and DoubleField are a special helper class to simplify indexing of numeric values (and also dates) for fast range range queries with NumericRangeQuery (using a special sortable string representation of numeric values). Classes DocumentExtensions LUCENENET specific extensions to the Document class."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Documents.DocumentExtensions.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Documents.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the Document class. Inheritance System.Object DocumentExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.Facet.dll Syntax public static class DocumentExtensions Methods | Improve this Doc View Source AddAssociationFacetField(Document, BytesRef, String, String[]) Adds a new AssociationFacetField using dim and path and an association. Declaration public static AssociationFacetField AddAssociationFacetField(this Document document, BytesRef assoc, string dim, params string[] path) Parameters Type Name Description Document document This Document . BytesRef assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description AssociationFacetField The field that was added to this Document . | Improve this Doc View Source AddFacetField(Document, String, String[]) Adds a new FacetField with the specified dim and path . Declaration public static FacetField AddFacetField(this Document document, string dim, params string[] path) Parameters Type Name Description Document document This Document . System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description FacetField The field that was added to this Document . | Improve this Doc View Source AddInt32AssociationFacetField(Document, Int32, String, String[]) Adds a new Int32AssociationFacetField using dim and path and an System.Int32 association. Declaration public static Int32AssociationFacetField AddInt32AssociationFacetField(this Document document, int assoc, string dim, params string[] path) Parameters Type Name Description Document document This Document . System.Int32 assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description Int32AssociationFacetField The field that was added to this Document . | Improve this Doc View Source AddSingleAssociationFacetField(Document, Single, String, String[]) Adds a new SingleAssociationFacetField using dim and path and a System.Single association. Declaration public static SingleAssociationFacetField AddSingleAssociationFacetField(this Document document, float assoc, string dim, params string[] path) Parameters Type Name Description Document document This Document . System.Single assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description SingleAssociationFacetField The field that was added to this Document . | Improve this Doc View Source AddSortedSetDocValuesFacetField(Document, String, String) Adds a new SortedSetDocValuesFacetField . Declaration public static SortedSetDocValuesFacetField AddSortedSetDocValuesFacetField(this Document document, string dim, string label) Parameters Type Name Description Document document This Document . System.String dim Dimension for this field. System.String label Label for this field. Returns Type Description SortedSetDocValuesFacetField The field that was added to this Document . Remarks Add a SortedSetDocValuesFacetField to your Document for every facet label to be indexed via SortedSetDocValues ."
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.html",
    "title": "Namespace Lucene.Net.Expressions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Expressions <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The Expressions Module for Apache Lucene The expressions module is new to Lucene 4.6. It provides an API for dynamically computing per-document values based on string expressions. The module is organized in two sections: 1. Lucene.Net.Expressions - The abstractions and simple utilities for common operations like sorting on an expression 2. <xref:Lucene.Net.Expressions.Js> - A compiler for a subset of JavaScript expressions For sample code showing how to use the API, see Expression . Classes Bindings Binds variable names in expressions to actual data. Expression Base class that computes the value of an expression for a document. SimpleBindings Simple class that binds expression variable names to SortField s or other Expression s. Example usage: SimpleBindings bindings = new SimpleBindings(); // document's text relevance score bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // integer NumericDocValues field (or from FieldCache) bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // another expression bindings.Add(\"recency\", myRecencyExpression); // create a sort field in reverse order Sort sort = new Sort(expr.GetSortField(bindings, true)); This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.html",
    "title": "Namespace Lucene.Net.Expressions.JS | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Expressions.JS Classes JavascriptCompiler An expression compiler for javascript expressions. ParseException"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.JavascriptCompiler.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.JS.JavascriptCompiler.html",
    "title": "Class JavascriptCompiler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JavascriptCompiler An expression compiler for javascript expressions. Inheritance System.Object JavascriptCompiler Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Expressions.JS Assembly : Lucene.Net.Expressions.dll Syntax public class JavascriptCompiler Remarks An expression compiler for javascript expressions. Example: Expression foo = JavascriptCompiler.Compile(\"((0.3*popularity)/10.0)+(0.7*score)\"); See the Lucene.Net.Expressions.JS for the supported syntax and default functions. You can compile with an alternate set of functions via Compile(String, IDictionary<String, MethodInfo>) . For example: IDictionary<string, MethodInfo> functions = new Dictionary<string, MethodInfo>(); // add all the default functions functions.PutAll(JavascriptCompiler.DEFAULT_FUNCTIONS); // add sqrt() functions.Put(\"sqrt\", (typeof(Math)).GetMethod(\"Sqrt\", new Type[] { typeof(double) })); // call compile with customized function map Expression foo = JavascriptCompiler.Compile(\"sqrt(score)+ln(popularity)\", functions); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields | Improve this Doc View Source DEFAULT_FUNCTIONS The default set of functions available to expressions. Declaration public static readonly IDictionary<string, MethodInfo> DEFAULT_FUNCTIONS Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.Reflection.MethodInfo > Remarks The default set of functions available to expressions. See the Lucene.Net.Expressions.JS for a list. Methods | Improve this Doc View Source Compile(String) Compiles the given expression. Declaration public static Expression Compile(string sourceText) Parameters Type Name Description System.String sourceText The expression to compile Returns Type Description Expression A new compiled expression Exceptions Type Condition ParseException on failure to compile | Improve this Doc View Source Compile(String, IDictionary<String, MethodInfo>) Compiles the given expression with the supplied custom functions. Declaration public static Expression Compile(string sourceText, IDictionary<string, MethodInfo> functions) Parameters Type Name Description System.String sourceText The expression to compile System.Collections.Generic.IDictionary < System.String , System.Reflection.MethodInfo > functions map of System.String names to functions Returns Type Description Expression A new compiled expression Remarks Compiles the given expression with the supplied custom functions. Functions must be public static , return System.Double and can take from zero to 256 System.Double parameters. Exceptions Type Condition ParseException on failure to compile"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Expression.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Expression.html",
    "title": "Class Expression | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Expression Base class that computes the value of an expression for a document. Inheritance System.Object Expression Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public abstract class Expression Remarks Base class that computes the value of an expression for a document. Example usage: // compile an expression: Expression expr = JavascriptCompiler.Compile(\"sqrt(_score) + ln(popularity)\"); // SimpleBindings just maps variables to SortField instances SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); bindings.Add(new SortField(\"popularity\", SortFieldType.INT)); // create a sort field and sort by it (reverse order) Sort sort = new Sort(expr.GetSortField(bindings, true)); Query query = new TermQuery(new Term(\"body\", \"contents\")); searcher.Search(query, null, 10, sort); This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source Expression(String, String[]) Creates a new Expression . Declaration public Expression(string sourceText, string[] variables) Parameters Type Name Description System.String sourceText Source text for the expression: e.g. ln(popularity) System.String [] variables Names of external variables referred to by the expression Properties | Improve this Doc View Source SourceText The original source text Declaration public string SourceText { get; } Property Value Type Description System.String | Improve this Doc View Source Variables Named variables referred to by this expression Declaration public string[] Variables { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source Evaluate(Int32, FunctionValues[]) Evaluates the expression for the given document. Declaration public abstract double Evaluate(int document, FunctionValues[] functionValues) Parameters Type Name Description System.Int32 document docId of the document to compute a value for FunctionValues [] functionValues FunctionValues for each element of Variables . Returns Type Description System.Double The computed value of the expression for the given document. Remarks Evaluates the expression for the given document. | Improve this Doc View Source GetRescorer(Bindings) Get a Rescorer , to rescore first-pass hits using this expression. Declaration public virtual Rescorer GetRescorer(Bindings bindings) Parameters Type Name Description Bindings bindings Returns Type Description Rescorer | Improve this Doc View Source GetSortField(Bindings, Boolean) Get a sort field which can be used to rank documents by this expression. Declaration public virtual SortField GetSortField(Bindings bindings, bool reverse) Parameters Type Name Description Bindings bindings System.Boolean reverse Returns Type Description SortField Remarks Get a sort field which can be used to rank documents by this expression. | Improve this Doc View Source GetValueSource(Bindings) Get a value source which can compute the value of this expression in the context of the given bindings. Declaration public virtual ValueSource GetValueSource(Bindings bindings) Parameters Type Name Description Bindings bindings Bindings to use for external values in this expression Returns Type Description ValueSource A value source which will evaluate this expression when used Remarks Get a value source which can compute the value of this expression in the context of the given bindings. See Also Compile(String)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryWriter.html",
    "title": "Class UnknownDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionaryWriter Inheritance System.Object BinaryDictionaryWriter UnknownDictionaryWriter Inherited Members BinaryDictionaryWriter.m_implClazz BinaryDictionaryWriter.m_buffer BinaryDictionaryWriter.SharedPrefix(String, String) BinaryDictionaryWriter.AddMapping(Int32, Int32) BinaryDictionaryWriter.GetBaseFileName(String) BinaryDictionaryWriter.WriteTargetMap(String) BinaryDictionaryWriter.WritePosDict(String) BinaryDictionaryWriter.WriteDictionary(String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionaryWriter : BinaryDictionaryWriter Constructors | Improve this Doc View Source UnknownDictionaryWriter(Int32) Declaration public UnknownDictionaryWriter(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source Put(String[]) Declaration public override int Put(string[] entry) Parameters Type Name Description System.String [] entry Returns Type Description System.Int32 Overrides BinaryDictionaryWriter.Put(String[]) | Improve this Doc View Source PutCharacterCategory(Int32, String) Put mapping from unicode code point to character class. Declaration public virtual void PutCharacterCategory(int codePoint, string characterClassName) Parameters Type Name Description System.Int32 codePoint Code point. System.String characterClassName Character class name. | Improve this Doc View Source PutInvokeDefinition(String, Int32, Int32, Int32) Declaration public virtual void PutInvokeDefinition(string characterClassName, int invoke, int group, int length) Parameters Type Name Description System.String characterClassName System.Int32 invoke System.Int32 group System.Int32 length | Improve this Doc View Source Write(String) Declaration public override void Write(string baseDir) Parameters Type Name Description System.String baseDir Overrides BinaryDictionaryWriter.Write(String)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryBuilder.html",
    "title": "Class UnknownDictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionaryBuilder Inheritance System.Object UnknownDictionaryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionaryBuilder Constructors | Improve this Doc View Source UnknownDictionaryBuilder(String) Declaration public UnknownDictionaryBuilder(string encoding) Parameters Type Name Description System.String encoding Methods | Improve this Doc View Source Build(String) Declaration public virtual UnknownDictionaryWriter Build(string dirname) Parameters Type Name Description System.String dirname Returns Type Description UnknownDictionaryWriter | Improve this Doc View Source ReadCharacterDefinition(String, UnknownDictionaryWriter) Declaration public virtual void ReadCharacterDefinition(string filename, UnknownDictionaryWriter dictionary) Parameters Type Name Description System.String filename UnknownDictionaryWriter dictionary | Improve this Doc View Source ReadDictionaryFile(String) Declaration public virtual UnknownDictionaryWriter ReadDictionaryFile(string filename) Parameters Type Name Description System.String filename Returns Type Description UnknownDictionaryWriter | Improve this Doc View Source ReadDictionaryFile(String, String) Declaration public virtual UnknownDictionaryWriter ReadDictionaryFile(string filename, string encoding) Parameters Type Name Description System.String filename System.String encoding Returns Type Description UnknownDictionaryWriter"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ToStringUtil.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ToStringUtil.html",
    "title": "Class ToStringUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToStringUtil Utility class for english translations of morphological data, used only for debugging. Inheritance System.Object ToStringUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public static class ToStringUtil Methods | Improve this Doc View Source GetInflectedFormTranslation(String) Get the english form of inflected form Declaration public static string GetInflectedFormTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetInflectionTypeTranslation(String) Get the english form of inflection type Declaration public static string GetInflectionTypeTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetPOSTranslation(String) Get the english form of a POS tag Declaration public static string GetPOSTranslation(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetRomanization(String) Romanize katakana with modified hepburn Declaration public static string GetRomanization(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetRomanization(StringBuilder, String) Romanize katakana with modified hepburn Declaration public static void GetRomanization(StringBuilder builder, string s) Parameters Type Name Description System.Text.StringBuilder builder System.String s"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryWriter.html",
    "title": "Class TokenInfoDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionaryWriter Inheritance System.Object BinaryDictionaryWriter TokenInfoDictionaryWriter Inherited Members BinaryDictionaryWriter.m_implClazz BinaryDictionaryWriter.m_buffer BinaryDictionaryWriter.Put(String[]) BinaryDictionaryWriter.SharedPrefix(String, String) BinaryDictionaryWriter.AddMapping(Int32, Int32) BinaryDictionaryWriter.GetBaseFileName(String) BinaryDictionaryWriter.WriteTargetMap(String) BinaryDictionaryWriter.WritePosDict(String) BinaryDictionaryWriter.WriteDictionary(String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class TokenInfoDictionaryWriter : BinaryDictionaryWriter Constructors | Improve this Doc View Source TokenInfoDictionaryWriter(Int32) Declaration public TokenInfoDictionaryWriter(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source SetFST(FST<Nullable<Int64>>) Declaration public virtual void SetFST(FST<long?> fst) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst | Improve this Doc View Source Write(String) Declaration public override void Write(string baseDir) Parameters Type Name Description System.String baseDir Overrides BinaryDictionaryWriter.Write(String) | Improve this Doc View Source WriteFST(String) Declaration protected virtual void WriteFST(string filename) Parameters Type Name Description System.String filename"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilterFactory.html",
    "title": "Class NumericPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericPayloadTokenFilterFactory Factory for NumericPayloadTokenFilter . <fieldType name=\"text_numpayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NumericPayloadTokenFilterFactory\" payload=\"24\" typeMatch=\"word\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory NumericPayloadTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NumericPayloadTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source NumericPayloadTokenFilterFactory(IDictionary<String, String>) Creates a new NumericPayloadTokenFilterFactory Declaration public NumericPayloadTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.BeiderMorseFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.BeiderMorseFilter.html",
    "title": "Class BeiderMorseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BeiderMorseFilter TokenFilter for Beider-Morse phonetic encoding. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter BeiderMorseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class BeiderMorseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BeiderMorseFilter(TokenStream, PhoneticEngine) Calls BeiderMorseFilter(TokenStream, PhoneticEngine, LanguageSet) Declaration public BeiderMorseFilter(TokenStream input, PhoneticEngine engine) Parameters Type Name Description TokenStream input TokenStream to filter PhoneticEngine engine Configured PhoneticEngine with BM settings. | Improve this Doc View Source BeiderMorseFilter(TokenStream, PhoneticEngine, LanguageSet) Create a new BeiderMorseFilter Declaration public BeiderMorseFilter(TokenStream input, PhoneticEngine engine, LanguageSet languages) Parameters Type Name Description TokenStream input TokenStream to filter PhoneticEngine engine Configured PhoneticEngine with BM settings. LanguageSet languages Optional Set of original languages. Can be null (which means it will be guessed). Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable See Also BeiderMorseEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.BeiderMorseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.BeiderMorseFilterFactory.html",
    "title": "Class BeiderMorseFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BeiderMorseFilterFactory Factory for BeiderMorseFilter . <fieldType name=\"text_bm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.BeiderMorseFilterFactory\" nameType=\"GENERIC\" ruleType=\"APPROX\" concat=\"true\" languageSet=\"auto\" </filter> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory BeiderMorseFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class BeiderMorseFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source BeiderMorseFilterFactory(IDictionary<String, String>) Creates a new BeiderMorseFilterFactory Declaration public BeiderMorseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilter.html",
    "title": "Class DoubleMetaphoneFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleMetaphoneFilter Filter for DoubleMetaphone (supporting secondary codes) Inheritance System.Object AttributeSource TokenStream TokenFilter DoubleMetaphoneFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class DoubleMetaphoneFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source DoubleMetaphoneFilter(TokenStream, Int32, Boolean) Creates a DoubleMetaphoneFilter with the specified maximum code length, and either adding encoded forms as synonyms ( inject=true ) or replacing them. Declaration public DoubleMetaphoneFilter(TokenStream input, int maxCodeLength, bool inject) Parameters Type Name Description TokenStream input System.Int32 maxCodeLength System.Boolean inject Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.InvalidTokenOffsetsException.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.InvalidTokenOffsetsException.html",
    "title": "Class InvalidTokenOffsetsException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InvalidTokenOffsetsException Exception thrown if TokenStream Tokens are incompatible with provided text Inheritance System.Object System.Exception InvalidTokenOffsetsException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class InvalidTokenOffsetsException : Exception Constructors | Improve this Doc View Source InvalidTokenOffsetsException() Declaration public InvalidTokenOffsetsException() | Improve this Doc View Source InvalidTokenOffsetsException(String) Declaration public InvalidTokenOffsetsException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source InvalidTokenOffsetsException(String, Exception) Declaration public InvalidTokenOffsetsException(string message, Exception inner) Parameters Type Name Description System.String message System.Exception inner"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.NullFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.NullFragmenter.html",
    "title": "Class NullFragmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NullFragmenter IFragmenter implementation which does not fragment the text. This is useful for highlighting the entire content of a document or field. Inheritance System.Object NullFragmenter Implements IFragmenter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class NullFragmenter : IFragmenter Methods | Improve this Doc View Source IsNewFragment() Declaration public virtual bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Declaration public virtual void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText TokenStream tokenStream Implements IFragmenter"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.OffsetLimitTokenFilter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.OffsetLimitTokenFilter.html",
    "title": "Class OffsetLimitTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OffsetLimitTokenFilter This TokenFilter limits the number of tokens while indexing by adding up the current offset. Inheritance System.Object AttributeSource TokenStream TokenFilter OffsetLimitTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public sealed class OffsetLimitTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source OffsetLimitTokenFilter(TokenStream, Int32) Declaration public OffsetLimitTokenFilter(TokenStream input, int offsetLimit) Parameters Type Name Description TokenStream input System.Int32 offsetLimit Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryScorer.html",
    "title": "Class QueryScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryScorer IScorer implementation which scores text fragments by the number of unique query terms found. This class converts appropriate Query s to SpanQuery s and attempts to score only those terms that participated in generating the 'hit' on the document. Inheritance System.Object QueryScorer Implements IScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class QueryScorer : IScorer Constructors | Improve this Doc View Source QueryScorer(WeightedSpanTerm[]) Constructs a new QueryScorer instance Declaration public QueryScorer(WeightedSpanTerm[] weightedTerms) Parameters Type Name Description WeightedSpanTerm [] weightedTerms an array of pre-created WeightedSpanTerm s | Improve this Doc View Source QueryScorer(Query) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query) Parameters Type Name Description Query query Query to use for highlighting | Improve this Doc View Source QueryScorer(Query, IndexReader, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, IndexReader reader, string field) Parameters Type Name Description Query query Query to use for highlighting IndexReader reader IndexReader to use for quasi tf/idf scoring System.String field Field to highlight - pass null to ignore fields | Improve this Doc View Source QueryScorer(Query, IndexReader, String, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, IndexReader reader, string field, string defaultField) Parameters Type Name Description Query query Query to use for highlighting IndexReader reader IndexReader to use for quasi tf/idf scoring System.String field Field to highlight - pass null to ignore fields System.String defaultField The default field for queries with the field name unspecified | Improve this Doc View Source QueryScorer(Query, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, string field) Parameters Type Name Description Query query Query to use for highlighting System.String field Field to highlight - pass null to ignore fields | Improve this Doc View Source QueryScorer(Query, String, String) Constructs a new QueryScorer instance Declaration public QueryScorer(Query query, string field, string defaultField) Parameters Type Name Description Query query Query to use for highlighting System.String field Field to highlight - pass null to ignore fields System.String defaultField The default field for queries with the field name unspecified Properties | Improve this Doc View Source ExpandMultiTermQuery Controls whether or not multi-term queries are expanded against a MemoryIndex IndexReader . true if multi-term queries should be expanded Declaration public virtual bool ExpandMultiTermQuery { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source FragmentScore Declaration public virtual float FragmentScore { get; } Property Value Type Description System.Single See Also FragmentScore | Improve this Doc View Source MaxTermWeight The highest weighted term (useful for passing to GradientFormatter to set top end of coloring scale). Declaration public virtual float MaxTermWeight { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetTokenScore() Declaration public virtual float GetTokenScore() Returns Type Description System.Single See Also GetTokenScore () | Improve this Doc View Source GetWeightedSpanTerm(String) Retrieve the WeightedSpanTerm for the specified token. Useful for passing Span information to a IFragmenter . Declaration public virtual WeightedSpanTerm GetWeightedSpanTerm(string token) Parameters Type Name Description System.String token token to get WeightedSpanTerm for Returns Type Description WeightedSpanTerm WeightedSpanTerm for token | Improve this Doc View Source Init(TokenStream) Declaration public virtual TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream See Also Init ( TokenStream ) | Improve this Doc View Source NewTermExtractor(String) Declaration protected virtual WeightedSpanTermExtractor NewTermExtractor(string defaultField) Parameters Type Name Description System.String defaultField Returns Type Description WeightedSpanTermExtractor | Improve this Doc View Source SetMaxDocCharsToAnalyze(Int32) Declaration public virtual void SetMaxDocCharsToAnalyze(int maxDocCharsToAnalyze) Parameters Type Name Description System.Int32 maxDocCharsToAnalyze | Improve this Doc View Source SetWrapIfNotCachingTokenFilter(Boolean) By default, TokenStream s that are not of the type CachingTokenFilter are wrapped in a CachingTokenFilter to ensure an efficient reset - if you are already using a different caching TokenStream impl and you don't want it to be wrapped, set this to false. Declaration public virtual void SetWrapIfNotCachingTokenFilter(bool wrap) Parameters Type Name Description System.Boolean wrap | Improve this Doc View Source StartFragment(TextFragment) Declaration public virtual void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment See Also StartFragment ( TextFragment ) Implements IScorer"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpClientBase.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpClientBase.html",
    "title": "Class HttpClientBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HttpClientBase Base class for Http clients. Inheritance System.Object HttpClientBase HttpReplicator Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public abstract class HttpClientBase : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source HttpClientBase(String, Int32, String, HttpMessageHandler) Creates a new HttpClientBase with the given host, port and path. Declaration protected HttpClientBase(string host, int port, string path, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String host The host that the client should retrieve data from. System.Int32 port The port to be used to connect on. System.String path The path to the replicator on the host. System.Net.Http.HttpMessageHandler messageHandler Optional, The HTTP handler stack to use for sending requests, defaults to null . Remarks The host, port and path parameters are normalized to http://{host}:{port}{path} , if path is null or empty it defaults to / . A System.Net.Http.HttpMessageHandler is taken as an optional parameter as well, if this is not provided it defaults to null . In this case the internal System.Net.Http.HttpClient will default to use a System.Net.Http.HttpClientHandler . | Improve this Doc View Source HttpClientBase(String, HttpClient) Creates a new HttpClientBase with the given url and System.Net.Http.HttpClient . Declaration protected HttpClientBase(string url, HttpClient client) Parameters Type Name Description System.String url System.Net.Http.HttpClient client The System.Net.Http.HttpClient to use make remote http calls. Remarks This allows full controll over how the System.Net.Http.HttpClient is created, prefer the HttpClientBase(String, HttpMessageHandler) over this unless you know you need the control of the System.Net.Http.HttpClient . | Improve this Doc View Source HttpClientBase(String, HttpMessageHandler) Creates a new HttpClientBase with the given url . Declaration protected HttpClientBase(string url, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String url The full url, including with host, port and path. System.Net.Http.HttpMessageHandler messageHandler Optional, The HTTP handler stack to use for sending requests. Remarks A System.Net.Http.HttpMessageHandler is taken as an optional parameter as well, if this is not provided it defaults to null . In this case the internal System.Net.Http.HttpClient will default to use a System.Net.Http.HttpClientHandler . Fields | Improve this Doc View Source DEFAULT_CONNECTION_TIMEOUT Default connection timeout for this client, in milliseconds. ConnectionTimeout Declaration public const int DEFAULT_CONNECTION_TIMEOUT = 1000 Field Value Type Description System.Int32 Properties | Improve this Doc View Source ConnectionTimeout Gets or Sets the connection timeout for this client, in milliseconds. This setting is used to modify System.Net.Http.HttpClient.Timeout . Declaration public virtual int ConnectionTimeout { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source IsDisposed Returns true if this instance was Dispose(Boolean) ed, otherwise returns false . Note that if you override Dispose(Boolean) , you must call Dispose(Boolean) on the base class, in order for this instance to be properly disposed. Declaration public bool IsDisposed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Url The URL to execute requests against. Declaration protected string Url { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Dispose() Disposes this HttpClientBase . This disposes the underlying System.Net.Http.HttpClient . Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes this HttpClientBase . When called with true , this disposes the underlying System.Net.Http.HttpClient . Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoAction<T>(HttpResponseMessage, Boolean, Func<T>) Do a specific action and validate after the action that the status is still OK, and if not, attempt to extract the actual server side exception. Optionally release the response at exit, depending on consume parameter. Declaration protected virtual T DoAction<T>(HttpResponseMessage response, bool consume, Func<T> call) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Boolean consume System.Func <T> call Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source DoAction<T>(HttpResponseMessage, Func<T>) Calls the overload DoAction<T>(HttpResponseMessage, Boolean, Func<T>) passing true to consume. Declaration protected virtual T DoAction<T>(HttpResponseMessage response, Func<T> call) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Func <T> call Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if this client is already disposed. Declaration protected void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException client is already disposed. | Improve this Doc View Source ExecuteGet(String, String[]) Internal: Execute a request and return its result. The parameters argument is treated as: name1,value1,name2,value2,... Declaration protected virtual HttpResponseMessage ExecuteGet(string request, params string[] parameters) Parameters Type Name Description System.String request System.String [] parameters Returns Type Description System.Net.Http.HttpResponseMessage | Improve this Doc View Source ExecutePost(String, Object, String[]) Internal: Execute a request and return its result. The parameters argument is treated as: name1,value1,name2,value2,... Declaration protected virtual HttpResponseMessage ExecutePost(string request, object entity, params string[] parameters) Parameters Type Name Description System.String request System.Object entity System.String [] parameters Returns Type Description System.Net.Http.HttpResponseMessage | Improve this Doc View Source ResponseInputStream(HttpResponseMessage) Internal utility: input stream of the provided response. Declaration public virtual Stream ResponseInputStream(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ResponseInputStream(HttpResponseMessage, Boolean) Internal utility: input stream of the provided response, which optionally consumes the response's resources when the input stream is exhausted. Declaration public virtual Stream ResponseInputStream(HttpResponseMessage response, bool consume) Parameters Type Name Description System.Net.Http.HttpResponseMessage response System.Boolean consume Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source ThrowKnownError(HttpResponseMessage) Throws an exception for any errors. Declaration protected virtual void ThrowKnownError(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Exceptions Type Condition System.IO.IOException IO Error happened at the server, check inner exception for details. System.Net.Http.HttpRequestException Unknown error received from the server. | Improve this Doc View Source VerifyStatus(HttpResponseMessage) Internal: Verifies the response status and if not successful throws an exception. Declaration protected virtual void VerifyStatus(HttpResponseMessage response) Parameters Type Name Description System.Net.Http.HttpResponseMessage response Exceptions Type Condition System.IO.IOException IO Error happened at the server, check inner exception for details. System.Net.Http.HttpRequestException Unknown error received from the server. Implements System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.HttpReplicator.html",
    "title": "Class HttpReplicator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HttpReplicator An HTTP implementation of IReplicator . Assumes the API supported by ReplicationService . Inheritance System.Object HttpClientBase HttpReplicator Implements IReplicator System.IDisposable Inherited Members HttpClientBase.DEFAULT_CONNECTION_TIMEOUT HttpClientBase.Url HttpClientBase.ConnectionTimeout HttpClientBase.EnsureOpen() HttpClientBase.VerifyStatus(HttpResponseMessage) HttpClientBase.ThrowKnownError(HttpResponseMessage) HttpClientBase.ExecutePost(String, Object, String[]) HttpClientBase.ExecuteGet(String, String[]) HttpClientBase.ResponseInputStream(HttpResponseMessage) HttpClientBase.ResponseInputStream(HttpResponseMessage, Boolean) HttpClientBase.IsDisposed HttpClientBase.DoAction<T>(HttpResponseMessage, Func<T>) HttpClientBase.DoAction<T>(HttpResponseMessage, Boolean, Func<T>) HttpClientBase.Dispose(Boolean) HttpClientBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public class HttpReplicator : HttpClientBase, IReplicator, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source HttpReplicator(String, Int32, String, HttpMessageHandler) Creates a new HttpReplicator with the given host, port and path. HttpClientBase(String, Int32, String, HttpMessageHandler) for more details. Declaration public HttpReplicator(string host, int port, string path, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String host System.Int32 port System.String path System.Net.Http.HttpMessageHandler messageHandler | Improve this Doc View Source HttpReplicator(String, HttpClient) Creates a new HttpReplicator with the given url and System.Net.Http.HttpClient . HttpClientBase(String, HttpClient) for more details. Declaration public HttpReplicator(string url, HttpClient client) Parameters Type Name Description System.String url System.Net.Http.HttpClient client | Improve this Doc View Source HttpReplicator(String, HttpMessageHandler) Creates a new HttpReplicator with the given url. HttpClientBase(String, HttpMessageHandler) for more details. Declaration public HttpReplicator(string url, HttpMessageHandler messageHandler = null) Parameters Type Name Description System.String url System.Net.Http.HttpMessageHandler messageHandler Methods | Improve this Doc View Source CheckForUpdate(String) Checks for updates at the remote host. Declaration public virtual SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken | Improve this Doc View Source ObtainFile(String, String, String) Obtains the given file from it's source at the remote host. Declaration public virtual Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Publish(IRevision) Not supported. Declaration public virtual void Publish(IRevision revision) Parameters Type Name Description IRevision revision Exceptions Type Condition System.NotSupportedException this replicator implementation does not support remote publishing of revisions | Improve this Doc View Source Release(String) Releases a session obtained from the remote host. Declaration public virtual void Release(string sessionId) Parameters Type Name Description System.String sessionId Implements IReplicator System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.html",
    "title": "Class ReplicationService | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReplicationService A server-side service for handling replication requests. The service assumes requests are sent in the format /<context>/<shard>/<action> where context is the servlet context, e.g. REPLICATION_CONTEXT shard is the ID of the shard, e.g. \"s1\" action is one of ReplicationService.ReplicationAction values For example, to check whether there are revision updates for shard \"s1\" you should send the request: http://host:port/replicate/s1/update . Inheritance System.Object ReplicationService Implements IReplicationService Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public class ReplicationService : IReplicationService Remarks This service is written using abstractions over requests and responses which makes it easy to integrate into any hosting framework. See the Lucene.Net.Replicator.AspNetCore for an example of an implementation for the AspNetCore Framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ReplicationService(IReadOnlyDictionary<String, IReplicator>, String) Declaration public ReplicationService(IReadOnlyDictionary<string, IReplicator> replicators, string context = \"/replicate\") Parameters Type Name Description System.Collections.Generic.IReadOnlyDictionary < System.String , IReplicator > replicators System.String context Fields | Improve this Doc View Source JSON_SERIALIZER_SETTINGS Json Serializer Settings to use when serializing and deserializing errors. Declaration public static readonly JsonSerializerSettings JSON_SERIALIZER_SETTINGS Field Value Type Description Newtonsoft.Json.JsonSerializerSettings | Improve this Doc View Source REPLICATE_FILENAME_PARAM Request parameter name for providing the file's name. Declaration public const string REPLICATE_FILENAME_PARAM = \"filename\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_SESSION_ID_PARAM Request parameter name for providing a session ID. Declaration public const string REPLICATE_SESSION_ID_PARAM = \"sessionid\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_SOURCE_PARAM Request parameter name for providing the file's source. Declaration public const string REPLICATE_SOURCE_PARAM = \"source\" Field Value Type Description System.String | Improve this Doc View Source REPLICATE_VERSION_PARAM Request parameter name for providing the revision version. Declaration public const string REPLICATE_VERSION_PARAM = \"version\" Field Value Type Description System.String | Improve this Doc View Source REPLICATION_CONTEXT The default context path for the ReplicationService . Declaration public const string REPLICATION_CONTEXT = \"/replicate\" Field Value Type Description System.String Methods | Improve this Doc View Source Perform(IReplicationRequest, IReplicationResponse) Executes the replication task. Declaration public virtual void Perform(IReplicationRequest request, IReplicationResponse response) Parameters Type Name Description IReplicationRequest request IReplicationResponse response Exceptions Type Condition System.InvalidOperationException required parameters are missing Implements IReplicationService"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IndexAndTaxonomyReplicationHandler.html",
    "title": "Class IndexAndTaxonomyReplicationHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexAndTaxonomyReplicationHandler A IReplicationHandler for replication of an index and taxonomy pair. See IReplicationHandler for more detail. This handler ensures that the search and taxonomy indexes are replicated in a consistent way. Inheritance System.Object IndexAndTaxonomyReplicationHandler Implements IReplicationHandler Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class IndexAndTaxonomyReplicationHandler : IReplicationHandler Remarks NOTE: If you intend to recreate a taxonomy index, you should make sure to reopen an IndexSearcher and TaxonomyReader pair via the provided callback, to guarantee that both indexes are in sync. This handler does not prevent replicating such index and taxonomy pairs, and if they are reopened by a different thread, unexpected errors can occur, as well as inconsistency between the taxonomy and index readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source IndexAndTaxonomyReplicationHandler(Directory, Directory, Func<Nullable<Boolean>>) Constructor with the given index directory and callback to notify when the indexes were updated. Declaration public IndexAndTaxonomyReplicationHandler(Directory indexDirectory, Directory taxonomyDirectory, Func<bool?> callback) Parameters Type Name Description Directory indexDirectory Directory taxonomyDirectory System.Func < System.Nullable < System.Boolean >> callback Exceptions Type Condition System.IO.IOException Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component used to log messages to the Default InfoStream . Declaration public const string INFO_STREAM_COMPONENT = \"IndexAndTaxonomyReplicationHandler\" Field Value Type Description System.String Properties | Improve this Doc View Source CurrentRevisionFiles Declaration public virtual IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Declaration public virtual string CurrentVersion { get; } Property Value Type Description System.String | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Declaration public virtual void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles System.Collections.Generic.IDictionary < System.String , Directory > sourceDirectory Implements IReplicationHandler See Also IndexReplicationHandler"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.IBSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.IBSimilarity.html",
    "title": "Class IBSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IBSimilarity Provides a framework for the family of information-based models, as described in StÉphane Clinchant and Eric Gaussier. 2010. Information-based models for ad hoc IR. In Proceeding of the 33rd international ACM SIGIR conference on Research and development in information retrieval (SIGIR '10). ACM, New York, NY, USA, 234-241. The retrieval function is of the form RSV(q, d) = ∑ -x q w log Prob(X w >= t d w | λ w ) , where x q w is the query boost; X w is a random variable that counts the occurrences of word w ; t d w is the normalized term frequency; λ w is a parameter. The framework described in the paper has many similarities to the DFR framework (see DFRSimilarity ). It is possible that the two Similarities will be merged at one point. To construct an IBSimilarity , you must specify the implementations for all three components of the Information-Based model. ComponentImplementations Distribution : Probabilistic distribution used to model term occurrence DistributionLL : Log-logistic DistributionLL : Smoothed power-law Lambda : λ w parameter of the probability distribution LambdaDF : N w /N or average number of documents where w occurs LambdaTTF : F w /N or average number of occurrences of w in the collection Normalization : Term frequency normalizationAny supported DFR normalization (listed in DFRSimilarity ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase IBSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.NewStats(String, Single) SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class IBSimilarity : SimilarityBase Constructors | Improve this Doc View Source IBSimilarity(Distribution, Lambda, Normalization) Creates IBSimilarity from the three components. Note that null values are not allowed: if you want no normalization, instead pass Normalization.NoNormalization . Declaration public IBSimilarity(Distribution distribution, Lambda lambda, Normalization normalization) Parameters Type Name Description Distribution distribution probabilistic distribution modeling term occurrence Lambda lambda distribution's λ w parameter Normalization normalization term frequency normalization Fields | Improve this Doc View Source m_distribution The probabilistic distribution used to model term occurrence. Declaration protected readonly Distribution m_distribution Field Value Type Description Distribution | Improve this Doc View Source m_lambda The lambda (λ w ) parameter. Declaration protected readonly Lambda m_lambda Field Value Type Description Lambda | Improve this Doc View Source m_normalization The term frequency normalization. Declaration protected readonly Normalization m_normalization Field Value Type Description Normalization Properties | Improve this Doc View Source Distribution Returns the distribution Declaration public virtual Distribution Distribution { get; } Property Value Type Description Distribution | Improve this Doc View Source Lambda Returns the distribution's lambda parameter Declaration public virtual Lambda Lambda { get; } Property Value Type Description Lambda | Improve this Doc View Source Normalization Returns the term frequency normalization Declaration public virtual Normalization Normalization { get; } Property Value Type Description Normalization Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() The name of IB methods follow the pattern IB <distribution> <lambda><normalization> . The name of the distribution is the same as in the original paper; for the names of lambda parameters, refer to the doc of the Lambda classes. Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() Extension Methods Number.IsNumber(Object) See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaDF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaDF.html",
    "title": "Class LambdaDF | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LambdaDF Computes lambda as docFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaDF Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LambdaDF : Lambda Constructors | Improve this Doc View Source LambdaDF() Sole constructor: parameter-free Declaration public LambdaDF() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Declaration public override sealed float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single Overrides Lambda.CalculateLambda(BasicStats) | Improve this Doc View Source Explain(BasicStats) Declaration public override sealed Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation Overrides Lambda.Explain(BasicStats) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lambda.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaTTF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LambdaTTF.html",
    "title": "Class LambdaTTF | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LambdaTTF Computes lambda as totalTermFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaTTF Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LambdaTTF : Lambda Constructors | Improve this Doc View Source LambdaTTF() Sole constructor: parameter-free Declaration public LambdaTTF() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Declaration public override sealed float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single Overrides Lambda.CalculateLambda(BasicStats) | Improve this Doc View Source Explain(BasicStats) Declaration public override sealed Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation Overrides Lambda.Explain(BasicStats) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lambda.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMDirichletSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMDirichletSimilarity.html",
    "title": "Class LMDirichletSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMDirichletSimilarity Bayesian smoothing using Dirichlet priors. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The formula as defined the paper assigns a negative score to documents that contain the term, but with fewer occurrences than predicted by the collection language model. The Lucene implementation returns 0 for such documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMDirichletSimilarity Inherited Members LMSimilarity.m_collectionModel LMSimilarity.NewStats(String, Single) LMSimilarity.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) LMSimilarity.ToString() SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMDirichletSimilarity : LMSimilarity Constructors | Improve this Doc View Source LMDirichletSimilarity() Instantiates the similarity with the default μ value of 2000. Declaration public LMDirichletSimilarity() | Improve this Doc View Source LMDirichletSimilarity(LMSimilarity.ICollectionModel) Instantiates the similarity with the default μ value of 2000. Declaration public LMDirichletSimilarity(LMSimilarity.ICollectionModel collectionModel) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel | Improve this Doc View Source LMDirichletSimilarity(LMSimilarity.ICollectionModel, Single) Instantiates the similarity with the provided μ parameter. Declaration public LMDirichletSimilarity(LMSimilarity.ICollectionModel collectionModel, float mu) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel System.Single mu | Improve this Doc View Source LMDirichletSimilarity(Single) Instantiates the similarity with the provided μ parameter. Declaration public LMDirichletSimilarity(float mu) Parameters Type Name Description System.Single mu Properties | Improve this Doc View Source Mu Returns the μ parameter. Declaration public virtual float Mu { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides LMSimilarity.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source GetName() Declaration public override string GetName() Returns Type Description System.String Overrides LMSimilarity.GetName() | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMJelinekMercerSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMJelinekMercerSimilarity.html",
    "title": "Class LMJelinekMercerSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMJelinekMercerSimilarity Language model based on the Jelinek-Mercer smoothing method. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The model has a single parameter, λ. According to said paper, the optimal value depends on both the collection and the query. The optimal value is around 0.1 for title queries and 0.7 for long queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMJelinekMercerSimilarity Inherited Members LMSimilarity.m_collectionModel LMSimilarity.NewStats(String, Single) LMSimilarity.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) LMSimilarity.ToString() SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMJelinekMercerSimilarity : LMSimilarity Constructors | Improve this Doc View Source LMJelinekMercerSimilarity(LMSimilarity.ICollectionModel, Single) Instantiates with the specified collectionModel and λ parameter. Declaration public LMJelinekMercerSimilarity(LMSimilarity.ICollectionModel collectionModel, float lambda) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel System.Single lambda | Improve this Doc View Source LMJelinekMercerSimilarity(Single) Instantiates with the specified λ parameter. Declaration public LMJelinekMercerSimilarity(float lambda) Parameters Type Name Description System.Single lambda Properties | Improve this Doc View Source Lambda Returns the λ parameter. Declaration public virtual float Lambda { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides LMSimilarity.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source GetName() Declaration public override string GetName() Returns Type Description System.String Overrides LMSimilarity.GetName() | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanOrQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanOrQuery.html",
    "title": "Class SpanOrQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanOrQuery Matches the union of its clauses. Inheritance System.Object Query SpanQuery SpanOrQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanOrQuery : SpanQuery Constructors | Improve this Doc View Source SpanOrQuery(SpanQuery[]) Construct a SpanOrQuery merging the provided clauses . Declaration public SpanOrQuery(params SpanQuery[] clauses) Parameters Type Name Description SpanQuery [] clauses Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field Methods | Improve this Doc View Source AddClause(SpanQuery) Adds a clause to this query Declaration public void AddClause(SpanQuery clause) Parameters Type Name Description SpanQuery clause | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Return the clauses whose spans are matched. Declaration public virtual SpanQuery[] GetClauses() Returns Type Description SpanQuery [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPayloadCheckQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPayloadCheckQuery.html",
    "title": "Class SpanPayloadCheckQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanPayloadCheckQuery Only return those matches that have a specific payload at the given position. Do not use this with a SpanQuery that contains a SpanNearQuery . Instead, use SpanNearPayloadCheckQuery since it properly handles the fact that payloads aren't ordered by SpanNearQuery . Inheritance System.Object Query SpanQuery SpanPositionCheckQuery SpanPayloadCheckQuery Inherited Members SpanPositionCheckQuery.m_match SpanPositionCheckQuery.Match SpanPositionCheckQuery.Field SpanPositionCheckQuery.ExtractTerms(ISet<Term>) SpanPositionCheckQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) SpanPositionCheckQuery.Rewrite(IndexReader) SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanPayloadCheckQuery : SpanPositionCheckQuery Constructors | Improve this Doc View Source SpanPayloadCheckQuery(SpanQuery, ICollection<Byte[]>) Declaration public SpanPayloadCheckQuery(SpanQuery match, ICollection<byte[]> payloadToMatch) Parameters Type Name Description SpanQuery match The underlying SpanQuery to check System.Collections.Generic.ICollection < System.Byte []> payloadToMatch The ICollection{byte[]} of payloads to match. IMPORTANT: If the type provided does not implement System.Collections.Generic.IList<T> (including arrays), System.Collections.Generic.ISet<T> , or System.Collections.Generic.IDictionary<TKey, TValue> , it should provide an System.Object.Equals(System.Object) and System.Object.GetHashCode() implementation that compares the values of the byte arrays to ensure they are the same. Fields | Improve this Doc View Source m_payloadToMatch Declaration protected readonly ICollection<byte[]> m_payloadToMatch Field Value Type Description System.Collections.Generic.ICollection < System.Byte []> Methods | Improve this Doc View Source AcceptPosition(Spans) Declaration protected override SpanPositionCheckQuery.AcceptStatus AcceptPosition(Spans spans) Parameters Type Name Description Spans spans Returns Type Description SpanPositionCheckQuery.AcceptStatus Overrides SpanPositionCheckQuery.AcceptPosition(Spans) | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.PhoneticFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.PhoneticFilter.html",
    "title": "Class PhoneticFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhoneticFilter Create tokens for phonetic matches. See the Language namespace. Inheritance System.Object AttributeSource TokenStream TokenFilter PhoneticFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class PhoneticFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PhoneticFilter(TokenStream, IStringEncoder, Boolean) Creates a PhoneticFilter with the specified encoder, and either adding encoded forms as synonyms ( inject=true ) or replacing them. Declaration public PhoneticFilter(TokenStream input, IStringEncoder encoder, bool inject) Parameters Type Name Description TokenStream input IStringEncoder encoder System.Boolean inject Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.PhoneticFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.PhoneticFilterFactory.html",
    "title": "Class PhoneticFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhoneticFilterFactory Factory for PhoneticFilter . Create tokens based on phonetic encoders from the Language namespace. This takes one required argument, \"encoder\", and the rest are optional: encoder required, one of \"DoubleMetaphone\", \"Metaphone\", \"Soundex\", \"RefinedSoundex\", \"Caverphone\" (v2.0), or \"ColognePhonetic\" (case insensitive). If encoder isn't one of these, it'll be resolved as a class name either by itself if it already contains a '.' or otherwise as in the same package as these others. inject (default=true) add tokens to the stream with the offset=0 maxCodeLength The maximum length of the phonetic codes, as defined by the encoder. If an encoder doesn't support this then specifying this is an error. <fieldType name=\"text_phonetic\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PhoneticFilterFactory\" encoder=\"DoubleMetaphone\" inject=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PhoneticFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class PhoneticFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source PhoneticFilterFactory(IDictionary<String, String>) Creates a new PhoneticFilterFactory . Declaration public PhoneticFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source ENCODER parameter name: either a short name or a full class name Declaration public static readonly string ENCODER Field Value Type Description System.String | Improve this Doc View Source INJECT parameter name: true if encoded tokens should be added as synonyms Declaration public static readonly string INJECT Field Value Type Description System.String | Improve this Doc View Source MAX_CODE_LENGTH Declaration public static readonly string MAX_CODE_LENGTH Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetEncoder() Must be thread-safe. Declaration protected virtual IStringEncoder GetEncoder() Returns Type Description IStringEncoder | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware See Also PhoneticFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pl.PolishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pl.PolishAnalyzer.html",
    "title": "Class PolishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PolishAnalyzer Analyzer for Polish. Inheritance System.Object Analyzer StopwordAnalyzerBase PolishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pl Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public sealed class PolishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source PolishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PolishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source PolishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public PolishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source PolishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public PolishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STEMMER_FILE File containing default Polish stemmer table. Declaration public static readonly string DEFAULT_STEMMER_FILE Field Value Type Description System.String | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Polish stopwords. Declaration public static readonly string DEFAULT_STOPWORD_FILE Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. | Improve this Doc View Source DefaultTable Returns an unmodifiable instance of the default stemmer table. Declaration public static Trie DefaultTable { get; } Property Value Type Description Trie Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem excusion set is provided and StempelFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.TurkishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.TurkishAnalyzer.html",
    "title": "Class TurkishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TurkishAnalyzer Analyzer for Turkish. Inheritance System.Object Analyzer StopwordAnalyzerBase TurkishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TurkishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source TurkishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public TurkishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source TurkishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public TurkishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source TurkishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public TurkishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Turkish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , TurkishLowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilter.html",
    "title": "Class TurkishLowerCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TurkishLowerCaseFilter Normalizes Turkish token text to lower case. Turkish and Azeri have unique casing behavior for some characters. This filter applies Turkish lowercase rules. For more information, see http://en.wikipedia.org/wiki/Turkish_dotted_and_dotless_I Inheritance System.Object AttributeSource TokenStream TokenFilter TurkishLowerCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TurkishLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TurkishLowerCaseFilter(TokenStream) Create a new TurkishLowerCaseFilter , that normalizes Turkish token text to lower case. Declaration public TurkishLowerCaseFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.TurkishLowerCaseFilterFactory.html",
    "title": "Class TurkishLowerCaseFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TurkishLowerCaseFilterFactory Factory for TurkishLowerCaseFilter . <fieldType name=\"text_trlwr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TurkishLowerCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Tr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TurkishLowerCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source TurkishLowerCaseFilterFactory(IDictionary<String, String>) Creates a new TurkishLowerCaseFilterFactory Declaration public TurkishLowerCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.BufferedCharFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.BufferedCharFilter.html",
    "title": "Class BufferedCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedCharFilter LUCENENET specific class to mimic Java's BufferedReader (that is, a reader that is seekable) so it supports Mark() and Reset() (which are part of the Java Reader class), but also provide the Correct() method of BaseCharFilter. Inheritance System.Object System.IO.TextReader CharFilter BaseCharFilter BufferedCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.CorrectOffset(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BufferedCharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source BufferedCharFilter(TextReader) Creates a buffering character-input stream that uses a default-sized input buffer. Declaration public BufferedCharFilter(TextReader in) Parameters Type Name Description System.IO.TextReader in A TextReader | Improve this Doc View Source BufferedCharFilter(TextReader, Int32) Creates a buffering character-input stream that uses an input buffer of the specified size. Declaration public BufferedCharFilter(TextReader in, int size) Parameters Type Name Description System.IO.TextReader in A TextReader System.Int32 size Input-buffer size Fields | Improve this Doc View Source DEFAULT_CHAR_BUFFER_SIZE Declaration public const int DEFAULT_CHAR_BUFFER_SIZE = 8192 Field Value Type Description System.Int32 | Improve this Doc View Source m_lock The object used to synchronize access to the reader. Declaration protected object m_lock Field Value Type Description System.Object Properties | Improve this Doc View Source IsMarkSupported Indicates whether this reader supports the Mark(Int32) and Reset() methods. This implementation returns true . Declaration public override bool IsMarkSupported { get; } Property Value Type Description System.Boolean Overrides CharFilter.IsMarkSupported See Also Mark(Int32) Reset() | Improve this Doc View Source IsReady Indicates whether this reader is ready to be read without blocking. Declaration public override bool IsReady { get; } Property Value Type Description System.Boolean true if this reader will not block when Read() is called, false if unknown or blocking will occur. Overrides CharFilter.IsReady Methods | Improve this Doc View Source Dispose(Boolean) Disposes this reader. This implementation closes the buffered source reader and releases the buffer. Nothing is done if this reader has already been disposed. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides CharFilter.Dispose(Boolean) Exceptions Type Condition System.IO.IOException if an error occurs while closing this reader. | Improve this Doc View Source Mark(Int32) Sets a mark position in this reader. The parameter markLimit indicates how many characters can be read before the mark is invalidated. Calling Reset() will reposition the reader back to the marked position if Lucene.Net.Analysis.Util.BufferedCharFilter.markLimit has not been surpassed. Declaration public override void Mark(int markLimit) Parameters Type Name Description System.Int32 markLimit the number of characters that can be read before the mark is invalidated. Overrides CharFilter.Mark(Int32) Exceptions Type Condition System.ArgumentOutOfRangeException if markLimit < 0 System.IO.IOException if an error occurs while setting a mark in this reader. | Improve this Doc View Source Peek() Declaration public override int Peek() Returns Type Description System.Int32 Overrides System.IO.TextReader.Peek() | Improve this Doc View Source Read() Reads a single character from this reader and returns it with the two higher-order bytes set to 0. If possible, BufferedCharFilter returns a character from the buffer. If there are no characters available in the buffer, it fills the buffer and then returns a character. It returns -1 if there are no more characters in the source reader. Declaration public override int Read() Returns Type Description System.Int32 The character read or -1 if the end of the source reader has been reached. Overrides CharFilter.Read() Exceptions Type Condition System.IO.IOException If this reader is disposed or some other I/O error occurs. | Improve this Doc View Source Read(Char[], Int32, Int32) Reads at most length characters from this reader and stores them at offset in the character array buffer . Returns the number of characters actually read or -1 if the end of the source reader has been reached. If all the buffered characters have been used, a mark has not been set and the requested number of characters is larger than this readers buffer size, BufferedReader bypasses the buffer and simply places the results directly into buffer . Declaration public override int Read(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer the character array to store the characters read. System.Int32 offset the initial position in buffer to store the bytes read from this reader. System.Int32 length the maximum number of characters to read, must be non-negative. Returns Type Description System.Int32 number of characters read or -1 if the end of the source reader has been reached. Overrides CharFilter.Read(Char[], Int32, Int32) Exceptions Type Condition System.ArgumentOutOfRangeException if offset < 0 or length < 0 , or if offset + length is greater than the size of buffer . System.IO.IOException if this reader is disposed or some other I/O error occurs. | Improve this Doc View Source ReadAsync(Char[], Int32, Int32) Declaration public override Task<int> ReadAsync(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Threading.Tasks.Task < System.Int32 > Overrides System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ReadBlock(Char[], Int32, Int32) Declaration public override int ReadBlock(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Int32 Overrides System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ReadBlockAsync(Char[], Int32, Int32) Declaration public override Task<int> ReadBlockAsync(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Threading.Tasks.Task < System.Int32 > Overrides System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ReadLine() Returns the next line of text available from this reader. A line is represented by zero or more characters followed by '\\n' , '\\r' , \"\\r\\n\" or the end of the reader. The string does not include the newline sequence. Declaration public override string ReadLine() Returns Type Description System.String The contents of the line or null if no characters were read before the end of the reader has been reached. Overrides System.IO.TextReader.ReadLine() Exceptions Type Condition System.IO.IOException if this reader is disposed or some other I/O error occurs. | Improve this Doc View Source ReadLineAsync() Declaration public override Task<string> ReadLineAsync() Returns Type Description System.Threading.Tasks.Task < System.String > Overrides System.IO.TextReader.ReadLineAsync() | Improve this Doc View Source ReadToEnd() Declaration public override string ReadToEnd() Returns Type Description System.String Overrides System.IO.TextReader.ReadToEnd() | Improve this Doc View Source ReadToEndAsync() Declaration public override Task<string> ReadToEndAsync() Returns Type Description System.Threading.Tasks.Task < System.String > Overrides System.IO.TextReader.ReadToEndAsync() | Improve this Doc View Source Reset() Resets this reader's position to the last Mark(Int32) location. Invocations of Read() and Skip(Int32) will occur from this new location. Declaration public override void Reset() Overrides CharFilter.Reset() Exceptions Type Condition System.IO.IOException If this reader is disposed or no mark has been set. See Also Mark(Int32) IsMarkSupported | Improve this Doc View Source Skip(Int32) Skips amount characters in this reader. Subsequent Read() s will not return these characters unless Reset() is used. Skipping characters may invalidate a mark if Lucene.Net.Analysis.Util.BufferedCharFilter.markLimit is surpassed. Declaration public override long Skip(int amount) Parameters Type Name Description System.Int32 amount the maximum number of characters to skip. Returns Type Description System.Int64 the number of characters actually skipped. Overrides CharFilter.Skip(Int32) Exceptions Type Condition System.ArgumentOutOfRangeException if amount < 0 . System.IO.IOException If this reader is disposed or some other I/O error occurs. See Also Mark(Int32) IsMarkSupported Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMap-1.EntryIterator.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMap-1.EntryIterator.html",
    "title": "Class CharArrayMap<TValue>.EntryIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMap<TValue>.EntryIterator public iterator class so efficient methods are exposed to users Inheritance System.Object CharArrayMap<TValue>.EntryIterator Implements System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.IEnumerator System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EntryIterator : IEnumerator<KeyValuePair<string, TValue>>, IEnumerator, IDisposable Properties | Improve this Doc View Source Current Declaration public virtual KeyValuePair<string, TValue> Current { get; } Property Value Type Description System.Collections.Generic.KeyValuePair < System.String , TValue> | Improve this Doc View Source CurrentValue returns the value associated with the current key Declaration public virtual TValue CurrentValue { get; } Property Value Type Description TValue | Improve this Doc View Source HasNext Declaration public virtual bool HasNext { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source MoveNext() Declaration public virtual bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source NextKey() gets the next key... do not modify the returned char[] Declaration public virtual char[] NextKey() Returns Type Description System.Char [] | Improve this Doc View Source NextKeyString() gets the next key as a newly created System.String object Declaration public virtual string NextKeyString() Returns Type Description System.String | Improve this Doc View Source Reset() Declaration public virtual void Reset() | Improve this Doc View Source SetValue(TValue) sets the value associated with the last key returned Declaration public virtual TValue SetValue(TValue value) Parameters Type Name Description TValue value Returns Type Description TValue Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMap-1.EntrySet_.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMap-1.EntrySet_.html",
    "title": "Class CharArrayMap<TValue>.EntrySet_ | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMap<TValue>.EntrySet_ public EntrySet_ class so efficient methods are exposed to users NOTE: In .NET this was renamed to EntrySet_ because it conflicted with the method EntrySet(). Since there is also an extension method named IDictionary{K,V}.EntrySet() that this class needs to override, changing the name of the method was not possible because the extension method would produce incorrect results if it were inadvertently called, leading to hard-to-diagnose bugs. Another difference between this set and the Java counterpart is that it implements System.Collections.Generic.ICollection<T> rather than System.Collections.Generic.ISet<T> so we don't have to implement a bunch of methods that we aren't really interested in. The Keys and Values properties both return System.Collections.Generic.ICollection<T> , and while there is no EntrySet() method or property in .NET, if there were it would certainly return System.Collections.Generic.ICollection<T> . Inheritance System.Object CharArrayMap<TValue>.EntrySet_ Implements System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EntrySet_ : ICollection<KeyValuePair<string, TValue>>, IEnumerable<KeyValuePair<string, TValue>>, IEnumerable Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Add(KeyValuePair<String, TValue>) Declaration public void Add(KeyValuePair<string, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair < System.String , TValue> item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(Object) Declaration public bool Contains(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<String, TValue>[], Int32) Declaration public void CopyTo(KeyValuePair<string, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair < System.String , TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator GetEnumerator() Returns Type Description System.Collections.IEnumerator | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Explicit Interface Implementations | Improve this Doc View Source IEnumerable<KeyValuePair<String, TValue>>.GetEnumerator() Declaration IEnumerator<KeyValuePair<string, TValue>> IEnumerable<KeyValuePair<string, TValue>>.GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair < System.String , TValue>> Implements System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int32Field.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int32Field.html",
    "title": "Class Int32Field | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32Field Field that indexes System.Int32 values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int32Field(name, 6, Field.Store.NO)); For optimal performance, re-use the Int32Field and Document instance for more than one document: Int32Field field = new Int32Field(name, 6, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt32Value(value) writer.AddDocument(document); ... } See also Int64Field , SingleField , DoubleField . To perform range querying or filtering against a Int32Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int32Field , use the normal numeric sort types, eg INT32 . Int32Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int32Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int32Field . An Int32Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was IntField in Lucene @since 2.9 Inheritance System.Object Field Int32Field Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class Int32Field : Field, IIndexableField Constructors | Improve this Doc View Source Int32Field(String, Int32, Field.Store) Creates a stored or un-stored Int32Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public Int32Field(string name, int value, Field.Store stored) Parameters Type Name Description System.String name field name System.Int32 value 32-bit System.Int32 value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source Int32Field(String, Int32, FieldType) Expert: allows you to customize the FieldType . Declaration public Int32Field(string name, int value, FieldType type) Parameters Type Name Description System.String name field name System.Int32 value 32-bit System.Int32 value FieldType type customized field type: must have NumericType of INT32 . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a NumericType of INT32 Fields | Improve this Doc View Source TYPE_NOT_STORED Type for an Int32Field that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored Int32Field : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int64DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int64DocValuesField.html",
    "title": "Class Int64DocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64DocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was LongDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int64DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use NumericDocValuesField instead\")] public class Int64DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int64DocValuesField(String, Int64) Creates a new DocValues field with the specified 64-bit System.Int64 value Declaration public Int64DocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value Exceptions Type Condition System.ArgumentNullException if the field name is null Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Index.AtomicReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.AtomicReaderContext.html",
    "title": "Class AtomicReaderContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicReaderContext IndexReaderContext for AtomicReader instances. Inheritance System.Object IndexReaderContext AtomicReaderContext Inherited Members IndexReaderContext.Parent IndexReaderContext.IsTopLevel IndexReaderContext.DocBaseInParent IndexReaderContext.OrdInParent System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class AtomicReaderContext : IndexReaderContext Properties | Improve this Doc View Source AtomicReader Declaration public AtomicReader AtomicReader { get; } Property Value Type Description AtomicReader | Improve this Doc View Source Children Declaration public override IList<IndexReaderContext> Children { get; } Property Value Type Description System.Collections.Generic.IList < IndexReaderContext > Overrides IndexReaderContext.Children | Improve this Doc View Source DocBase The readers absolute doc base Declaration public int DocBase { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Leaves Declaration public override IList<AtomicReaderContext> Leaves { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReaderContext > Overrides IndexReaderContext.Leaves | Improve this Doc View Source Ord The readers ord in the top-level's leaves array Declaration public int Ord { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Reader Declaration public override IndexReader Reader { get; } Property Value Type Description IndexReader Overrides IndexReaderContext.Reader Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.BaseCompositeReader-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BaseCompositeReader-1.html",
    "title": "Class BaseCompositeReader<R> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseCompositeReader<R> Base class for implementing CompositeReader s based on an array of sub-readers. The implementing class has to add code for correctly refcounting and closing the sub-readers. User code will most likely use MultiReader to build a composite reader on a set of sub-readers (like several DirectoryReader s). For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IndexReader CompositeReader BaseCompositeReader<R> DirectoryReader MultiReader ParallelCompositeReader Implements System.IDisposable Inherited Members CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class BaseCompositeReader<R> : CompositeReader, IDisposable where R : IndexReader Type Parameters Name Description R Constructors | Improve this Doc View Source BaseCompositeReader(R[]) Constructs a BaseCompositeReader<R> on the given subReaders . Declaration protected BaseCompositeReader(R[] subReaders) Parameters Type Name Description R[] subReaders the wrapped sub-readers. This array is returned by GetSequentialSubReaders() and used to resolve the correct subreader for docID-based methods. Please note: this array is not cloned and not protected for modification, the subclass is responsible to do this. Properties | Improve this Doc View Source MaxDoc Declaration public override sealed int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override sealed int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source DocFreq(Term) Declaration public override sealed int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 Overrides IndexReader.DocFreq(Term) | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override sealed void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetDocCount(String) Declaration public override sealed int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 Overrides IndexReader.GetDocCount(String) | Improve this Doc View Source GetSequentialSubReaders() Declaration protected override sealed IList<IndexReader> GetSequentialSubReaders() Returns Type Description System.Collections.Generic.IList < IndexReader > Overrides CompositeReader.GetSequentialSubReaders() | Improve this Doc View Source GetSumDocFreq(String) Declaration public override sealed long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumDocFreq(String) | Improve this Doc View Source GetSumTotalTermFreq(String) Declaration public override sealed long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumTotalTermFreq(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override sealed Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ReaderBase(Int32) Helper method for subclasses to get the docBase of the given sub-reader index. Declaration protected int ReaderBase(int readerIndex) Parameters Type Name Description System.Int32 readerIndex Returns Type Description System.Int32 | Improve this Doc View Source ReaderIndex(Int32) Helper method for subclasses to get the corresponding reader for a doc ID Declaration protected int ReaderIndex(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 | Improve this Doc View Source TotalTermFreq(Term) Declaration public override sealed long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 Overrides IndexReader.TotalTermFreq(Term) Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also MultiReader"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.html",
    "title": "Class FilterAtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader A FilterAtomicReader contains another AtomicReader , which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality. The class FilterAtomicReader itself simply implements all abstract methods of IndexReader with versions that pass all requests to the contained index reader. Subclasses of FilterAtomicReader may further override some of these methods and may also provide additional methods and fields. NOTE : If you override LiveDocs , you will likely need to override NumDocs as well and vice-versa. NOTE : If this FilterAtomicReader does not change the content the contained reader, you could consider overriding CoreCacheKey so that IFieldCache and CachingWrapperFilter share the same entries for this atomic reader and the wrapped one. CombinedCoreAndDeletesKey could be overridden as well if the LiveDocs are not changed either. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader SortingAtomicReader Implements System.IDisposable Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterAtomicReader : AtomicReader, IDisposable Constructors | Improve this Doc View Source FilterAtomicReader(AtomicReader) Construct a FilterAtomicReader based on the specified base reader. Note that base reader is closed if this FilterAtomicReader is closed. Declaration public FilterAtomicReader(AtomicReader input) Parameters Type Name Description AtomicReader input specified base reader. Fields | Improve this Doc View Source m_input The underlying AtomicReader . Declaration protected readonly AtomicReader m_input Field Value Type Description AtomicReader Properties | Improve this Doc View Source FieldInfos Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Unwrap(AtomicReader) Get the wrapped instance by reader as long as this reader is an intance of FilterAtomicReader . Declaration public static AtomicReader Unwrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description AtomicReader Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.StandardReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.StandardReaderWrapper.html",
    "title": "Class FilterDirectoryReader.StandardReaderWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterDirectoryReader.StandardReaderWrapper A no-op FilterDirectoryReader.SubReaderWrapper that simply returns the parent DirectoryReader 's original subreaders. Inheritance System.Object FilterDirectoryReader.SubReaderWrapper FilterDirectoryReader.StandardReaderWrapper Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class StandardReaderWrapper : FilterDirectoryReader.SubReaderWrapper Constructors | Improve this Doc View Source StandardReaderWrapper() Constructor Declaration public StandardReaderWrapper() Methods | Improve this Doc View Source Wrap(AtomicReader) Declaration public override AtomicReader Wrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description AtomicReader Overrides FilterDirectoryReader.SubReaderWrapper.Wrap(AtomicReader) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.html",
    "title": "Class FilterDirectoryReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterDirectoryReader A FilterDirectoryReader wraps another DirectoryReader , allowing implementations to transform or extend it. Subclasses should implement DoWrapDirectoryReader(DirectoryReader) to return an instance of the subclass. If the subclass wants to wrap the DirectoryReader 's subreaders, it should also implement a FilterDirectoryReader.SubReaderWrapper subclass, and pass an instance to its base constructor. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < AtomicReader > DirectoryReader FilterDirectoryReader Implements System.IDisposable Inherited Members DirectoryReader.DEFAULT_TERMS_INDEX_DIVISOR DirectoryReader.m_directory DirectoryReader.Open(Directory) DirectoryReader.Open(Directory, Int32) DirectoryReader.Open(IndexWriter, Boolean) DirectoryReader.Open(IndexCommit) DirectoryReader.Open(IndexCommit, Int32) DirectoryReader.OpenIfChanged(DirectoryReader) DirectoryReader.OpenIfChanged(DirectoryReader, IndexCommit) DirectoryReader.OpenIfChanged(DirectoryReader, IndexWriter, Boolean) DirectoryReader.ListCommits(Directory) DirectoryReader.IndexExists(Directory) DirectoryReader.Directory BaseCompositeReader<AtomicReader>.GetTermVectors(Int32) BaseCompositeReader<AtomicReader>.NumDocs BaseCompositeReader<AtomicReader>.MaxDoc BaseCompositeReader<AtomicReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<AtomicReader>.DocFreq(Term) BaseCompositeReader<AtomicReader>.TotalTermFreq(Term) BaseCompositeReader<AtomicReader>.GetSumDocFreq(String) BaseCompositeReader<AtomicReader>.GetDocCount(String) BaseCompositeReader<AtomicReader>.GetSumTotalTermFreq(String) BaseCompositeReader<AtomicReader>.ReaderIndex(Int32) BaseCompositeReader<AtomicReader>.ReaderBase(Int32) BaseCompositeReader<AtomicReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class FilterDirectoryReader : DirectoryReader, IDisposable Constructors | Improve this Doc View Source FilterDirectoryReader(DirectoryReader) Create a new FilterDirectoryReader that filters a passed in DirectoryReader . Declaration public FilterDirectoryReader(DirectoryReader input) Parameters Type Name Description DirectoryReader input the DirectoryReader to filter | Improve this Doc View Source FilterDirectoryReader(DirectoryReader, FilterDirectoryReader.SubReaderWrapper) Create a new FilterDirectoryReader that filters a passed in DirectoryReader , using the supplied FilterDirectoryReader.SubReaderWrapper to wrap its subreader. Declaration public FilterDirectoryReader(DirectoryReader input, FilterDirectoryReader.SubReaderWrapper wrapper) Parameters Type Name Description DirectoryReader input the DirectoryReader to filter FilterDirectoryReader.SubReaderWrapper wrapper the FilterDirectoryReader.SubReaderWrapper to use to wrap subreaders Fields | Improve this Doc View Source m_input The filtered DirectoryReader Declaration protected readonly DirectoryReader m_input Field Value Type Description DirectoryReader Properties | Improve this Doc View Source IndexCommit Declaration public override IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit Overrides DirectoryReader.IndexCommit | Improve this Doc View Source Version Declaration public override long Version { get; } Property Value Type Description System.Int64 Overrides DirectoryReader.Version Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source DoOpenIfChanged() Declaration protected override sealed DirectoryReader DoOpenIfChanged() Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged() | Improve this Doc View Source DoOpenIfChanged(IndexCommit) Declaration protected override sealed DirectoryReader DoOpenIfChanged(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged(IndexCommit) | Improve this Doc View Source DoOpenIfChanged(IndexWriter, Boolean) Declaration protected override sealed DirectoryReader DoOpenIfChanged(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer System.Boolean applyAllDeletes Returns Type Description DirectoryReader Overrides DirectoryReader.DoOpenIfChanged(IndexWriter, Boolean) | Improve this Doc View Source DoWrapDirectoryReader(DirectoryReader) Called by the DoOpenIfChanged() methods to return a new wrapped DirectoryReader . Implementations should just return an instance of themselves, wrapping the passed in DirectoryReader . Declaration protected abstract DirectoryReader DoWrapDirectoryReader(DirectoryReader input) Parameters Type Name Description DirectoryReader input the DirectoryReader to wrap Returns Type Description DirectoryReader the wrapped DirectoryReader | Improve this Doc View Source IsCurrent() Declaration public override bool IsCurrent() Returns Type Description System.Boolean Overrides DirectoryReader.IsCurrent() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LogByteSizeMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LogByteSizeMergePolicy.html",
    "title": "Class LogByteSizeMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LogByteSizeMergePolicy This is a LogMergePolicy that measures size of a segment as the total byte size of the segment's files. Inheritance System.Object MergePolicy LogMergePolicy LogByteSizeMergePolicy Implements System.IDisposable Inherited Members LogMergePolicy.LEVEL_LOG_SPAN LogMergePolicy.DEFAULT_MERGE_FACTOR LogMergePolicy.DEFAULT_MAX_MERGE_DOCS LogMergePolicy.DEFAULT_NO_CFS_RATIO LogMergePolicy.m_mergeFactor LogMergePolicy.m_minMergeSize LogMergePolicy.m_maxMergeSize LogMergePolicy.m_maxMergeSizeForForcedMerge LogMergePolicy.m_maxMergeDocs LogMergePolicy.m_calibrateSizeByDeletes LogMergePolicy.IsVerbose LogMergePolicy.Message(String) LogMergePolicy.MergeFactor LogMergePolicy.CalibrateSizeByDeletes LogMergePolicy.Dispose(Boolean) LogMergePolicy.SizeDocs(SegmentCommitInfo) LogMergePolicy.SizeBytes(SegmentCommitInfo) LogMergePolicy.IsMerged(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) LogMergePolicy.FindForcedDeletesMerges(SegmentInfos) LogMergePolicy.FindMerges(MergeTrigger, SegmentInfos) LogMergePolicy.MaxMergeDocs LogMergePolicy.ToString() MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class LogByteSizeMergePolicy : LogMergePolicy, IDisposable Constructors | Improve this Doc View Source LogByteSizeMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public LogByteSizeMergePolicy() Fields | Improve this Doc View Source DEFAULT_MAX_MERGE_MB Default maximum segment size. A segment of this size or larger will never be merged. Declaration public static readonly double DEFAULT_MAX_MERGE_MB Field Value Type Description System.Double See Also MaxMergeMB | Improve this Doc View Source DEFAULT_MAX_MERGE_MB_FOR_FORCED_MERGE Default maximum segment size. A segment of this size or larger will never be merged during ForceMerge(Int32) . Declaration public static readonly double DEFAULT_MAX_MERGE_MB_FOR_FORCED_MERGE Field Value Type Description System.Double See Also MaxMergeMBForForcedMerge | Improve this Doc View Source DEFAULT_MIN_MERGE_MB Default minimum segment size. Declaration public static readonly double DEFAULT_MIN_MERGE_MB Field Value Type Description System.Double See Also MinMergeMB Properties | Improve this Doc View Source MaxMergeMB Determines the largest segment (measured by total byte size of the segment's files, in MB) that may be merged with other segments. Small values (e.g., less than 50 MB) are best for interactive indexing, as this limits the length of pauses while indexing to a few seconds. Larger values are best for batched indexing and speedier searches. Note that MaxMergeDocs is also used to check whether a segment is too large for merging (it's either or). Declaration public virtual double MaxMergeMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MaxMergeMBForForcedMerge Determines the largest segment (measured by total byte size of the segment's files, in MB) that may be merged with other segments during forceMerge. Setting it low will leave the index with more than 1 segment, even if ForceMerge(Int32) is called. Declaration public virtual double MaxMergeMBForForcedMerge { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MinMergeMB Sets the minimum size for the lowest level segments. Any segments below this size are considered to be on the same level (even if they vary drastically in size) and will be merged whenever there are mergeFactor of them. This effectively truncates the \"long tail\" of small segments that would otherwise be created into a single level. If you set this too large, it could greatly increase the merging cost during indexing (if you flush many small segments). Declaration public virtual double MinMergeMB { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Size(SegmentCommitInfo) Declaration protected override long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 Overrides MergePolicy.Size(SegmentCommitInfo) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.FinnishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.FinnishAnalyzer.html",
    "title": "Class FinnishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FinnishAnalyzer Analyzer for Finnish. Inheritance System.Object Analyzer StopwordAnalyzerBase FinnishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FinnishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source FinnishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public FinnishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source FinnishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public FinnishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source FinnishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public FinnishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Italian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"finnish_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.FinnishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.FinnishLightStemFilter.html",
    "title": "Class FinnishLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FinnishLightStemFilter A TokenFilter that applies FinnishLightStemmer to stem Finnish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FinnishLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FinnishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FinnishLightStemFilter(TokenStream) Declaration public FinnishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.FinnishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fi.FinnishLightStemFilterFactory.html",
    "title": "Class FinnishLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FinnishLightStemFilterFactory Factory for FinnishLightStemFilter . <fieldType name=\"text_filgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.FinnishLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory FinnishLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FinnishLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source FinnishLightStemFilterFactory(IDictionary<String, String>) Creates a new FinnishLightStemFilterFactory Declaration public FinnishLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchAnalyzer.html",
    "title": "Class FrenchAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchAnalyzer Analyzer for French language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating FrenchAnalyzer: As of 3.6, FrenchLightStemFilter is used for less aggressive stemming. As of 3.1, Snowball stemming is done with SnowballFilter , LowerCaseFilter is used prior to StopFilter , and ElisionFilter and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase FrenchAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source FrenchAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public FrenchAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source FrenchAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public FrenchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source FrenchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public FrenchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclutionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclutionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_ARTICLES Default set of articles for ElisionFilter Declaration public static readonly CharArraySet DEFAULT_ARTICLES Field Value Type Description CharArraySet | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default French stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"french_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, and FrenchLightStemFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchLightStemFilter.html",
    "title": "Class FrenchLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchLightStemFilter A TokenFilter that applies FrenchLightStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchLightStemFilter(TokenStream) Declaration public FrenchLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchLightStemFilterFactory.html",
    "title": "Class FrenchLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchLightStemFilterFactory Factory for FrenchLightStemFilter . <fieldType name=\"text_frlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory FrenchLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source FrenchLightStemFilterFactory(IDictionary<String, String>) Creates a new FrenchLightStemFilterFactory Declaration public FrenchLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilter.html",
    "title": "Class FrenchMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchMinimalStemFilter A TokenFilter that applies FrenchMinimalStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class FrenchMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchMinimalStemFilter(TokenStream) Declaration public FrenchMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.UnknownDictionaryWriter.html",
    "title": "Class UnknownDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionaryWriter Inheritance System.Object BinaryDictionaryWriter UnknownDictionaryWriter Inherited Members BinaryDictionaryWriter.m_implClazz BinaryDictionaryWriter.m_buffer BinaryDictionaryWriter.SharedPrefix(String, String) BinaryDictionaryWriter.AddMapping(Int32, Int32) BinaryDictionaryWriter.GetBaseFileName(String) BinaryDictionaryWriter.WriteTargetMap(String) BinaryDictionaryWriter.WritePosDict(String) BinaryDictionaryWriter.WriteDictionary(String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionaryWriter : BinaryDictionaryWriter Constructors | Improve this Doc View Source UnknownDictionaryWriter(Int32) Declaration public UnknownDictionaryWriter(int size) Parameters Type Name Description System.Int32 size Methods | Improve this Doc View Source Put(String[]) Declaration public override int Put(string[] entry) Parameters Type Name Description System.String [] entry Returns Type Description System.Int32 Overrides BinaryDictionaryWriter.Put(String[]) | Improve this Doc View Source PutCharacterCategory(Int32, String) Put mapping from unicode code point to character class. Declaration public virtual void PutCharacterCategory(int codePoint, string characterClassName) Parameters Type Name Description System.Int32 codePoint Code point. System.String characterClassName Character class name. | Improve this Doc View Source PutInvokeDefinition(String, Int32, Int32, Int32) Declaration public virtual void PutInvokeDefinition(string characterClassName, int invoke, int group, int length) Parameters Type Name Description System.String characterClassName System.Int32 invoke System.Int32 group System.Int32 length | Improve this Doc View Source Write(String) Declaration public override void Write(string baseDir) Parameters Type Name Description System.String baseDir Overrides BinaryDictionaryWriter.Write(String)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.LatvianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.LatvianAnalyzer.html",
    "title": "Class LatvianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LatvianAnalyzer Analyzer for Latvian. Inheritance System.Object Analyzer StopwordAnalyzerBase LatvianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LatvianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source LatvianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public LatvianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source LatvianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public LatvianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source LatvianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public LatvianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Latvian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and LatvianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferedInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferedInputIterator.html",
    "title": "Class BufferedInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedInputIterator This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferedInputIterator UnsortedInputIterator Implements IInputIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class BufferedInputIterator : IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source BufferedInputIterator(IInputIterator) Creates a new iterator, buffering entries from the specified iterator Declaration public BufferedInputIterator(IInputIterator source) Parameters Type Name Description IInputIterator source Fields | Improve this Doc View Source m_contextSets buffered context set entries Declaration protected IList<IEnumerable<BytesRef>> m_contextSets Field Value Type Description System.Collections.Generic.IList < System.Collections.Generic.IEnumerable < BytesRef >> | Improve this Doc View Source m_curPos current buffer position Declaration protected int m_curPos Field Value Type Description System.Int32 | Improve this Doc View Source m_entries buffered term entries Declaration protected BytesRefArray m_entries Field Value Type Description BytesRefArray | Improve this Doc View Source m_freqs buffered weights, parallel with m_entries Declaration protected long[] m_freqs Field Value Type Description System.Int64 [] | Improve this Doc View Source m_payloads buffered payload entries Declaration protected BytesRefArray m_payloads Field Value Type Description BytesRefArray Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferingTermFreqIteratorWrapper.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.BufferingTermFreqIteratorWrapper.html",
    "title": "Class BufferingTermFreqIteratorWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferingTermFreqIteratorWrapper This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BufferingTermFreqIteratorWrapper Implements ITermFreqIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class BufferingTermFreqIteratorWrapper : ITermFreqIterator, IBytesRefIterator Constructors | Improve this Doc View Source BufferingTermFreqIteratorWrapper(ITermFreqIterator) Creates a new iterator, buffering entries from the specified iterator Declaration public BufferingTermFreqIteratorWrapper(ITermFreqIterator source) Parameters Type Name Description ITermFreqIterator source Fields | Improve this Doc View Source m_curPos current buffer position Declaration protected int m_curPos Field Value Type Description System.Int32 | Improve this Doc View Source m_entries buffered term entries Declaration protected BytesRefArray m_entries Field Value Type Description BytesRefArray | Improve this Doc View Source m_freqs buffered weights, parallel with m_entries Declaration protected long[] m_freqs Field Value Type Description System.Int64 [] Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements ITermFreqIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.DocumentInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.DocumentInputIterator.html",
    "title": "Class DocumentDictionary.DocumentInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentDictionary.DocumentInputIterator Implements IInputIterator from stored fields. Inheritance System.Object DocumentDictionary.DocumentInputIterator Implements IInputIterator IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax protected class DocumentInputIterator : IInputIterator, IBytesRefIterator Constructors | Improve this Doc View Source DocumentInputIterator(DocumentDictionary, Boolean, Boolean) Creates an iterator over term, weight and payload fields from the lucene index. setting HasPayloads to false, implies an iterator over only term and weight. Declaration public DocumentInputIterator(DocumentDictionary outerInstance, bool hasPayloads, bool hasContexts) Parameters Type Name Description DocumentDictionary outerInstance System.Boolean hasPayloads System.Boolean hasContexts Properties | Improve this Doc View Source Comparer Declaration public virtual IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Contexts Declaration public virtual IEnumerable<BytesRef> Contexts { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > | Improve this Doc View Source HasContexts Declaration public virtual bool HasContexts { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Declaration public virtual bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Payload Declaration public virtual BytesRef Payload { get; } Property Value Type Description BytesRef | Improve this Doc View Source Weight Declaration public virtual long Weight { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetWeight(Document, Int32) Returns the value of the Weight property for the current document. Retrieves the value for the Weight property if its stored (using doc ) or if its indexed as NumericDocValues (using docId ) for the document. If no value is found, then the weight is 0. Declaration protected virtual long GetWeight(Document doc, int docId) Parameters Type Name Description Document doc System.Int32 docId Returns Type Description System.Int64 | Improve this Doc View Source Next() Declaration public virtual BytesRef Next() Returns Type Description BytesRef Implements IInputIterator IBytesRefIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentDictionary.html",
    "title": "Class DocumentDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentDictionary Dictionary with terms, weights, payload (optional) and contexts (optional) information taken from stored/indexed fields in a Lucene index. NOTE: The term and (optionally) payload fields have to be stored The weight field can be stored or can be a NumericDocValues . If the weight field is not defined, the value of the weight is 0 if any of the term or (optionally) payload fields supplied do not have a value for a document, then the document is skipped by the dictionary Inheritance System.Object DocumentDictionary DocumentValueSourceDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class DocumentDictionary : IDictionary Constructors | Improve this Doc View Source DocumentDictionary(IndexReader, String, String) Creates a new dictionary with the contents of the fields named field for the terms and weightField for the weights that will be used for the corresponding terms. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField) Parameters Type Name Description IndexReader reader System.String field System.String weightField | Improve this Doc View Source DocumentDictionary(IndexReader, String, String, String) Creates a new dictionary with the contents of the fields named field for the terms, weightField for the weights that will be used for the the corresponding terms and payloadField for the corresponding payloads for the entry. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField, string payloadField) Parameters Type Name Description IndexReader reader System.String field System.String weightField System.String payloadField | Improve this Doc View Source DocumentDictionary(IndexReader, String, String, String, String) Creates a new dictionary with the contents of the fields named field for the terms, weightField for the weights that will be used for the the corresponding terms, payloadField for the corresponding payloads for the entry and contextsField for associated contexts. Declaration public DocumentDictionary(IndexReader reader, string field, string weightField, string payloadField, string contextsField) Parameters Type Name Description IndexReader reader System.String field System.String weightField System.String payloadField System.String contextsField Fields | Improve this Doc View Source m_contextsField Field to read contexts from Declaration protected readonly string m_contextsField Field Value Type Description System.String | Improve this Doc View Source m_payloadField Field to read payload from Declaration protected readonly string m_payloadField Field Value Type Description System.String | Improve this Doc View Source m_reader IndexReader to load documents from Declaration protected readonly IndexReader m_reader Field Value Type Description IndexReader Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentValueSourceDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.DocumentValueSourceDictionary.html",
    "title": "Class DocumentValueSourceDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentValueSourceDictionary Dictionary with terms and optionally payload information taken from stored fields in a Lucene index. Similar to DocumentDictionary , except it obtains the weight of the terms in a document based on a ValueSource . NOTE: The term and (optionally) payload fields have to be stored if the term or (optionally) payload fields supplied do not have a value for a document, then the document is rejected by the dictionary In practice the ValueSource will likely be obtained using the lucene expression module. The following example shows how to create a ValueSource from a simple addition of two fields: Expression expression = JavascriptCompiler.Compile(\"f1 + f2\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"f1\", SortField.Type_e.LONG)); bindings.Add(new SortField(\"f2\", SortField.Type_e.LONG)); ValueSource valueSource = expression.GetValueSource(bindings); Inheritance System.Object DocumentDictionary DocumentValueSourceDictionary Implements IDictionary Inherited Members DocumentDictionary.m_reader DocumentDictionary.m_payloadField DocumentDictionary.m_contextsField System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class DocumentValueSourceDictionary : DocumentDictionary, IDictionary Constructors | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource) Creates a new dictionary with the contents of the fields named field for the terms and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource, String) Creates a new dictionary with the contents of the fields named field for the terms, payload for the corresponding payloads and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource, string payload) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource System.String payload | Improve this Doc View Source DocumentValueSourceDictionary(IndexReader, String, ValueSource, String, String) Creates a new dictionary with the contents of the fields named field for the terms, payload for the corresponding payloads, contexts for the associated contexts and uses the weightsValueSource supplied to determine the score. Declaration public DocumentValueSourceDictionary(IndexReader reader, string field, ValueSource weightsValueSource, string payload, string contexts) Parameters Type Name Description IndexReader reader System.String field ValueSource weightsValueSource System.String payload System.String contexts Methods | Improve this Doc View Source GetEntryIterator() Declaration public override IInputIterator GetEntryIterator() Returns Type Description IInputIterator Overrides DocumentDictionary.GetEntryIterator() Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.FileDictionary.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.FileDictionary.html",
    "title": "Class FileDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileDictionary Dictionary represented by a text file. Format allowed: 1 entry per line: An entry can be: suggestion suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter payload where the default Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter is DEFAULT_FIELD_DELIMITER (a tab) NOTE: In order to have payload enabled, the first entry has to have a payload If the weight for an entry is not specified then a value of 1 is used A payload cannot be specified without having the weight specified for an entry If the payload for an entry is not specified (assuming payload is enabled) then an empty payload is returned An entry cannot have more than two Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter s Example: word1 word2 TAB 100 TAB payload1 word3 TAB 101 word4 word3 TAB 102 Inheritance System.Object FileDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public class FileDictionary : IDictionary Constructors | Improve this Doc View Source FileDictionary(Stream) Creates a dictionary based on an inputstream. Using DEFAULT_FIELD_DELIMITER as the field seperator in a line. NOTE: content is treated as UTF-8 Declaration public FileDictionary(Stream dictFile) Parameters Type Name Description System.IO.Stream dictFile | Improve this Doc View Source FileDictionary(Stream, String) Creates a dictionary based on an inputstream. Using fieldDelimiter to seperate out the fields in a line. NOTE: content is treated as UTF-8 Declaration public FileDictionary(Stream dictFile, string fieldDelimiter) Parameters Type Name Description System.IO.Stream dictFile System.String fieldDelimiter | Improve this Doc View Source FileDictionary(TextReader) Creates a dictionary based on a reader. Using DEFAULT_FIELD_DELIMITER as the field seperator in a line. Declaration public FileDictionary(TextReader reader) Parameters Type Name Description System.IO.TextReader reader | Improve this Doc View Source FileDictionary(TextReader, String) Creates a dictionary based on a reader. Using fieldDelimiter to seperate out the fields in a line. Declaration public FileDictionary(TextReader reader, string fieldDelimiter) Parameters Type Name Description System.IO.TextReader reader System.String fieldDelimiter Fields | Improve this Doc View Source DEFAULT_FIELD_DELIMITER Tab-delimited fields are most common thus the default, but one can override this via the constructor Declaration public const string DEFAULT_FIELD_DELIMITER = \"\\t\" Field Value Type Description System.String Methods | Improve this Doc View Source GetEntryIterator() Declaration public virtual IInputIterator GetEntryIterator() Returns Type Description IInputIterator Implements IDictionary"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.ExternalRefSorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.ExternalRefSorter.html",
    "title": "Class ExternalRefSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExternalRefSorter Builds and iterates over sequences stored on disk. Inheritance System.Object ExternalRefSorter Implements IBytesRefSorter System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class ExternalRefSorter : IBytesRefSorter, IDisposable Constructors | Improve this Doc View Source ExternalRefSorter(OfflineSorter) Will buffer all sequences to a temporary file and then sort (all on-disk). Declaration public ExternalRefSorter(OfflineSorter sort) Parameters Type Name Description OfflineSorter sort Properties | Improve this Doc View Source Comparer Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Declaration public virtual void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 | Improve this Doc View Source Dispose() Removes any written temporary files. Declaration public virtual void Dispose() | Improve this Doc View Source GetIterator() Declaration public virtual IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator Implements IBytesRefSorter System.IDisposable"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.Completion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.Completion.html",
    "title": "Class FSTCompletion.Completion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTCompletion.Completion A single completion for a given key. Inheritance System.Object FSTCompletion.Completion Implements System.IComparable < FSTCompletion.Completion > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public sealed class Completion : IComparable<FSTCompletion.Completion> Properties | Improve this Doc View Source Bucket source bucket (weight) of the suggestion Declaration public int Bucket { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Utf8 UTF-8 bytes of the suggestion Declaration public BytesRef Utf8 { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source CompareTo(FSTCompletion.Completion) Declaration public int CompareTo(FSTCompletion.Completion o) Parameters Type Name Description FSTCompletion.Completion o Returns Type Description System.Int32 See Also CompareTo(Object) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.GlobalReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.GlobalReuseStrategy.html",
    "title": "Class Analyzer.GlobalReuseStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Analyzer.GlobalReuseStrategy Implementation of ReuseStrategy that reuses the same components for every field. Inheritance System.Object ReuseStrategy Analyzer.GlobalReuseStrategy Inherited Members ReuseStrategy.GetStoredValue(Analyzer) ReuseStrategy.SetStoredValue(Analyzer, Object) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax [Obsolete(\"this implementation class will be hidden in Lucene 5.0. Use Analyzer.GLOBAL_REUSE_STRATEGY instead!\")] public sealed class GlobalReuseStrategy : ReuseStrategy Constructors | Improve this Doc View Source GlobalReuseStrategy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration [Obsolete(\"Don't create instances of this class, use Analyzer.GLOBAL_REUSE_STRATEGY\")] public GlobalReuseStrategy() Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Declaration public override TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer System.String fieldName Returns Type Description TokenStreamComponents Overrides ReuseStrategy.GetReusableComponents(Analyzer, String) | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Declaration public override void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer System.String fieldName TokenStreamComponents components Overrides ReuseStrategy.SetReusableComponents(Analyzer, String, TokenStreamComponents) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.CharTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.CharTermAttribute.html",
    "title": "Class CharTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharTermAttribute Default implementation of ICharTermAttribute . Inheritance System.Object Attribute CharTermAttribute Token Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class CharTermAttribute : Attribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, IAttribute Constructors | Improve this Doc View Source CharTermAttribute() Initialize this attribute with empty term text Declaration public CharTermAttribute() Properties | Improve this Doc View Source Buffer Declaration public char[] Buffer { get; } Property Value Type Description System.Char [] | Improve this Doc View Source BytesRef Declaration public virtual BytesRef BytesRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Append(ICharTermAttribute) Declaration public ICharTermAttribute Append(ICharTermAttribute ta) Parameters Type Name Description ICharTermAttribute ta Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence) Declaration public ICharTermAttribute Append(ICharSequence csq) Parameters Type Name Description ICharSequence csq Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Declaration public ICharTermAttribute Append(ICharSequence csq, int start, int end) Parameters Type Name Description ICharSequence csq System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char) Declaration public ICharTermAttribute Append(char c) Parameters Type Name Description System.Char c Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char[]) Declaration public ICharTermAttribute Append(char[] chars) Parameters Type Name Description System.Char [] chars Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char[], Int32, Int32) Declaration public ICharTermAttribute Append(char[] chars, int start, int end) Parameters Type Name Description System.Char [] chars System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(String) Declaration public ICharTermAttribute Append(string s) Parameters Type Name Description System.String s Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(String, Int32, Int32) Declaration public ICharTermAttribute Append(string csq, int start, int end) Parameters Type Name Description System.String csq System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(StringBuilder) Declaration public ICharTermAttribute Append(StringBuilder s) Parameters Type Name Description System.Text.StringBuilder s Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Declaration public ICharTermAttribute Append(StringBuilder s, int start, int end) Parameters Type Name Description System.Text.StringBuilder s System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Attribute.Clone() | Improve this Doc View Source CopyBuffer(Char[], Int32, Int32) Declaration public void CopyBuffer(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer System.Int32 offset System.Int32 length | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source FillBytesRef() Declaration public virtual void FillBytesRef() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source ResizeBuffer(Int32) Declaration public char[] ResizeBuffer(int newSize) Parameters Type Name Description System.Int32 newSize Returns Type Description System.Char [] | Improve this Doc View Source SetEmpty() Declaration public ICharTermAttribute SetEmpty() Returns Type Description ICharTermAttribute | Improve this Doc View Source SetLength(Int32) Declaration public ICharTermAttribute SetLength(int length) Parameters Type Name Description System.Int32 length Returns Type Description ICharTermAttribute | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToString() Returns solely the term text as specified by the ICharSequence interface. this method changed the behavior with Lucene 3.1, before it returned a String representation of the whole term with all attributes. this affects especially the Token subclass. Declaration public override string ToString() Returns Type Description System.String Overrides Attribute.ToString() Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IOffsetAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.IOffsetAttribute.html",
    "title": "Interface IOffsetAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IOffsetAttribute The start and end character offset of a Token . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface IOffsetAttribute : IAttribute Properties | Improve this Doc View Source EndOffset Returns this Token 's ending offset, one greater than the position of the last character corresponding to this token in the source text. The length of the token in the source text is ( EndOffset - StartOffset ). Declaration int EndOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) | Improve this Doc View Source StartOffset Returns this Token 's starting offset, the position of the first character corresponding to this token in the source text. Note that the difference between EndOffset and StartOffset may not be equal to termText.Length, as the term text may have been altered by a stemmer or some other filter. Declaration int StartOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) Methods | Improve this Doc View Source SetOffset(Int32, Int32) Set the starting and ending offset. Declaration void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Exceptions Type Condition System.ArgumentException If startOffset or endOffset are negative, or if startOffset is greater than endOffset See Also StartOffset EndOffset Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITypeAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ITypeAttribute.html",
    "title": "Interface ITypeAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITypeAttribute A Token 's lexical type. The Default value is \"word\". Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ITypeAttribute : IAttribute Properties | Improve this Doc View Source Type Gets or Sets the lexical type. Declaration string Type { get; set; } Property Value Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionIncrementAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.PositionIncrementAttribute.html",
    "title": "Class PositionIncrementAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionIncrementAttribute Default implementation of IPositionIncrementAttribute . Inheritance System.Object Attribute PositionIncrementAttribute Implements IPositionIncrementAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class PositionIncrementAttribute : Attribute, IPositionIncrementAttribute, IAttribute Constructors | Improve this Doc View Source PositionIncrementAttribute() Initialize this attribute with position increment of 1 Declaration public PositionIncrementAttribute() Properties | Improve this Doc View Source PositionIncrement Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IPositionIncrementAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Tokenizer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Tokenizer.html",
    "title": "Class Tokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Tokenizer A Tokenizer is a TokenStream whose input is a System.IO.TextReader . This is an abstract class; subclasses must override IncrementToken() NOTE: Subclasses overriding IncrementToken() must call ClearAttributes() before setting attributes. Inheritance System.Object AttributeSource TokenStream Tokenizer Implements System.IDisposable Inherited Members TokenStream.IncrementToken() TokenStream.End() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class Tokenizer : TokenStream, IDisposable Constructors | Improve this Doc View Source Tokenizer(AttributeSource.AttributeFactory, TextReader) Construct a token stream processing the given input using the given AttributeSource.AttributeFactory . Declaration protected Tokenizer(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source Tokenizer(TextReader) Construct a token stream processing the given input. Declaration protected Tokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input Fields | Improve this Doc View Source m_input The text source for this Tokenizer . Declaration protected TextReader m_input Field Value Type Description System.IO.TextReader Methods | Improve this Doc View Source CorrectOffset(Int32) Return the corrected offset. If m_input is a CharFilter subclass this method calls CorrectOffset(Int32) , else returns currentOff . Declaration protected int CorrectOffset(int currentOff) Parameters Type Name Description System.Int32 currentOff offset as seen in the output Returns Type Description System.Int32 corrected offset based on the input See Also CorrectOffset(Int32) | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on reuse). Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) Remarks NOTE: The default implementation closes the input System.IO.TextReader , so be sure to call base.Dispose(disposing) when overriding this method. | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetReader(TextReader) Expert: Set a new reader on the Tokenizer . Typically, an analyzer (in its tokenStream method) will use this to re-use a previously created tokenizer. Declaration public void SetReader(TextReader input) Parameters Type Name Description System.IO.TextReader input Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTermState.html",
    "title": "Class BlockTermState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTermState Holds all state required for PostingsReaderBase to produce a DocsEnum without re-seeking the terms dict. Inheritance System.Object TermState OrdTermState BlockTermState Lucene41PostingsWriter.Int32BlockTermState Inherited Members OrdTermState.Ord TermState.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTermState : OrdTermState Constructors | Improve this Doc View Source BlockTermState() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected BlockTermState() Properties | Improve this Doc View Source BlockFilePointer File pointer into the terms dict primary file (_X.tim) that holds this term. Declaration public long BlockFilePointer { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source DocFreq How many docs have this term? Declaration public int DocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TermBlockOrd The term's ord in the current block. Declaration public int TermBlockOrd { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTermFreq Total number of occurrences of this term. Declaration public long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides OrdTermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides OrdTermState.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingStoredFieldsWriter.html",
    "title": "Class CompressingStoredFieldsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingStoredFieldsWriter StoredFieldsWriter impl for CompressingStoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter CompressingStoredFieldsWriter Implements System.IDisposable Inherited Members StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) StoredFieldsWriter.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingStoredFieldsWriter : StoredFieldsWriter, IDisposable Constructors | Improve this Doc View Source CompressingStoredFieldsWriter(Directory, SegmentInfo, String, IOContext, String, CompressionMode, Int32) Sole constructor. Declaration public CompressingStoredFieldsWriter(Directory directory, SegmentInfo si, string segmentSuffix, IOContext context, string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description Directory directory SegmentInfo si System.String segmentSuffix IOContext context System.String formatName CompressionMode compressionMode System.Int32 chunkSize Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides StoredFieldsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides StoredFieldsWriter.FinishDocument() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides StoredFieldsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields Overrides StoredFieldsWriter.StartDocument(Int32) | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormatNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormatNameAttribute.html",
    "title": "Class DocValuesFormatNameAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesFormatNameAttribute Represents an attribute that is used to name a DocValuesFormat , if a name other than the default DocValuesFormat naming convention is desired. Inheritance System.Object System.Attribute ServiceNameAttribute DocValuesFormatNameAttribute Inherited Members ServiceNameAttribute.Name System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public sealed class DocValuesFormatNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source DocValuesFormatNameAttribute(String) Declaration public DocValuesFormatNameAttribute(string name) Parameters Type Name Description System.String name Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesProducer.html",
    "title": "Class DocValuesProducer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesProducer Abstract API that produces numeric, binary and sorted docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesProducer Lucene45DocValuesProducer Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesProducer : IDisposable Constructors | Improve this Doc View Source DocValuesProducer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocValuesProducer() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this producer. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public virtual void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetBinary(FieldInfo) Returns BinaryDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract BinaryDocValues GetBinary(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocsWithField(FieldInfo) Returns a IBits at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits | Improve this Doc View Source GetNumeric(FieldInfo) Returns NumericDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract NumericDocValues GetNumeric(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description NumericDocValues | Improve this Doc View Source GetSorted(FieldInfo) Returns SortedDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract SortedDocValues GetSorted(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedDocValues | Improve this Doc View Source GetSortedSet(FieldInfo) Returns SortedSetDocValues for this field. The returned instance need not be thread-safe: it will only be used by a single thread. Declaration public abstract SortedSetDocValues GetSortedSet(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedSetDocValues | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsBaseFormat.html",
    "title": "Class Lucene40PostingsBaseFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . Inheritance System.Object PostingsBaseFormat Lucene40PostingsBaseFormat Inherited Members PostingsBaseFormat.Name System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] public sealed class Lucene40PostingsBaseFormat : PostingsBaseFormat Constructors | Improve this Doc View Source Lucene40PostingsBaseFormat() Sole constructor. Declaration public Lucene40PostingsBaseFormat() Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Declaration public override PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase Overrides PostingsBaseFormat.PostingsReaderBase(SegmentReadState) | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Declaration public override PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase Overrides PostingsBaseFormat.PostingsWriterBase(SegmentWriteState) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40PostingsFormat.html",
    "title": "Class Lucene40PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40PostingsFormat Lucene 4.0 Postings format. Files: .tim : Term Dictionary .tip : Term Index .frq : Frequencies .prx : Positions Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions and skip data in the .frq and .prx files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections described here: Postings Metadata --> Header, SkipInterval, MaxSkipLevels, SkipMinimum Term Metadata --> FreqDelta, SkipDelta?, ProxDelta? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SkipInterval,MaxSkipLevels,SkipMinimum --> Uint32 ( WriteInt32(Int32) ) SkipDelta,FreqDelta,ProxDelta --> VLong ( WriteVInt64(Int64) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. SkipInterval is the fraction of TermDocs stored in skip tables. It is used to accelerate Advance(Int32) . Larger values result in smaller indexes, greater acceleration, but fewer accelerable cases, while smaller values result in bigger indexes, less acceleration (in case of a small value for MaxSkipLevels) and more accelerable cases. MaxSkipLevels is the max. number of skip levels stored for each term in the .frq file. A low value results in smaller indexes but less acceleration, a larger value results in slightly larger indexes but greater acceleration. See format of .frq file for more information about skip levels. SkipMinimum is the minimum document frequency a term must have in order to write any skip data at all. FreqDelta determines the position of this term's TermFreqs within the .frq file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block). ProxDelta determines the position of this term's TermPositions within the .prx file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block. For fields that omit position data, this will be 0 since prox information is not stored. SkipDelta determines the position of this term's SkipData within the .frq file. In particular, it is the number of bytes after TermFreqs that the SkipData starts. In other words, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies The .frq file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). FreqFile (.frq) --> Header, <TermFreqs, SkipData?> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <TermFreq> DocFreq TermFreq --> DocDelta[, Freq?] SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel> <SkipDatum> SkipLevel --> <SkipDatum> DocFreq/(SkipInterval^(Level + 1)) SkipDatum --> DocSkip,PayloadLength?,OffsetLength?,FreqSkip,ProxSkip,SkipChildLevelPointer? DocDelta,Freq,DocSkip,PayloadLength,OffsetLength,FreqSkip,ProxSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) TermFreqs are ordered by term (the term is implicit, from the term dictionary). TermFreq entries are ordered by increasing document number. DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 DocSkip records the document number before every SkipInterval th document in TermFreqs. If payloads and offsets are disabled for the term's field, then DocSkip represents the difference from the previous value in the sequence. If payloads and/or offsets are enabled for the term's field, then DocSkip/2 represents the difference from the previous value in the sequence. In this case when DocSkip is odd, then PayloadLength and/or OffsetLength are stored indicating the length of the last payload/offset before the SkipInterval th document in TermPositions. PayloadLength indicates the length of the last payload. OffsetLength indicates the length of the last offset (endOffset-startOffset). FreqSkip and ProxSkip record the position of every SkipInterval th entry in FreqFile and ProxFile, respectively. File positions are relative to the start of TermFreqs and Positions, to the previous SkipDatum in the sequence. For example, if DocFreq=35 and SkipInterval=16, then there are two SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The first FreqSkip names the number of bytes after the beginning of TermFreqs that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. The first ProxSkip names the number of bytes after the beginning of Positions that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. Each term can have multiple skip levels. The amount of skip levels for a term is NumSkipLevels = Min(MaxSkipLevels, floor(log(DocFreq/log(SkipInterval)))). The number of SkipData entries for a skip level is DocFreq/(SkipInterval^(Level + 1)), whereas the lowest skip level is Level=0. Example: SkipInterval = 4, MaxSkipLevels = 2, DocFreq = 35. Then skip level 0 has 8 SkipData entries, containing the 3 rd , 7 th , 11 th , 15 th , 19 th , 23 rd , 27 th , and 31 st document numbers in TermFreqs. Skip level 1 has 2 SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The SkipData entries on all upper levels > 0 contain a SkipChildLevelPointer referencing the corresponding SkipData entry in level-1. In the example has entry 15 on level 1 a pointer to entry 15 on level 0 and entry 31 on level 1 a pointer to entry 31 on level 0. Positions The .prx file contains the lists of positions that each term occurs at within documents. Note that fields omitting positional data do not store anything into this file, and if all fields in the index omit positional data then the .prx file will not exist. ProxFile (.prx) --> Header, <TermPositions> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <Positions> DocFreq Positions --> <PositionDelta,PayloadLength?,OffsetDelta?,OffsetLength?,PayloadData?> Freq PositionDelta,OffsetDelta,OffsetLength,PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayloadLength TermPositions are ordered by term (the term is implicit, from the term dictionary). Positions entries are ordered by increasing document number (the document number is implicit from the .frq file). PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Inheritance System.Object PostingsFormat Lucene40PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] [PostingsFormatName(\"Lucene40\")] public class Lucene40PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source Lucene40PostingsFormat() Creates Lucene40PostingsFormat with default settings. Declaration public Lucene40PostingsFormat() Fields | Improve this Doc View Source m_maxBlockSize Maximum items (terms or sub-blocks) per block for BlockTree. Declaration protected readonly int m_maxBlockSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minBlockSize Minimum items (terms or sub-blocks) per block for BlockTree. Declaration protected readonly int m_minBlockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41Codec.html",
    "title": "Class Lucene41Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41Codec Implements the Lucene 4.1 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene41 package documentation for file format details. @lucene.experimental Inheritance System.Object Codec Lucene41Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 segments\")] [CodecName(\"Lucene41\")] public class Lucene41Codec : Codec Constructors | Improve this Doc View Source Lucene41Codec() Sole constructor. Declaration public Lucene41Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42NormsFormat.html",
    "title": "Class Lucene42NormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42NormsFormat Lucene 4.2 score normalization format. NOTE: this uses the same format as Lucene42DocValuesFormat Numeric DocValues, but with different file extensions, and passing FASTEST for uncompressed encoding: trading off space for performance. Files: .nvd : DocValues data .nvm : DocValues metadata Inheritance System.Object NormsFormat Lucene42NormsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public class Lucene42NormsFormat : NormsFormat Constructors | Improve this Doc View Source Lucene42NormsFormat() Calls Lucene42DocValuesFormat(PackedInt32s.FASTEST) ( Lucene42NormsFormat(Single) ). Declaration public Lucene42NormsFormat() | Improve this Doc View Source Lucene42NormsFormat(Single) Creates a new Lucene42DocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public Lucene42NormsFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState) Extension Methods Number.IsNumber(Object) See Also Lucene42DocValuesFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.Lucene42TermVectorsFormat.html",
    "title": "Class Lucene42TermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene42TermVectorsFormat Lucene 4.2 term vectors format ( TermVectorsFormat ). Very similarly to Lucene41StoredFieldsFormat , this format is based on compressed chunks of data, with document-level granularity so that a document can never span across distinct chunks. Moreover, data is made as compact as possible: textual data is compressed using the very light, LZ4 compression algorithm, binary data is written using fixed-size blocks of packed System.Int32 s ( PackedInt32s ). Term vectors are stored using two files a data file where terms, frequencies, positions, offsets and payloads are stored, an index file, loaded into memory, used to locate specific documents in the data file. Looking up term vectors for any document requires at most 1 disk seek. File formats A vector data file (extension .tvd ). this file stores terms, frequencies, positions, offsets and payloads for every document. Upon writing a new segment, it accumulates data into memory until the buffer used to store terms and payloads grows beyond 4KB. Then it flushes all metadata, terms and positions to disk using LZ4 compression for terms and payloads and blocks of packed System.Int32 s ( BlockPackedWriter ) for positions. Here is a more detailed description of the field data file format: VectorData (.tvd) --> <Header>, PackedIntsVersion, ChunkSize, <Chunk> ChunkCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkSize is the number of bytes of terms to accumulate before flushing, as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, < NumFields >, < FieldNums >, < FieldNumOffs >, < Flags >, < NumTerms >, < TermLengths >, < TermFreqs >, < Positions >, < StartOffsets >, < Lengths >, < PayloadLengths >, < TermAndPayloads > DocBase is the ID of the first doc of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs is the number of documents in the chunk NumFields --> DocNumFields ChunkDocs DocNumFields is the number of fields for each doc, written as a VInt ( WriteVInt32(Int32) ) if ChunkDocs==1 and as a PackedInt32s array otherwise FieldNums --> FieldNumDelta TotalDistincFields , a delta-encoded list of the sorted unique field numbers present in the chunk FieldNumOffs --> FieldNumOff TotalFields , as a PackedInt32s array FieldNumOff is the offset of the field number in FieldNums TotalFields is the total number of fields (sum of the values of NumFields) Flags --> Bit < FieldFlags > Bit is a single bit which when true means that fields have the same options for every document in the chunk FieldFlags --> if Bit==1: Flag TotalDistinctFields else Flag TotalFields Flag: a 3-bits int where: the first bit means that the field has positions the second bit means that the field has offsets the third bit means that the field has payloads NumTerms --> FieldNumTerms TotalFields FieldNumTerms: the number of terms for each field, using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermLengths --> PrefixLength TotalTerms SuffixLength TotalTerms TotalTerms: total number of terms (sum of NumTerms) PrefixLength: 0 for the first term of a field, the common prefix with the previous term otherwise using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) SuffixLength: length of the term minus PrefixLength for every term using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermFreqs --> TermFreqMinus1 TotalTerms TermFreqMinus1: (frequency - 1) for each term using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) Positions --> PositionDelta TotalPositions TotalPositions is the sum of frequencies of terms of all fields that have positions PositionDelta: the absolute position for the first position of a term, and the difference with the previous positions for following positions using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) StartOffsets --> (AvgCharsPerTerm TotalDistinctFields ) StartOffsetDelta TotalOffsets TotalOffsets is the sum of frequencies of terms of all fields that have offsets AvgCharsPerTerm: average number of chars per term, encoded as a float on 4 bytes. They are not present if no field has both positions and offsets enabled. StartOffsetDelta: (startOffset - previousStartOffset - AvgCharsPerTerm * PositionDelta). previousStartOffset is 0 for the first offset and AvgCharsPerTerm is 0 if the field has no positions using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) Lengths --> LengthMinusTermLength TotalOffsets LengthMinusTermLength: (endOffset - startOffset - termLength) using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) PayloadLengths --> PayloadLength TotalPayloads TotalPayloads is the sum of frequencies of terms of all fields that have payloads PayloadLength is the payload length encoded using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermAndPayloads --> LZ4-compressed representation of < FieldTermsAndPayLoads > TotalFields FieldTermsAndPayLoads --> Terms (Payloads) Terms: term bytes Payloads: payload bytes (if the field has payloads) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) An index file (extension .tvx ). VectorIndex (.tvx) --> <Header>, <ChunkIndex>, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene42TermVectorsFormat Inherited Members CompressingTermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) CompressingTermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext) CompressingTermVectorsFormat.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene42 Assembly : Lucene.Net.dll Syntax public sealed class Lucene42TermVectorsFormat : CompressingTermVectorsFormat Constructors | Improve this Doc View Source Lucene42TermVectorsFormat() Sole constructor. Declaration public Lucene42TermVectorsFormat() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoReader.html",
    "title": "Class Lucene46SegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46SegmentInfoReader Lucene 4.6 implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader Lucene46SegmentInfoReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoReader : SegmentInfoReader Constructors | Improve this Doc View Source Lucene46SegmentInfoReader() Sole constructor. Declaration public Lucene46SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory dir, string segment, IOContext context) Parameters Type Name Description Directory dir System.String segment IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext) Extension Methods Number.IsNumber(Object) See Also Lucene46SegmentInfoFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46SegmentInfoWriter.html",
    "title": "Class Lucene46SegmentInfoWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter Lucene46SegmentInfoWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax public class Lucene46SegmentInfoWriter : SegmentInfoWriter Constructors | Improve this Doc View Source Lucene46SegmentInfoWriter() Sole constructor. Declaration public Lucene46SegmentInfoWriter() Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Save a single segment's info. Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext) Extension Methods Number.IsNumber(Object) See Also Lucene46SegmentInfoFormat"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.IPulsingEnumAttribute.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.IPulsingEnumAttribute.html",
    "title": "Interface PulsingPostingsReader.IPulsingEnumAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface PulsingPostingsReader.IPulsingEnumAttribute A per-docsenum attribute that stores additional reuse information so that pulsing enums can keep a reference to their wrapped enums, and vice versa. this way we can always reuse. @lucene.internal Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public interface IPulsingEnumAttribute : IAttribute Properties | Improve this Doc View Source Enums Declaration IDictionary<PulsingPostingsReader, DocsEnum> Enums { get; } Property Value Type Description System.Collections.Generic.IDictionary < PulsingPostingsReader , DocsEnum >"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.PulsingEnumAttribute.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsReader.PulsingEnumAttribute.html",
    "title": "Class PulsingPostingsReader.PulsingEnumAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PulsingPostingsReader.PulsingEnumAttribute Implementation of PulsingPostingsReader.PulsingEnumAttribute for reuse of wrapped postings readers underneath pulsing. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute PulsingPostingsReader.PulsingEnumAttribute Implements PulsingPostingsReader.IPulsingEnumAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public sealed class PulsingEnumAttribute : Attribute, PulsingPostingsReader.IPulsingEnumAttribute, IAttribute Properties | Improve this Doc View Source Enums Declaration public IDictionary<PulsingPostingsReader, DocsEnum> Enums { get; } Property Value Type Description System.Collections.Generic.IDictionary < PulsingPostingsReader , DocsEnum > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements PulsingPostingsReader.IPulsingEnumAttribute IAttribute"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount.html",
    "title": "Class TermDistinctValuesCollector.GroupCount | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector.GroupCount < BytesRef > TermDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount < BytesRef > Inherited Members AbstractDistinctValuesCollector.GroupCount<BytesRef>.GroupValue AbstractDistinctValuesCollector.GroupCount<BytesRef>.UniqueValues System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class GroupCount : AbstractDistinctValuesCollector.GroupCount<BytesRef>, AbstractDistinctValuesCollector.IGroupCount<BytesRef> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.html",
    "title": "Class TermDistinctValuesCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermDistinctValuesCollector A term based implementation of AbstractDistinctValuesCollector{TermDistinctValuesCollector.GroupCount} that relies on SortedDocValues to count the distinct values per group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector < TermDistinctValuesCollector.GroupCount > TermDistinctValuesCollector Implements IAbstractDistinctValuesCollector < TermDistinctValuesCollector.GroupCount > ICollector Inherited Members AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>.AcceptsDocsOutOfOrder AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermDistinctValuesCollector : AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>, IAbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>, ICollector Constructors | Improve this Doc View Source TermDistinctValuesCollector(String, String, IEnumerable<ISearchGroup<BytesRef>>) Constructs TermDistinctValuesCollector instance. Declaration public TermDistinctValuesCollector(string groupField, string countField, IEnumerable<ISearchGroup<BytesRef>> groups) Parameters Type Name Description System.String groupField The field to group by System.String countField The field to count distinct values for System.Collections.Generic.IEnumerable < ISearchGroup < BytesRef >> groups The top N groups, collected during the first phase search Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<TermDistinctValuesCollector.GroupCount> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < TermDistinctValuesCollector.GroupCount > Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ga.IrishLowerCaseFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ga.IrishLowerCaseFilter.html",
    "title": "Class IrishLowerCaseFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IrishLowerCaseFilter Normalises token text to lower case, handling t-prothesis and n-eclipsis (i.e., that 'nAthair' should become 'n-athair') Inheritance System.Object AttributeSource TokenStream TokenFilter IrishLowerCaseFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ga Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IrishLowerCaseFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IrishLowerCaseFilter(TokenStream) Create an IrishLowerCaseFilter that normalises Irish token text. Declaration public IrishLowerCaseFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ga.IrishLowerCaseFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ga.IrishLowerCaseFilterFactory.html",
    "title": "Class IrishLowerCaseFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IrishLowerCaseFilterFactory Factory for IrishLowerCaseFilter . <fieldType name=\"text_ga\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IrishLowerCaseFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory IrishLowerCaseFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ga Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IrishLowerCaseFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source IrishLowerCaseFilterFactory(IDictionary<String, String>) Creates a new IrishLowerCaseFilterFactory Declaration public IrishLowerCaseFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.IndicNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.IndicNormalizationFilter.html",
    "title": "Class IndicNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndicNormalizationFilter A TokenFilter that applies IndicNormalizer to normalize text in Indian Languages. Inheritance System.Object AttributeSource TokenStream TokenFilter IndicNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndicNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IndicNormalizationFilter(TokenStream) Declaration public IndicNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.IndicNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.IndicNormalizationFilterFactory.html",
    "title": "Class IndicNormalizationFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndicNormalizationFilterFactory Factory for IndicNormalizationFilter . <fieldType name=\"text_innormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IndicNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory IndicNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndicNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source IndicNormalizationFilterFactory(IDictionary<String, String>) Creates a new IndicNormalizationFilterFactory Declaration public IndicNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.IndicTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.In.IndicTokenizer.html",
    "title": "Class IndicTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndicTokenizer Simple Tokenizer for text in Indian Languages. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer IndicTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.In Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.6) Use StandardTokenizer instead.\")] public sealed class IndicTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source IndicTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Declaration public IndicTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source IndicTokenizer(LuceneVersion, TextReader) Declaration public IndicTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion System.IO.TextReader input Methods | Improve this Doc View Source IsTokenChar(Int32) Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.ItalianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.ItalianAnalyzer.html",
    "title": "Class ItalianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItalianAnalyzer Analyzer for Italian. You must specify the required LuceneVersion compatibility when creating ItalianAnalyzer : As of 3.6, ItalianLightStemFilter is used for less aggressive stemming. As of 3.2, ElisionFilter with a set of Italian contractions is used by default. Inheritance System.Object Analyzer StopwordAnalyzerBase ItalianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ItalianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ItalianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ItalianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ItalianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ItalianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ItalianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public ItalianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Italian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"italian_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , ElisionFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and ItalianLightStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.IMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IMergeScheduler.html",
    "title": "Interface IMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMergeScheduler Inherited Members System.IDisposable.Dispose() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IMergeScheduler : IDisposable Methods | Improve this Doc View Source Clone() Declaration object Clone() Returns Type Description System.Object | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexCommit.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexCommit.html",
    "title": "Class IndexCommit | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexCommit Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader . Changes to the content of an index are made visible only after the writer who made that change commits by writing a new segments file ( segments_N ). This point in time, when the action of writing of a new segments file to the directory is completed, is an index commit. Each index commit point has a unique segments file associated with it. The segments file associated with a later index commit point would have a larger N. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexCommit Implements System.IComparable < IndexCommit > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexCommit : IComparable<IndexCommit> Constructors | Improve this Doc View Source IndexCommit() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected IndexCommit() Properties | Improve this Doc View Source Directory Returns the Directory for the index. Declaration public abstract Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FileNames Returns all index files referenced by this commit point. Declaration public abstract ICollection<string> FileNames { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source Generation Returns the generation (the _N in segments_N) for this IndexCommit Declaration public abstract long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsDeleted Returns true if this commit should be deleted; this is only used by IndexWriter after invoking the IndexDeletionPolicy . Declaration public abstract bool IsDeleted { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SegmentCount Returns number of segments referenced by this commit. Declaration public abstract int SegmentCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SegmentsFileName Get the segments file ( segments_N ) associated with this commit point. Declaration public abstract string SegmentsFileName { get; } Property Value Type Description System.String | Improve this Doc View Source UserData Returns userData, previously passed to SetCommitData(IDictionary<String, String>) } for this commit. The dictionary is System.String -> System.String . Declaration public abstract IDictionary<string, string> UserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > Methods | Improve this Doc View Source CompareTo(IndexCommit) Declaration public virtual int CompareTo(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description System.Int32 | Improve this Doc View Source Delete() Delete this commit point. This only applies when using the commit point in the context of IndexWriter 's IndexDeletionPolicy . Upon calling this, the writer is notified that this commit point should be deleted. Decision that a commit-point should be deleted is taken by the IndexDeletionPolicy in effect and therefore this should only be called by its OnInit<T>(IList<T>) or OnCommit<T>(IList<T>) methods. Declaration public abstract void Delete() | Improve this Doc View Source Equals(Object) Two IndexCommits are equal if both their Directory and versions are equal. Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements System.IComparable<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexDeletionPolicy.html",
    "title": "Class IndexDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexDeletionPolicy Expert: policy for deletion of stale IndexCommit s. Implement this interface, and pass it to one of the IndexWriter or IndexReader constructors, to customize when older point-in-time commits ( IndexCommit ) are deleted from the index directory. The default deletion policy is KeepOnlyLastCommitDeletionPolicy , which always removes old commits as soon as a new commit is done (this matches the behavior before 2.2). One expected use case for this (and the reason why it was first created) is to work around problems with an index directory accessed via filesystems like NFS because NFS does not provide the \"delete on last close\" semantics that Lucene's \"point in time\" search normally relies on. By implementing a custom deletion policy, such as \"a commit is only removed once it has been stale for more than X minutes\", you can give your readers time to refresh to the new commit before IndexWriter removes the old commits. Note that doing so will increase the storage requirements of the index. See LUCENE-710 for details. Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any other IndexWriter or Directory instance. Inheritance System.Object IndexDeletionPolicy KeepOnlyLastCommitDeletionPolicy NoDeletionPolicy SnapshotDeletionPolicy Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexDeletionPolicy Constructors | Improve this Doc View Source IndexDeletionPolicy() Sole constructor, typically called by sub-classes constructors. Declaration protected IndexDeletionPolicy() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source OnCommit<T>(IList<T>) this is called each time the writer completed a commit. this gives the policy a chance to remove old commit points with each commit. The policy may now choose to delete old commit points by calling method Delete() of IndexCommit . This method is only called when Commit() } or Dispose() is called, or possibly not at all if the Rollback() } method is called. Note: the last CommitPoint is the most recent one, i.e. the \"front index state\". Be careful not to delete it, unless you know for sure what you are doing, and unless you can afford to lose the index content while doing that. Declaration public abstract void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits List of IndexCommit s, sorted by age (the 0th one is the oldest commit). Type Parameters Name Description T | Improve this Doc View Source OnInit<T>(IList<T>) this is called once when a writer is first instantiated to give the policy a chance to remove old commit points. The writer locates all index commits present in the index directory and calls this method. The policy may choose to delete some of the commit points, doing so by calling method Delete() . Note: the last CommitPoint is the most recent one, i.e. the \"front index state\". Be careful not to delete it, unless you know for sure what you are doing, and unless you can afford to lose the index content while doing that. Declaration public abstract void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits List of current point-in-time commits ( IndexCommit ), sorted by age (the 0th one is the oldest commit). Note that for a new index this method is invoked with an empty list. Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt64Parser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IInt64Parser.html",
    "title": "Interface FieldCache.IInt64Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IInt64Parser Interface to parse System.Int64 from document fields. NOTE: This was LongParser in Lucene Inherited Members FieldCache.IParser.TermsEnum(Terms) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IInt64Parser : FieldCache.IParser Methods | Improve this Doc View Source ParseInt64(BytesRef) Return a System.Int64 representation of this field's value. NOTE: This was parseLong() in Lucene Declaration long ParseInt64(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object) See Also GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.ILevenshteinAutomataAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.ILevenshteinAutomataAttribute.html",
    "title": "Interface FuzzyTermsEnum.ILevenshteinAutomataAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FuzzyTermsEnum.ILevenshteinAutomataAttribute Reuses compiled automata across different segments, because they are independent of the index This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ILevenshteinAutomataAttribute : IAttribute Properties | Improve this Doc View Source Automata Declaration IList<CompiledAutomaton> Automata { get; } Property Value Type Description System.Collections.Generic.IList < CompiledAutomaton > Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.LevenshteinAutomataAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.LevenshteinAutomataAttribute.html",
    "title": "Class FuzzyTermsEnum.LevenshteinAutomataAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyTermsEnum.LevenshteinAutomataAttribute Stores compiled automata as a list (indexed by edit distance) This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute FuzzyTermsEnum.LevenshteinAutomataAttribute Implements FuzzyTermsEnum.ILevenshteinAutomataAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class LevenshteinAutomataAttribute : Attribute, FuzzyTermsEnum.ILevenshteinAutomataAttribute, IAttribute Properties | Improve this Doc View Source Automata Declaration public IList<CompiledAutomaton> Automata { get; } Property Value Type Description System.Collections.Generic.IList < CompiledAutomaton > Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements FuzzyTermsEnum.ILevenshteinAutomataAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyTermsEnum.html",
    "title": "Class FuzzyTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyTermsEnum Subclass of TermsEnum for enumerating all terms that are similar to the specified filter term. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FuzzyTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Attributes TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FuzzyTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FuzzyTermsEnum(Terms, AttributeSource, Term, Single, Int32, Boolean) Constructor for enumeration of all terms from specified reader which share a prefix of length prefixLength with term and which have a fuzzy similarity > minSimilarity . After calling the constructor the enumeration is already pointing to the first valid term if such a term exists. Declaration public FuzzyTermsEnum(Terms terms, AttributeSource atts, Term term, float minSimilarity, int prefixLength, bool transpositions) Parameters Type Name Description Terms terms Delivers terms. AttributeSource atts AttributeSource created by the rewrite method of MultiTermQuery thats contains information about competitive boosts during rewrite. It is also used to cache DFAs between segment transitions. Term term Pattern term. System.Single minSimilarity Minimum required similarity for terms from the reader. Pass an integer value representing edit distance. Passing a fraction is deprecated. System.Int32 prefixLength Length of required common prefix. Default value is 0. System.Boolean transpositions Transpositions Exceptions Type Condition System.IO.IOException if there is a low-level IO error Fields | Improve this Doc View Source m_maxEdits Declaration protected int m_maxEdits Field Value Type Description System.Int32 | Improve this Doc View Source m_minSimilarity Declaration protected readonly float m_minSimilarity Field Value Type Description System.Single | Improve this Doc View Source m_raw Declaration protected readonly bool m_raw Field Value Type Description System.Boolean | Improve this Doc View Source m_realPrefixLength Declaration protected readonly int m_realPrefixLength Field Value Type Description System.Int32 | Improve this Doc View Source m_scaleFactor Declaration protected readonly float m_scaleFactor Field Value Type Description System.Single | Improve this Doc View Source m_termLength Declaration protected readonly int m_termLength Field Value Type Description System.Int32 | Improve this Doc View Source m_terms Declaration protected readonly Terms m_terms Field Value Type Description Terms | Improve this Doc View Source m_termText Declaration protected readonly int[] m_termText Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source MinSimilarity @lucene.internal Declaration public virtual float MinSimilarity { get; } Property Value Type Description System.Single | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source ScaleFactor @lucene.internal Declaration public virtual float ScaleFactor { get; } Property Value Type Description System.Single | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source GetAutomatonEnum(Int32, BytesRef) Return an automata-based enum for matching up to editDistance from lastTerm , if possible Declaration protected virtual TermsEnum GetAutomatonEnum(int editDistance, BytesRef lastTerm) Parameters Type Name Description System.Int32 editDistance BytesRef lastTerm Returns Type Description TermsEnum | Improve this Doc View Source GetTermState() Declaration public override TermState GetTermState() Returns Type Description TermState Overrides TermsEnum.GetTermState() | Improve this Doc View Source MaxEditDistanceChanged(BytesRef, Int32, Boolean) Declaration protected virtual void MaxEditDistanceChanged(BytesRef lastTerm, int maxEdits, bool init) Parameters Type Name Description BytesRef lastTerm System.Int32 maxEdits System.Boolean init | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(BytesRef) Declaration public override bool SeekExact(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) | Improve this Doc View Source SeekExact(BytesRef, TermState) Declaration public override void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term TermState state Overrides TermsEnum.SeekExact(BytesRef, TermState) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) | Improve this Doc View Source SetEnum(TermsEnum) Swap in a new actual enum to proxy to Declaration protected virtual void SetEnum(TermsEnum actualEnum) Parameters Type Name Description TermsEnum actualEnum Implements IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDouble.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueDouble.html",
    "title": "Class MutableValueDouble | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueDouble MutableValue implementation of type System.Double . Inheritance System.Object MutableValue MutableValueDouble Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueDouble : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public double Value { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt32.html",
    "title": "Class MutableValueInt32 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueInt32 MutableValue implementation of type System.Int32 . NOTE: This was MutableValueInt in Lucene Inheritance System.Object MutableValue MutableValueInt32 Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueInt32 : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public int Value { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueInt64.html",
    "title": "Class MutableValueInt64 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueInt64 MutableValue implementation of type System.Int64 . NOTE: This was MutableValueLong in Lucene Inheritance System.Object MutableValue MutableValueInt64 MutableValueDate Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueInt64 : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public long Value { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueSingle.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueSingle.html",
    "title": "Class MutableValueSingle | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueSingle MutableValue implementation of type System.Single . NOTE: This was MutableValueFloat in Lucene Inheritance System.Object MutableValue MutableValueSingle Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueSingle : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public float Value { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilterFactory.html",
    "title": "Class JapaneseKatakanaStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseKatakanaStemFilterFactory Factory for JapaneseKatakanaStemFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseKatakanaStemFilterFactory\" minimumLength=\"4\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseKatakanaStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseKatakanaStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseKatakanaStemFilterFactory(IDictionary<String, String>) Creates a new JapaneseKatakanaStemFilterFactory Declaration public JapaneseKatakanaStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilter.html",
    "title": "Class JapanesePartOfSpeechStopFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapanesePartOfSpeechStopFilter Removes tokens that match a set of part-of-speech tags. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter JapanesePartOfSpeechStopFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapanesePartOfSpeechStopFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source JapanesePartOfSpeechStopFilter(LuceneVersion, TokenStream, ISet<String>) Create a new JapanesePartOfSpeechStopFilter . Declaration public JapanesePartOfSpeechStopFilter(LuceneVersion version, TokenStream input, ISet<string> stopTags) Parameters Type Name Description LuceneVersion version The Lucene match version. TokenStream input The TokenStream to consume. System.Collections.Generic.ISet < System.String > stopTags The part-of-speech tags that should be removed. | Improve this Doc View Source JapanesePartOfSpeechStopFilter(LuceneVersion, Boolean, TokenStream, ISet<String>) Declaration [Obsolete(\"EnablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public JapanesePartOfSpeechStopFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ISet<string> stopTags) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input System.Collections.Generic.ISet < System.String > stopTags Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilterFactory.html",
    "title": "Class JapanesePartOfSpeechStopFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapanesePartOfSpeechStopFilterFactory Factory for JapanesePartOfSpeechStopFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapanesePartOfSpeechStopFilterFactory\" tags=\"stopTags.txt\" enablePositionIncrements=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapanesePartOfSpeechStopFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapanesePartOfSpeechStopFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source JapanesePartOfSpeechStopFilterFactory(IDictionary<String, String>) Creates a new JapanesePartOfSpeechStopFilterFactory Declaration public JapanesePartOfSpeechStopFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream stream) Parameters Type Name Description TokenStream stream Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilter.html",
    "title": "Class JapaneseReadingFormFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseReadingFormFilter A TokenFilter that replaces the term attribute with the reading of a token in either katakana or romaji form. The default reading form is katakana. Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseReadingFormFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseReadingFormFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source JapaneseReadingFormFilter(TokenStream) Declaration public JapaneseReadingFormFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source JapaneseReadingFormFilter(TokenStream, Boolean) Declaration public JapaneseReadingFormFilter(TokenStream input, bool useRomaji) Parameters Type Name Description TokenStream input System.Boolean useRomaji Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardTokenizer.html",
    "title": "Class StandardTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizer A grammar-based tokenizer constructed with JFlex. As of Lucene version 3.1, this class implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. You must specify the required LuceneVersion compatibility when creating StandardTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation. If you use a previous version number, you get the exact behavior of ClassicTokenizer for backwards compatibility. Inheritance System.Object AttributeSource TokenStream Tokenizer StandardTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source StandardTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new StandardTokenizer with a given AttributeSource.AttributeFactory Declaration public StandardTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion AttributeSource.AttributeFactory factory System.IO.TextReader input | Improve this Doc View Source StandardTokenizer(LuceneVersion, TextReader) Creates a new instance of the StandardTokenizer . Attaches the input to the newly created JFlex-generated (then ported to .NET) scanner. Declaration public StandardTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene compatibility version - See StandardTokenizer System.IO.TextReader input The input reader See http://issues.apache.org/jira/browse/LUCENE-1068 Fields | Improve this Doc View Source ACRONYM Declaration [Obsolete(\"(3.1)\")] public const int ACRONYM = 2 Field Value Type Description System.Int32 | Improve this Doc View Source ACRONYM_DEP Declaration [Obsolete(\"(3.1)\")] public const int ACRONYM_DEP = 8 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 0 Field Value Type Description System.Int32 | Improve this Doc View Source APOSTROPHE Declaration [Obsolete(\"(3.1)\")] public const int APOSTROPHE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source CJ Declaration [Obsolete(\"(3.1)\")] public const int CJ = 7 Field Value Type Description System.Int32 | Improve this Doc View Source COMPANY Declaration [Obsolete(\"(3.1)\")] public const int COMPANY = 3 Field Value Type Description System.Int32 | Improve this Doc View Source EMAIL Declaration public const int EMAIL = 4 Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL Declaration public const int HANGUL = 13 Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA Declaration public const int HIRAGANA = 11 Field Value Type Description System.Int32 | Improve this Doc View Source HOST Declaration [Obsolete(\"(3.1)\")] public const int HOST = 5 Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC Declaration public const int IDEOGRAPHIC = 10 Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA Declaration public const int KATAKANA = 12 Field Value Type Description System.Int32 | Improve this Doc View Source NUM Declaration public const int NUM = 6 Field Value Type Description System.Int32 | Improve this Doc View Source SOUTHEAST_ASIAN Declaration public const int SOUTHEAST_ASIAN = 9 Field Value Type Description System.Int32 | Improve this Doc View Source TOKEN_TYPES String token types that correspond to token type int constants Declaration public static readonly string[] TOKEN_TYPES Field Value Type Description System.String [] Properties | Improve this Doc View Source MaxTokenLength Set the max allowed token length. Any token longer than this is skipped. Declaration public int MaxTokenLength { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardTokenizerFactory.html",
    "title": "Class StandardTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizerFactory Factory for StandardTokenizer . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory StandardTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StandardTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source StandardTokenizerFactory(IDictionary<String, String>) Creates a new StandardTokenizerFactory Declaration public StandardTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardTokenizerImpl.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardTokenizerImpl.html",
    "title": "Class StandardTokenizerImpl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters Inheritance System.Object StandardTokenizerImpl Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StandardTokenizerImpl : IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills CharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std31.StandardTokenizerImpl31.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std31.StandardTokenizerImpl31.html",
    "title": "Class StandardTokenizerImpl31 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardTokenizerImpl31 This class implements StandardTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility Inheritance System.Object StandardTokenizerImpl31 Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard.Std31 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class StandardTokenizerImpl31 : IStandardTokenizerInterface Constructors | Improve this Doc View Source StandardTokenizerImpl31(TextReader) Creates a new scanner Declaration public StandardTokenizerImpl31(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills ICharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Disposes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std31.UAX29URLEmailTokenizerImpl31.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std31.UAX29URLEmailTokenizerImpl31.html",
    "title": "Class UAX29URLEmailTokenizerImpl31 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UAX29URLEmailTokenizerImpl31 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3358 ) where Han and Hiragana characters would be split from combining characters: @deprecated This class is only for exact backwards compatibility Inheritance System.Object UAX29URLEmailTokenizerImpl31 Implements IStandardTokenizerInterface Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard.Std31 Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"This class is only for exact backwards compatibility\")] public sealed class UAX29URLEmailTokenizerImpl31 : IStandardTokenizerInterface Constructors | Improve this Doc View Source UAX29URLEmailTokenizerImpl31(TextReader) Creates a new scanner Declaration public UAX29URLEmailTokenizerImpl31(TextReader in) Parameters Type Name Description System.IO.TextReader in the TextReader to read input from. Fields | Improve this Doc View Source EMAIL_TYPE Declaration public static readonly int EMAIL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HANGUL_TYPE Declaration public static readonly int HANGUL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source HIRAGANA_TYPE Declaration public static readonly int HIRAGANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source IDEOGRAPHIC_TYPE Declaration public static readonly int IDEOGRAPHIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source KATAKANA_TYPE Declaration public static readonly int KATAKANA_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source NUMERIC_TYPE Numbers Declaration public static readonly int NUMERIC_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source SOUTH_EAST_ASIAN_TYPE Chars in class \\p{Line_Break = Complex_Context} are from South East Asian scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept together as as a single token rather than broken up, because the logic required to break them at word boundaries is too complex for UAX#29. See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA Declaration public static readonly int SOUTH_EAST_ASIAN_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source URL_TYPE Declaration public static readonly int URL_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source WORD_TYPE Alphanumeric sequences Declaration public static readonly int WORD_TYPE Field Value Type Description System.Int32 | Improve this Doc View Source YYEOF This character denotes the end of file Declaration public static readonly int YYEOF Field Value Type Description System.Int32 | Improve this Doc View Source YYINITIAL lexical states Declaration public const int YYINITIAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source YyChar Declaration public int YyChar { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyLength Returns the length of the matched text region. Declaration public int YyLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyState Returns the current lexical state. Declaration public int YyState { get; } Property Value Type Description System.Int32 | Improve this Doc View Source YyText Returns the text matched by the current regular expression. Declaration public string YyText { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetNextToken() Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error occurs. Declaration public int GetNextToken() Returns Type Description System.Int32 the next token Exceptions Type Condition System.IO.IOException if any I/O-Error occurs | Improve this Doc View Source GetText(ICharTermAttribute) Fills CharTermAttribute with the current token text. Declaration public void GetText(ICharTermAttribute t) Parameters Type Name Description ICharTermAttribute t | Improve this Doc View Source YyBegin(Int32) Enters a new lexical state Declaration public void YyBegin(int newState) Parameters Type Name Description System.Int32 newState the new lexical state | Improve this Doc View Source YyCharAt(Int32) Returns the character at position pos from the matched text. It is equivalent to YyText[pos], but faster Declaration public char YyCharAt(int pos) Parameters Type Name Description System.Int32 pos the position of the character to fetch. A value from 0 to YyLength-1. Returns Type Description System.Char the character at position pos | Improve this Doc View Source YyClose() Closes the input stream. Declaration public void YyClose() | Improve this Doc View Source YyPushBack(Int32) Pushes the specified amount of characters back into the input stream. They will be read again by then next call of the scanning method Declaration public void YyPushBack(int number) Parameters Type Name Description System.Int32 number the number of characters to be read again. This number must not be greater than YyLength! | Improve this Doc View Source YyReset(TextReader) Resets the scanner to read from a new input stream. Does not close the old reader. All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and lost). Lexical state is set to YYINITIAL . Internal scan buffer is resized down to its initial length, if it has grown. Declaration public void YyReset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader the new input stream Implements IStandardTokenizerInterface"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosReader.html",
    "title": "Class SimpleTextFieldInfosReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextFieldInfosReader Reads plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosReader SimpleTextFieldInfosReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosReader : FieldInfosReader Methods | Improve this Doc View Source DocValuesType(String) Declaration public virtual DocValuesType DocValuesType(string dvType) Parameters Type Name Description System.String dvType Returns Type Description DocValuesType | Improve this Doc View Source Read(Directory, String, String, IOContext) Declaration public override FieldInfos Read(Directory directory, string segmentName, string segmentSuffix, IOContext iocontext) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix IOContext iocontext Returns Type Description FieldInfos Overrides FieldInfosReader.Read(Directory, String, String, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextFieldInfosWriter.html",
    "title": "Class SimpleTextFieldInfosWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextFieldInfosWriter Writes plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosWriter SimpleTextFieldInfosWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextFieldInfosWriter : FieldInfosWriter Methods | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Declaration public override void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context Overrides FieldInfosWriter.Write(Directory, String, String, FieldInfos, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextLiveDocsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextLiveDocsFormat.html",
    "title": "Class SimpleTextLiveDocsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextLiveDocsFormat Reads/writes plain text live docs. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LiveDocsFormat SimpleTextLiveDocsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextLiveDocsFormat : LiveDocsFormat Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Declaration public override void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info System.Collections.Generic.ICollection < System.String > files Overrides LiveDocsFormat.Files(SegmentCommitInfo, ICollection<String>) | Improve this Doc View Source NewLiveDocs(IBits) Declaration public override IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(IBits) | Improve this Doc View Source NewLiveDocs(Int32) Declaration public override IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(Int32) | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Declaration public override IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits Overrides LiveDocsFormat.ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Declaration public override void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context Overrides LiveDocsFormat.WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsConsumer.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsConsumer.html",
    "title": "Class SimpleTextNormsFormat.SimpleTextNormsConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextNormsFormat.SimpleTextNormsConsumer Writes plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesConsumer SimpleTextDocValuesWriter SimpleTextNormsFormat.SimpleTextNormsConsumer Implements System.IDisposable Inherited Members SimpleTextDocValuesWriter.AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.AddBinaryField(FieldInfo, IEnumerable<BytesRef>) SimpleTextDocValuesWriter.AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) SimpleTextDocValuesWriter.Dispose(Boolean) DocValuesConsumer.MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) DocValuesConsumer.MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) DocValuesConsumer.MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) DocValuesConsumer.MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) DocValuesConsumer.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsConsumer : SimpleTextDocValuesWriter, IDisposable Constructors | Improve this Doc View Source SimpleTextNormsConsumer(SegmentWriteState) Declaration public SimpleTextNormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsProducer.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.SimpleTextNormsProducer.html",
    "title": "Class SimpleTextNormsFormat.SimpleTextNormsProducer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextNormsFormat.SimpleTextNormsProducer Reads plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesProducer SimpleTextDocValuesReader SimpleTextNormsFormat.SimpleTextNormsProducer Implements System.IDisposable Inherited Members SimpleTextDocValuesReader.GetNumeric(FieldInfo) SimpleTextDocValuesReader.GetBinary(FieldInfo) SimpleTextDocValuesReader.GetSorted(FieldInfo) SimpleTextDocValuesReader.GetSortedSet(FieldInfo) SimpleTextDocValuesReader.GetDocsWithField(FieldInfo) SimpleTextDocValuesReader.Dispose(Boolean) SimpleTextDocValuesReader.RamBytesUsed() SimpleTextDocValuesReader.CheckIntegrity() DocValuesProducer.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsProducer : SimpleTextDocValuesReader, IDisposable Constructors | Improve this Doc View Source SimpleTextNormsProducer(SegmentReadState) Declaration public SimpleTextNormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextNormsFormat.html",
    "title": "Class SimpleTextNormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextNormsFormat Plain-text norms format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NormsFormat SimpleTextNormsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextNormsFormat : NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextPostingsFormat.html",
    "title": "Class SimpleTextPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextPostingsFormat For debugging, curiosity, transparency only!! Do not use this codec in production. This codec stores all postings data in a single human-readable text file (_N.pst). You can view this in any text editor, and even edit it to alter your index. @lucene.experimental Inheritance System.Object PostingsFormat SimpleTextPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"SimpleText\")] public sealed class SimpleTextPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source SimpleTextPostingsFormat() Declaration public SimpleTextPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoFormat.html",
    "title": "Class SimpleTextSegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextSegmentInfoFormat Plain text segments file format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat SimpleTextSegmentInfoFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoFormat : SegmentInfoFormat Fields | Improve this Doc View Source SI_EXTENSION Declaration public const string SI_EXTENSION = \"si\" Field Value Type Description System.String Properties | Improve this Doc View Source SegmentInfoReader Declaration public override SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader Overrides SegmentInfoFormat.SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Declaration public override SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Overrides SegmentInfoFormat.SegmentInfoWriter"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoReader.html",
    "title": "Class SimpleTextSegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextSegmentInfoReader Reads plaintext segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader SimpleTextSegmentInfoReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoReader : SegmentInfoReader Methods | Improve this Doc View Source Read(Directory, String, IOContext) Declaration public override SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory System.String segmentName IOContext context Returns Type Description SegmentInfo Overrides SegmentInfoReader.Read(Directory, String, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextSegmentInfoWriter.html",
    "title": "Class SimpleTextSegmentInfoWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextSegmentInfoWriter Writes plain text segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoWriter SimpleTextSegmentInfoWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextSegmentInfoWriter : SegmentInfoWriter Methods | Improve this Doc View Source Write(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override void Write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) Parameters Type Name Description Directory dir SegmentInfo si FieldInfos fis IOContext ioContext Overrides SegmentInfoWriter.Write(Directory, SegmentInfo, FieldInfos, IOContext)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextStoredFieldsFormat.html",
    "title": "Class SimpleTextStoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextStoredFieldsFormat Plain text stored fields format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat SimpleTextStoredFieldsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax public class SimpleTextStoredFieldsFormat : StoredFieldsFormat Methods | Improve this Doc View Source FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override StoredFieldsReader FieldsReader(Directory directory, SegmentInfo si, FieldInfos fn, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si FieldInfos fn IOContext context Returns Type Description StoredFieldsReader Overrides StoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source FieldsWriter(Directory, SegmentInfo, IOContext) Declaration public override StoredFieldsWriter FieldsWriter(Directory directory, SegmentInfo si, IOContext context) Parameters Type Name Description Directory directory SegmentInfo si IOContext context Returns Type Description StoredFieldsWriter Overrides StoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.SingleDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.SingleDocValues.html",
    "title": "Class SingleDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleDocValues Abstract FunctionValues implementation which supports retrieving System.Single values. Implementations can control how the System.Single values are loaded through SingleVal(Int32) NOTE: This was FloatDocValues in Lucene Inheritance System.Object FunctionValues SingleDocValues Inherited Members FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class SingleDocValues : FunctionValues Constructors | Improve this Doc View Source SingleDocValues(ValueSource) Declaration public SingleDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source ByteVal(Int32) Declaration public override byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte Overrides FunctionValues.ByteVal(Int32) | Improve this Doc View Source DoubleVal(Int32) Declaration public override double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double Overrides FunctionValues.DoubleVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public override short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 Overrides FunctionValues.Int16Val(Int32) | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public override int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 Overrides FunctionValues.Int32Val(Int32) | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public override long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 Overrides FunctionValues.Int64Val(Int32) | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public abstract override float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single Overrides FunctionValues.SingleVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.StrDocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.StrDocValues.html",
    "title": "Class StrDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StrDocValues Abstract FunctionValues implementation which supports retrieving System.String values. Implementations can control how the System.String values are loaded through StrVal(Int32) Inheritance System.Object FunctionValues StrDocValues Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function.DocValues Assembly : Lucene.Net.Queries.dll Syntax public abstract class StrDocValues : FunctionValues Constructors | Improve this Doc View Source StrDocValues(ValueSource) Declaration public StrDocValues(ValueSource vs) Parameters Type Name Description ValueSource vs Fields | Improve this Doc View Source m_vs Declaration protected readonly ValueSource m_vs Field Value Type Description ValueSource Methods | Improve this Doc View Source BoolVal(Int32) Declaration public override bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean Overrides FunctionValues.BoolVal(Int32) | Improve this Doc View Source GetValueFiller() Declaration public override FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller Overrides FunctionValues.GetValueFiller() | Improve this Doc View Source ObjectVal(Int32) Declaration public override object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object Overrides FunctionValues.ObjectVal(Int32) | Improve this Doc View Source StrVal(Int32) Declaration public abstract override string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.StrVal(Int32) | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IValueQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IValueQueryNode-1.html",
    "title": "Interface IValueQueryNode<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IValueQueryNode<T> This interface should be implemented by IQueryNode that holds an arbitrary value. Inherited Members IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IValueQueryNode<T> : IQueryNode Type Parameters Name Description T the value's type Properties | Improve this Doc View Source Value Declaration T Value { get; set; } Property Value Type Description T"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchAllDocsQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchAllDocsQueryNode.html",
    "title": "Class MatchAllDocsQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQueryNode A MatchAllDocsQueryNode indicates that a query node tree or subtree will match all documents if executed in the index. Inheritance System.Object QueryNode MatchAllDocsQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source MatchAllDocsQueryNode() Declaration public MatchAllDocsQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchNoDocsQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchNoDocsQueryNode.html",
    "title": "Class MatchNoDocsQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchNoDocsQueryNode A MatchNoDocsQueryNode indicates that a query node tree or subtree will not match any documents if executed in the index. Inheritance System.Object QueryNode DeletedQueryNode MatchNoDocsQueryNode Implements IQueryNode Inherited Members DeletedQueryNode.ToQueryString(IEscapeQuerySyntax) DeletedQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchNoDocsQueryNode : DeletedQueryNode, IQueryNode Constructors | Improve this Doc View Source MatchNoDocsQueryNode() Declaration public MatchNoDocsQueryNode() Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides DeletedQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierQueryNode.html",
    "title": "Class ModifierQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ModifierQueryNode A ModifierQueryNode indicates the modifier value (+,-,?,NONE) for each term on the query string. For example \"+t1 -t2 t3\" will have a tree of: <BooleanQueryNode> <ModifierQueryNode modifier=\"MOD_REQ\"> <t1/> </ModifierQueryNode> <ModifierQueryNode modifier=\"MOD_NOT\"> <t2/> </ModifierQueryNode> <t3/> </BooleanQueryNode> Inheritance System.Object QueryNode ModifierQueryNode BooleanModifierNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ModifierQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source ModifierQueryNode(IQueryNode, Modifier) Used to store the modifier value on the original query string Declaration public ModifierQueryNode(IQueryNode query, Modifier mod) Parameters Type Name Description IQueryNode query QueryNode subtree Modifier mod Modifier Value Properties | Improve this Doc View Source Modifier Declaration public virtual Modifier Modifier { get; } Property Value Type Description Modifier Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source SetChild(IQueryNode) Declaration public virtual void SetChild(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.NoTokenFoundQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.NoTokenFoundQueryNode.html",
    "title": "Class NoTokenFoundQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoTokenFoundQueryNode A NoTokenFoundQueryNode is used if a term is convert into no tokens by the tokenizer/lemmatizer/analyzer (null). Inheritance System.Object QueryNode DeletedQueryNode NoTokenFoundQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class NoTokenFoundQueryNode : DeletedQueryNode, IQueryNode Constructors | Improve this Doc View Source NoTokenFoundQueryNode() Declaration public NoTokenFoundQueryNode() Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides DeletedQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides DeletedQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides DeletedQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OpaqueQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OpaqueQueryNode.html",
    "title": "Class OpaqueQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpaqueQueryNode A OpaqueQueryNode is used for specify values that are not supposed to be parsed by the parser. For example: and XPATH query in the middle of a query string a b @xpath:&apos;/bookstore/book[1]/title&apos; c d Inheritance System.Object QueryNode OpaqueQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class OpaqueQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source OpaqueQueryNode(String, String) Declaration public OpaqueQueryNode(string schema, string value) Parameters Type Name Description System.String schema schema identifier System.String value value that was not parsed Properties | Improve this Doc View Source Schema Gets the schema Declaration public virtual string Schema { get; } Property Value Type Description System.String | Improve this Doc View Source Value Gets the value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OrQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.OrQueryNode.html",
    "title": "Class OrQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrQueryNode A OrQueryNode represents an OR boolean operation performed on a list of nodes. Inheritance System.Object QueryNode BooleanQueryNode OrQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class OrQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source OrQueryNode(IList<IQueryNode>) Declaration public OrQueryNode(IList<IQueryNode> clauses) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses the query nodes to be or'ed Methods | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilterFactory.html",
    "title": "Class ICUTransformFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTransformFilterFactory Factory for ICUTransformFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUTransformFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUTransformFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: A Transliterator ID, one from ICU4N.Text.Transliterator.GetAvailableIDs Either 'forward' or 'reverse'. Default is forward. Constructors | Improve this Doc View Source ICUTransformFilterFactory(IDictionary<String, String>) Creates a new ICUTransformFilterFactory . Declaration public ICUTransformFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent See Also ICU4N.Text.Transliterator"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.DefaultICUTokenizerConfig.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.DefaultICUTokenizerConfig.html",
    "title": "Class DefaultICUTokenizerConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultICUTokenizerConfig Default ICUTokenizerConfig that is generally applicable to many languages. Inheritance System.Object ICUTokenizerConfig DefaultICUTokenizerConfig Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public class DefaultICUTokenizerConfig : ICUTokenizerConfig Remarks Generally tokenizes Unicode text according to UAX#29 ( BreakIterator.GetWordInstance(ULocale.ROOT) ), but with the following tailorings: Thai, Lao, Myanmar, Khmer, and CJK text is broken into words with a dictionary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source DefaultICUTokenizerConfig(Boolean, Boolean) Creates a new config. This object is lightweight, but the first time the class is referenced, breakiterators will be initialized. Declaration public DefaultICUTokenizerConfig(bool cjkAsWords, bool myanmarAsWords) Parameters Type Name Description System.Boolean cjkAsWords true if cjk text should undergo dictionary-based segmentation, otherwise text will be segmented according to UAX#29 defaults. System.Boolean myanmarAsWords If this is true, all Han+Hiragana+Katakana words will be tagged as IDEOGRAPHIC. Fields | Improve this Doc View Source WORD_HANGUL Token type for words containing Korean hangul Declaration public static readonly string WORD_HANGUL Field Value Type Description System.String | Improve this Doc View Source WORD_HIRAGANA Token type for words containing Japanese hiragana Declaration public static readonly string WORD_HIRAGANA Field Value Type Description System.String | Improve this Doc View Source WORD_IDEO Token type for words containing ideographic characters Declaration public static readonly string WORD_IDEO Field Value Type Description System.String | Improve this Doc View Source WORD_KATAKANA Token type for words containing Japanese katakana Declaration public static readonly string WORD_KATAKANA Field Value Type Description System.String | Improve this Doc View Source WORD_LETTER Token type for words that contain letters Declaration public static readonly string WORD_LETTER Field Value Type Description System.String | Improve this Doc View Source WORD_NUMBER Token type for words that appear to be numbers Declaration public static readonly string WORD_NUMBER Field Value Type Description System.String Properties | Improve this Doc View Source CombineCJ Declaration public override bool CombineCJ { get; } Property Value Type Description System.Boolean Overrides ICUTokenizerConfig.CombineCJ Methods | Improve this Doc View Source GetBreakIterator(Int32) Declaration public override BreakIterator GetBreakIterator(int script) Parameters Type Name Description System.Int32 script Returns Type Description ICU4N.Text.BreakIterator Overrides ICUTokenizerConfig.GetBreakIterator(Int32) | Improve this Doc View Source GetType(Int32, RuleStatus) Declaration public override string GetType(int script, RuleStatus ruleStatus) Parameters Type Name Description System.Int32 script ICU4N.Text.RuleStatus ruleStatus Returns Type Description System.String Overrides ICUTokenizerConfig.GetType(Int32, RuleStatus)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizer.html",
    "title": "Class ICUTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTokenizer Breaks text into words according to UAX #29: Unicode Text Segmentation ( http://www.unicode.org/reports/tr29/ ) Words are broken across script boundaries, then segmented according to the BreakIterator and typing provided by the ICUTokenizerConfig This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream Tokenizer ICUTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ICUTokenizer(AttributeSource.AttributeFactory, TextReader, ICUTokenizerConfig) Construct a new ICUTokenizer that breaks text into words from the given System.IO.TextReader , using a tailored ICU4N.Text.BreakIterator configuration. Declaration public ICUTokenizer(AttributeSource.AttributeFactory factory, TextReader input, ICUTokenizerConfig config) Parameters Type Name Description AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use. System.IO.TextReader input System.IO.TextReader containing text to tokenize. ICUTokenizerConfig config Tailored ICU4N.Text.BreakIterator configuration. | Improve this Doc View Source ICUTokenizer(TextReader) Construct a new ICUTokenizer that breaks text into words from the given System.IO.TextReader . Declaration public ICUTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input System.IO.TextReader containing text to tokenize. Remarks The default script-specific handling is used. The default attribute factory is used. See Also DefaultICUTokenizerConfig | Improve this Doc View Source ICUTokenizer(TextReader, ICUTokenizerConfig) Construct a new ICUTokenizer that breaks text into words from the given System.IO.TextReader , using a tailored ICU4N.Text.BreakIterator configuration. Declaration public ICUTokenizer(TextReader input, ICUTokenizerConfig config) Parameters Type Name Description System.IO.TextReader input System.IO.TextReader containing text to tokenize. ICUTokenizerConfig config Tailored ICU4N.Text.BreakIterator configuration. Remarks The default attribute factory is used. Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable See Also ICUTokenizerConfig"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.Segmentation.ICUTokenizerFactory.html",
    "title": "Class ICUTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTokenizerFactory Factory for ICUTokenizer . Words are broken across script boundaries, then segmented according to the ICU4N.Text.BreakIterator and typing provided by the DefaultICUTokenizerConfig . Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ICUTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Icu.Segmentation Assembly : Lucene.Net.ICU.dll Syntax public class ICUTokenizerFactory : TokenizerFactory, IResourceLoaderAware Remarks To use the default set of per-script rules: <fieldType name=\"text_icu\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ICUTokenizerFactory\"/> </analyzer> </fieldType> You can customize this tokenizer's behavior by specifying per-script rule files, which are compiled by the ICU ICU4N.Text.RuleBasedBreakIterator . See the ICU RuleBasedBreakIterator syntax reference . To add per-script rules, add a \"rulefiles\" argument, which should contain a comma-separated list of code:rulefile pairs in the following format: four-letter ISO 15924 script code , followed by a colon, then a resource path. E.g. to specify rules for Latin (script code \"Latn\") and Cyrillic (script code \"Cyrl\"): <fieldType name=\"text_icu_custom\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ICUTokenizerFactory\" cjkAsWords=\"true\" rulefiles=\"Latn:my.Latin.rules.rbbi,Cyrl:my.Cyrillic.rules.rbbi\"/> </analyzer> </fieldType> Constructors | Improve this Doc View Source ICUTokenizerFactory(IDictionary<String, String>) Creates a new ICUTokenizerFactory . Declaration public ICUTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.IScriptAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.IScriptAttribute.html",
    "title": "Interface IScriptAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IScriptAttribute This attribute stores the UTR #24 script value for a token of text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Icu.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public interface IScriptAttribute : IAttribute Properties | Improve this Doc View Source Code Gets or Sets the numeric code for this script value. This is the constant value from ICU4N.Globalization.UScript . Declaration int Code { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetName() Get the full name. Declaration string GetName() Returns Type Description System.String UTR #24 full name. | Improve this Doc View Source GetShortName() Get the abbreviated name. Declaration string GetShortName() Returns Type Description System.String UTR #24 abbreviated name."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.ScriptAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.TokenAttributes.ScriptAttribute.html",
    "title": "Class ScriptAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScriptAttribute Implementation of IScriptAttribute that stores the script as an integer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Attribute ScriptAttribute Implements IScriptAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public class ScriptAttribute : Attribute, IScriptAttribute, IAttribute Constructors | Improve this Doc View Source ScriptAttribute() Initializes this attribute with ICU4N.Globalization.UScript.Common . Declaration public ScriptAttribute() Properties | Improve this Doc View Source Code Declaration public virtual int Code { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetName() Declaration public virtual string GetName() Returns Type Description System.String | Improve this Doc View Source GetShortName() Declaration public virtual string GetShortName() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) Implements IScriptAttribute IAttribute"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiAnalyzer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Th.ThaiAnalyzer.html",
    "title": "Class ThaiAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThaiAnalyzer Analyzer for Thai language. It uses ICU4N.Text.BreakIterator to break words. You must specify the required LuceneVersion compatibility when creating ThaiAnalyzer : As of 3.6, a set of Thai stopwords is used by default Inheritance System.Object Analyzer StopwordAnalyzerBase ThaiAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Th Assembly : Lucene.Net.ICU.dll Syntax public sealed class ThaiAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ThaiAnalyzer(LuceneVersion) Builds an analyzer with the default stop words. Declaration public ThaiAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ThaiAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ThaiAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Thai stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , ThaiWordFilter , and StopFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.html",
    "title": "Class Lucene43EdgeNGramTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene43EdgeNGramTokenizer Old version of EdgeNGramTokenizer which doesn't handle correctly supplementary characters. Inheritance System.Object AttributeSource TokenStream Tokenizer Lucene43EdgeNGramTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete] public sealed class Lucene43EdgeNGramTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Lucene43EdgeNGramTokenizer.Side, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration [Obsolete] public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, Lucene43EdgeNGramTokenizer.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized Lucene43EdgeNGramTokenizer.Side side the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, String, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration [Obsolete] public Lucene43EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.String sideLabel the name of the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, TextReader, Lucene43EdgeNGramTokenizer.Side, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration [Obsolete] public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, Lucene43EdgeNGramTokenizer.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion System.IO.TextReader input System.IO.TextReader holding the input to be tokenized Lucene43EdgeNGramTokenizer.Side side the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43EdgeNGramTokenizer(LuceneVersion, TextReader, String, Int32, Int32) Creates Lucene43EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration [Obsolete] public Lucene43EdgeNGramTokenizer(LuceneVersion version, TextReader input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.String sideLabel the name of the Lucene43EdgeNGramTokenizer.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_GRAM_SIZE Declaration public const int DEFAULT_MAX_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SIDE Declaration public const Lucene43EdgeNGramTokenizer.Side DEFAULT_SIDE = Lucene43EdgeNGramTokenizer.Side.FRONT Field Value Type Description Lucene43EdgeNGramTokenizer.Side Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source GetSide(String) Declaration public static Lucene43EdgeNGramTokenizer.Side GetSide(string sideName) Parameters Type Name Description System.String sideName Returns Type Description Lucene43EdgeNGramTokenizer.Side | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.Lucene43NGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.Lucene43NGramTokenizer.html",
    "title": "Class Lucene43NGramTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene43NGramTokenizer Old broken version of NGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer Lucene43NGramTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete] public sealed class Lucene43NGramTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source Lucene43NGramTokenizer(AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates Lucene43NGramTokenizer with given min and max n-grams. Declaration public Lucene43NGramTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source Lucene43NGramTokenizer(TextReader) Creates Lucene43NGramTokenizer with default min and max n-grams. Declaration public Lucene43NGramTokenizer(TextReader input) Parameters Type Name Description System.IO.TextReader input System.IO.TextReader holding the input to be tokenized | Improve this Doc View Source Lucene43NGramTokenizer(TextReader, Int32, Int32) Creates Lucene43NGramTokenizer with given min and max n-grams. Declaration public Lucene43NGramTokenizer(TextReader input, int minGram, int maxGram) Parameters Type Name Description System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_NGRAM_SIZE Declaration public const int DEFAULT_MAX_NGRAM_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = 1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.NGramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.NGramFilterFactory.html",
    "title": "Class NGramFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramFilterFactory Factory for NGramTokenFilter . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory NGramFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NGramFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source NGramFilterFactory(IDictionary<String, String>) Creates a new NGramFilterFactory Declaration public NGramFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.NGramTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.NGramTokenFilter.html",
    "title": "Class NGramTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramTokenFilter Tokenizes the input into n-grams of the given size(s). You must specify the required LuceneVersion compatibility when creating a NGramTokenFilter . As of Lucene 4.4, this token filters: handles supplementary characters correctly, emits all n-grams for the same token at the same position, does not modify offsets, sorts n-grams by their offset in the original token first, then increasing length (meaning that \"abc\" will give \"a\", \"ab\", \"abc\", \"b\", \"bc\", \"c\"). You can make this filter use the old behavior by providing a version < LUCENE_44 in the constructor but this is not recommended as it will lead to broken TokenStream s that will cause highlighting bugs. If you were using this TokenFilter to perform partial highlighting, this won't work anymore since this filter doesn't update offsets. You should modify your analysis chain to use NGramTokenizer , and potentially override IsTokenChar(Int32) to perform pre-tokenization. Inheritance System.Object AttributeSource TokenStream TokenFilter NGramTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class NGramTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NGramTokenFilter(LuceneVersion, TokenStream) Creates NGramTokenFilter with default min and max n-grams. Declaration public NGramTokenFilter(LuceneVersion version, TokenStream input) Parameters Type Name Description LuceneVersion version Lucene version to enable correct position increments. See NGramTokenFilter for details. TokenStream input TokenStream holding the input to be tokenized | Improve this Doc View Source NGramTokenFilter(LuceneVersion, TokenStream, Int32, Int32) Creates NGramTokenFilter with given min and max n-grams. Declaration public NGramTokenFilter(LuceneVersion version, TokenStream input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version Lucene version to enable correct position increments. See NGramTokenFilter for details. TokenStream input TokenStream holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_NGRAM_SIZE Declaration public const int DEFAULT_MAX_NGRAM_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = 1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Returns the next token in the stream, or null at EOS. Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.NGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.NGramTokenizer.html",
    "title": "Class NGramTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramTokenizer Tokenizes the input into n-grams of the given size(s). On the contrary to NGramTokenFilter , this class sets offsets so that characters between startOffset and endOffset in the original stream are the same as the term chars. For example, \"abcde\" would be tokenized as (minGram=2, maxGram=3): TermPosition incrementPosition lengthOffsets ab11[0,2[ abc11[0,3[ bc11[1,3[ bcd11[1,4[ cd11[2,4[ cde11[2,5[ de11[3,5[ This tokenizer changed a lot in Lucene 4.4 in order to: tokenize in a streaming fashion to support streams which are larger than 1024 chars (limit of the previous version), count grams based on unicode code points instead of java chars (and never split in the middle of surrogate pairs), give the ability to pre-tokenize the stream ( IsTokenChar(Int32) ) before computing n-grams. Additionally, this class doesn't trim trailing whitespaces and emits tokens in a different order, tokens are now emitted by increasing start offsets while they used to be emitted by increasing lengths (which prevented from supporting large input streams). Although highly discouraged, it is still possible to use the old behavior through Lucene43NGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer NGramTokenizer EdgeNGramTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NGramTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source NGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates NGramTokenizer with given min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the lucene compatibility version AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source NGramTokenizer(LuceneVersion, TextReader) Creates NGramTokenizer with default min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, TextReader input) Parameters Type Name Description LuceneVersion version the lucene compatibility version System.IO.TextReader input System.IO.TextReader holding the input to be tokenized | Improve this Doc View Source NGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates NGramTokenizer with given min and max n-grams. Declaration public NGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the lucene compatibility version System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_NGRAM_SIZE Declaration public const int DEFAULT_MAX_NGRAM_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_NGRAM_SIZE Declaration public const int DEFAULT_MIN_NGRAM_SIZE = 1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsTokenChar(Int32) Only collect characters which satisfy this condition. Declaration protected virtual bool IsTokenChar(int chr) Parameters Type Name Description System.Int32 chr Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public override sealed void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.NGramTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.NGramTokenizerFactory.html",
    "title": "Class NGramTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramTokenizerFactory Factory for NGramTokenizer . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory NGramTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NGramTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source NGramTokenizerFactory(IDictionary<String, String>) Creates a new NGramTokenizerFactory Declaration public NGramTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Creates the TokenStream of n-grams from the given System.IO.TextReader and AttributeSource.AttributeFactory . Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Query.QueryAutoStopWordAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Query.QueryAutoStopWordAnalyzer.html",
    "title": "Class QueryAutoStopWordAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryAutoStopWordAnalyzer An Analyzer used primarily at query time to wrap another analyzer and provide a layer of protection which prevents very common words from being passed into queries. For very large indexes the cost of reading TermDocs for a very common word can be high. This analyzer was created after experience with a 38 million doc index which had a term in around 50% of docs and was causing TermQueries for this term to take 2 seconds. Inheritance System.Object Analyzer AnalyzerWrapper QueryAutoStopWordAnalyzer Implements System.IDisposable Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Query Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class QueryAutoStopWordAnalyzer : AnalyzerWrapper, IDisposable Constructors | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency percentage greater than defaultMaxDocFreqPercent Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, ICollection<String>, Int32) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for the given selection of fields from terms with a document frequency greater than the given maxDocFreq Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, ICollection<string> fields, int maxDocFreq) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Collections.Generic.ICollection < System.String > fields Selection of fields to calculate stopwords for System.Int32 maxDocFreq Document frequency terms should be above in order to be stopwords Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, ICollection<String>, Single) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for the given selection of fields from terms with a document frequency percentage greater than the given maxPercentDocs Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, ICollection<string> fields, float maxPercentDocs) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Collections.Generic.ICollection < System.String > fields Selection of fields to calculate stopwords for System.Single maxPercentDocs The maximum percentage (between 0.0 and 1.0) of index documents which contain a term, after which the word is considered to be a stop word Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, Int32) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency greater than the given maxDocFreq Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, int maxDocFreq) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Int32 maxDocFreq Document frequency terms should be above in order to be stopwords Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader | Improve this Doc View Source QueryAutoStopWordAnalyzer(LuceneVersion, Analyzer, IndexReader, Single) Creates a new QueryAutoStopWordAnalyzer with stopwords calculated for all indexed fields from terms with a document frequency percentage greater than the given maxPercentDocs Declaration public QueryAutoStopWordAnalyzer(LuceneVersion matchVersion, Analyzer delegate, IndexReader indexReader, float maxPercentDocs) Parameters Type Name Description LuceneVersion matchVersion Version to be used in StopFilter Analyzer delegate Analyzer whose TokenStream will be filtered IndexReader indexReader IndexReader to identify the stopwords from System.Single maxPercentDocs The maximum percentage (between 0.0 and 1.0) of index documents which contain a term, after which the word is considered to be a stop word Exceptions Type Condition System.IO.IOException Can be thrown while reading from the IndexReader Fields | Improve this Doc View Source defaultMaxDocFreqPercent Declaration public const float defaultMaxDocFreqPercent = 0.4F Field Value Type Description System.Single Methods | Improve this Doc View Source GetStopWords() Provides information on which stop words have been identified for all fields Declaration public Term[] GetStopWords() Returns Type Description Term [] the stop words (as terms) | Improve this Doc View Source GetStopWords(String) Provides information on which stop words have been identified for a field Declaration public string[] GetStopWords(string fieldName) Parameters Type Name Description System.String fieldName The field for which stop words identified in \"addStopWords\" method calls will be returned Returns Type Description System.String [] the stop words identified for a field | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer Overrides AnalyzerWrapper.GetWrappedAnalyzer(String) | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Reverse.ReverseStringFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Reverse.ReverseStringFilter.html",
    "title": "Class ReverseStringFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReverseStringFilter Reverse token string, for example \"country\" => \"yrtnuoc\". If Lucene.Net.Analysis.Reverse.ReverseStringFilter.marker is supplied, then tokens will be also prepended by that character. For example, with a marker of \\u0001, \"country\" => \"\\u0001yrtnuoc\". This is useful when implementing efficient leading wildcards search. You must specify the required LuceneVersion compatibility when creating ReverseStringFilter , or when using any of its static methods: As of 3.1, supplementary characters are handled correctly Inheritance System.Object AttributeSource TokenStream TokenFilter ReverseStringFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Reverse Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ReverseStringFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ReverseStringFilter(LuceneVersion, TokenStream) Create a new ReverseStringFilter that reverses all tokens in the supplied TokenStream . The reversed tokens will not be marked. Declaration public ReverseStringFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to filter | Improve this Doc View Source ReverseStringFilter(LuceneVersion, TokenStream, Char) Create a new ReverseStringFilter that reverses and marks all tokens in the supplied TokenStream . The reversed tokens will be prepended (marked) by the marker character. Declaration public ReverseStringFilter(LuceneVersion matchVersion, TokenStream in, char marker) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to filter System.Char marker A character used to mark reversed tokens Fields | Improve this Doc View Source INFORMATION_SEPARATOR_MARKER Example marker character: U+001F (INFORMATION SEPARATOR ONE) Declaration public const char INFORMATION_SEPARATOR_MARKER = '\\u001f' Field Value Type Description System.Char | Improve this Doc View Source PUA_EC00_MARKER Example marker character: U+EC00 (PRIVATE USE AREA: EC00) Declaration public const char PUA_EC00_MARKER = '' Field Value Type Description System.Char | Improve this Doc View Source RTL_DIRECTION_MARKER Example marker character: U+200F (RIGHT-TO-LEFT MARK) Declaration public const char RTL_DIRECTION_MARKER = '‏' Field Value Type Description System.Char | Improve this Doc View Source START_OF_HEADING_MARKER Example marker character: U+0001 (START OF HEADING) Declaration public const char START_OF_HEADING_MARKER = '\\u0001' Field Value Type Description System.Char Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reverse(LuceneVersion, Char[]) Reverses the given input buffer in-place Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse | Improve this Doc View Source Reverse(LuceneVersion, Char[], Int32) Partially reverses the given input buffer in-place from offset 0 up to the given length. Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer, int len) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse System.Int32 len the length in the buffer up to where the buffer should be reversed | Improve this Doc View Source Reverse(LuceneVersion, Char[], Int32, Int32) Partially reverses the given input buffer in-place from the given offset up to the given length. Declaration public static void Reverse(LuceneVersion matchVersion, char[] buffer, int start, int len) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.Char [] buffer the input char array to reverse System.Int32 start the offset from where to reverse the buffer System.Int32 len the length in the buffer up to where the buffer should be reversed | Improve this Doc View Source Reverse(LuceneVersion, String) Reverses the given input string Declaration public static string Reverse(LuceneVersion matchVersion, string input) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.String input the string to reverse Returns Type Description System.String the given input string in reversed order Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Reverse.ReverseStringFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Reverse.ReverseStringFilterFactory.html",
    "title": "Class ReverseStringFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReverseStringFilterFactory Factory for ReverseStringFilter . <fieldType name=\"text_rvsstr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ReverseStringFilterFactory\"/> </analyzer> </fieldType> @since solr 1.4 Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ReverseStringFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Reverse Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ReverseStringFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ReverseStringFilterFactory(IDictionary<String, String>) Creates a new ReverseStringFilterFactory Declaration public ReverseStringFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ro.RomanianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ro.RomanianAnalyzer.html",
    "title": "Class RomanianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RomanianAnalyzer Analyzer for Romanian. Inheritance System.Object Analyzer StopwordAnalyzerBase RomanianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ro Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RomanianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source RomanianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public RomanianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source RomanianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public RomanianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source RomanianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public RomanianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Romanian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianAnalyzer.html",
    "title": "Class RussianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianAnalyzer Analyzer for Russian language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating RussianAnalyzer : As of 3.1, StandardTokenizer is used, Snowball stemming is done with SnowballFilter , and Snowball stopwords are used by default. Inheritance System.Object Analyzer StopwordAnalyzerBase RussianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RussianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source RussianAnalyzer(LuceneVersion) Declaration public RussianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source RussianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public RussianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source RussianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public RussianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of words not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Russian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"russian_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, and SnowballFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLetterTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLetterTokenizer.html",
    "title": "Class RussianLetterTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianLetterTokenizer A RussianLetterTokenizer is a Tokenizer that extends LetterTokenizer by also allowing the basic Latin digits 0-9. You must specify the required LuceneVersion compatibility when creating RussianLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer RussianLetterTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardTokenizer instead, which has the same functionality.\")] public class RussianLetterTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source RussianLetterTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new RussianLetterTokenizer using a given AttributeSource.AttributeFactory . Declaration public RussianLetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source RussianLetterTokenizer(LuceneVersion, TextReader) Construct a new RussianLetterTokenizer . Declaration public RussianLetterTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which satisfy IsLetter(Int32) . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLetterTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLetterTokenizerFactory.html",
    "title": "Class RussianLetterTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianLetterTokenizerFactory Inheritance System.Object AbstractAnalysisFactory TokenizerFactory RussianLetterTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use Standard.StandardTokenizerFactory instead.\")] public class RussianLetterTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source RussianLetterTokenizerFactory(IDictionary<String, String>) Creates a new RussianLetterTokenizerFactory Declaration public RussianLetterTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLightStemFilter.html",
    "title": "Class RussianLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianLightStemFilter A TokenFilter that applies RussianLightStemmer to stem Russian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter RussianLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RussianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source RussianLightStemFilter(TokenStream) Declaration public RussianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLightStemFilterFactory.html",
    "title": "Class RussianLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianLightStemFilterFactory Factory for RussianLightStemFilter . <fieldType name=\"text_rulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RussianLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory RussianLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RussianLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source RussianLightStemFilterFactory(IDictionary<String, String>) Creates a new RussianLightStemFilterFactory Declaration public RussianLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net/Lucene.Net.Util.InfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.InfoStream.html",
    "title": "Class InfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InfoStream Debugging API for Lucene classes such as IndexWriter and SegmentInfos . NOTE: Enabling infostreams may cause performance degradation in some components. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object InfoStream TextWriterInfoStream Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class InfoStream : IDisposable Fields | Improve this Doc View Source NO_OUTPUT Instance of InfoStream that does no logging at all. Declaration public static readonly InfoStream NO_OUTPUT Field Value Type Description InfoStream Properties | Improve this Doc View Source Default Gets or Sets the default InfoStream used by a newly instantiated classes. Declaration public static InfoStream Default { get; set; } Property Value Type Description InfoStream Methods | Improve this Doc View Source Clone() Clones this InfoStream Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes this InfoStream Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes this InfoStream Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsEnabled(String) Returns true if messages are enabled and should be posted to Message(String, String) . Declaration public abstract bool IsEnabled(string component) Parameters Type Name Description System.String component Returns Type Description System.Boolean | Improve this Doc View Source Message(String, String) Prints a message Declaration public abstract void Message(string component, string message) Parameters Type Name Description System.String component System.String message Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.InPlaceMergeSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.InPlaceMergeSorter.html",
    "title": "Class InPlaceMergeSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InPlaceMergeSorter Sorter implementation based on the merge-sort algorithm that merges in place (no extra memory will be allocated). Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter InPlaceMergeSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class InPlaceMergeSorter : Sorter Constructors | Improve this Doc View Source InPlaceMergeSorter() Create a new InPlaceMergeSorter Declaration public InPlaceMergeSorter() Methods | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override sealed void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.DirectAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.DirectAllocator.html",
    "title": "Class Int32BlockPool.DirectAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool.DirectAllocator A simple Int32BlockPool.Allocator that never recycles. Inheritance System.Object Int32BlockPool.Allocator Int32BlockPool.DirectAllocator Inherited Members Int32BlockPool.Allocator.m_blockSize Int32BlockPool.Allocator.GetInt32Block() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class DirectAllocator : Int32BlockPool.Allocator Constructors | Improve this Doc View Source DirectAllocator() Creates a new Int32BlockPool.DirectAllocator with a default block size Declaration public DirectAllocator() Methods | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks() in Lucene Declaration public override void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end Overrides Int32BlockPool.Allocator.RecycleInt32Blocks(Int32[][], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32sRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32sRef.html",
    "title": "Class Int32sRef | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32sRef Represents int[] , as a slice (offset + length) into an existing int[] . The Int32s member should never be null ; use EMPTY_INT32S if necessary. NOTE: This was IntsRef in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32sRef Implements System.IComparable < Int32sRef > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Int32sRef : IComparable<Int32sRef> Constructors | Improve this Doc View Source Int32sRef() Create a Int32sRef with EMPTY_INT32S . Declaration public Int32sRef() | Improve this Doc View Source Int32sRef(Int32) Create a Int32sRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public Int32sRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source Int32sRef(Int32[], Int32, Int32) This instance will directly reference ints w/o making a copy. ints should not be null . Declaration public Int32sRef(int[] ints, int offset, int length) Parameters Type Name Description System.Int32 [] ints System.Int32 offset System.Int32 length Fields | Improve this Doc View Source EMPTY_INT32S An empty integer array for convenience. NOTE: This was EMPTY_INTS in Lucene Declaration public static readonly int[] EMPTY_INT32S Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Int32s The contents of the Int32sRef . Should never be null . NOTE: This was ints (field) in Lucene Declaration public int[] Int32s { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Length Length of used System.Int32 s. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid integer. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying System.Int32 s are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(Int32sRef) | Improve this Doc View Source CompareTo(Int32sRef) Signed System.Int32 order comparison. Declaration public int CompareTo(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyInt32s(Int32sRef) NOTE: This was copyInts() in Lucene Declaration public void CopyInt32s(Int32sRef other) Parameters Type Name Description Int32sRef other | Improve this Doc View Source DeepCopyOf(Int32sRef) Creates a new Int32sRef that points to a copy of the System.Int32 s from other The returned Int32sRef will have a length of other.Length and an offset of zero. Declaration public static Int32sRef DeepCopyOf(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description Int32sRef | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source Int32sEquals(Int32sRef) NOTE: This was intsEquals() in Lucene Declaration public bool Int32sEquals(Int32sRef other) Parameters Type Name Description Int32sRef other Returns Type Description System.Boolean | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws System.InvalidOperationException ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH2.html",
    "title": "Class NormalizationH2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizationH2 Normalization model in which the term frequency is inversely related to the length. While this model is parameterless in the original article , the thesis introduces the parameterized variant. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH2 Inherited Members Normalization.Explain(BasicStats, Single, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH2 : Normalization Constructors | Improve this Doc View Source NormalizationH2() Calls NormalizationH2(1) Declaration public NormalizationH2() | Improve this Doc View Source NormalizationH2(Single) Creates NormalizationH2 with the supplied parameter c . Declaration public NormalizationH2(float c) Parameters Type Name Description System.Single c Hyper-parameter that controls the term frequency normalization with respect to the document length. Properties | Improve this Doc View Source C Returns the c parameter. Declaration public virtual float C { get; } Property Value Type Description System.Single See Also NormalizationH2(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override sealed float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH3.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH3.html",
    "title": "Class NormalizationH3 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizationH3 Dirichlet Priors normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH3 Inherited Members Normalization.Explain(BasicStats, Single, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH3 : Normalization Constructors | Improve this Doc View Source NormalizationH3() Calls NormalizationH3(800) Declaration public NormalizationH3() | Improve this Doc View Source NormalizationH3(Single) Creates NormalizationH3 with the supplied parameter μ . Declaration public NormalizationH3(float mu) Parameters Type Name Description System.Single mu smoothing parameter μ Properties | Improve this Doc View Source Mu Returns the parameter μ Declaration public virtual float Mu { get; } Property Value Type Description System.Single See Also NormalizationH3(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationZ.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationZ.html",
    "title": "Class NormalizationZ | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizationZ Pareto-Zipf Normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationZ Inherited Members Normalization.Explain(BasicStats, Single, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationZ : Normalization Constructors | Improve this Doc View Source NormalizationZ() Calls NormalizationZ(0.3) Declaration public NormalizationZ() | Improve this Doc View Source NormalizationZ(Single) Creates NormalizationZ with the supplied parameter z . Declaration public NormalizationZ(float z) Parameters Type Name Description System.Single z represents A/(A+1) where A measures the specificity of the language. Properties | Improve this Doc View Source Z Returns the parameter z Declaration public virtual float Z { get; } Property Value Type Description System.Single See Also NormalizationZ(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.PerFieldSimilarityWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.PerFieldSimilarityWrapper.html",
    "title": "Class PerFieldSimilarityWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerFieldSimilarityWrapper Provides the ability to use a different Similarity for different fields. Subclasses should implement Get(String) to return an appropriate Similarity (for example, using field-specific parameter values) for the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity PerFieldSimilarityWrapper Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class PerFieldSimilarityWrapper : Similarity Constructors | Improve this Doc View Source PerFieldSimilarityWrapper() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public PerFieldSimilarityWrapper() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source Get(String) Returns a Similarity for scoring a field. Declaration public abstract Similarity Get(string name) Parameters Type Name Description System.String name Returns Type Description Similarity | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight weight, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight weight AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.SimilarityBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.SimilarityBase.html",
    "title": "Class SimilarityBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimilarityBase A subclass of Similarity that provides a simplified API for its descendants. Subclasses are only required to implement the Score(BasicStats, Single, Single) and ToString() methods. Implementing Explain(Explanation, BasicStats, Int32, Single, Single) is optional, inasmuch as SimilarityBase already provides a basic explanation of the score and the term frequency. However, implementers of a subclass are encouraged to include as much detail about the scoring method as possible. Note: multi-word queries such as phrase queries are scored in a different way than Lucene's default ranking algorithm: whereas it \"fakes\" an IDF value for the phrase as a whole (since it does not know it), this class instead scores phrases as a summation of the individual term scores. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase DFRSimilarity IBSimilarity LMSimilarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimilarityBase : Similarity Constructors | Improve this Doc View Source SimilarityBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimilarityBase() Properties | Improve this Doc View Source DiscountOverlaps Determines whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true , meaning overlap tokens do not count when computing norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean See Also ComputeNorm(FieldInvertState) Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Encodes the document length in the same way as TFIDFSimilarity . Declaration public override long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source DecodeNormValue(Byte) Decodes a normalization factor (document length) stored in an index. Declaration protected virtual float DecodeNormValue(byte norm) Parameters Type Name Description System.Byte norm Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single, Single) Encodes the length to a byte via SmallSingle . Declaration protected virtual byte EncodeNormValue(float boost, float length) Parameters Type Name Description System.Single boost System.Single length Returns Type Description System.Byte | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Subclasses should implement this method to explain the score. expl already contains the score, the name of the class and the doc id, as well as the term frequency and its explanation; subclasses can add additional clauses to explain details of their scoring formulae. The default implementation does nothing. Declaration protected virtual void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl the explanation to extend with details. BasicStats stats the corpus level statistics. System.Int32 doc the document id. System.Single freq the term frequency. System.Single docLen the document length. | Improve this Doc View Source Explain(BasicStats, Int32, Explanation, Single) Explains the score. The implementation here provides a basic explanation in the format Score(name-of-similarity, doc=doc-id, freq=term-frequency), computed from: , and attaches the score (computed via the Score(BasicStats, Single, Single) method) and the explanation for the term frequency. Subclasses content with this format may add additional details in Explain(Explanation, BasicStats, Int32, Single, Single) . Declaration public virtual Explanation Explain(BasicStats stats, int doc, Explanation freq, float docLen) Parameters Type Name Description BasicStats stats the corpus level statistics. System.Int32 doc the document id. Explanation freq the term frequency and its explanation. System.Single docLen the document length. Returns Type Description Explanation the explanation. | Improve this Doc View Source FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) Fills all member fields defined in BasicStats in stats . Subclasses can override this method to fill additional stats. Declaration protected virtual void FillBasicStats(BasicStats stats, CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description BasicStats stats CollectionStatistics collectionStats TermStatistics termStats | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Log2(Double) Returns the base two logarithm of x . Declaration public static double Log2(double x) Parameters Type Name Description System.Double x Returns Type Description System.Double | Improve this Doc View Source NewStats(String, Single) Factory method to return a custom stats object Declaration protected virtual BasicStats NewStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Returns Type Description BasicStats | Improve this Doc View Source Score(BasicStats, Single, Single) Scores the document doc . Subclasses must apply their scoring formula in this class. Declaration public abstract float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats the corpus level statistics. System.Single freq the term frequency. System.Single docLen the document length. Returns Type Description System.Single the score. | Improve this Doc View Source ToString() Subclasses must override this method to return the name of the Similarity and preferably the values of parameters (if any) as well. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopDocsCollector-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopDocsCollector-1.html",
    "title": "Class TopDocsCollector<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopDocsCollector<T> A base class for all collectors that return a TopDocs output. This collector allows easy extension by providing a single constructor which accepts a PriorityQueue<T> as well as protected members for that priority queue and a counter of the number of total hits. Extending classes can override any of the methods to provide their own implementation, as well as avoid the use of the priority queue entirely by passing null to TopDocsCollector(PriorityQueue<T>) . In that case however, you might want to consider overriding all methods, in order to avoid a System.NullReferenceException . Inheritance System.Object TopDocsCollector<T> TopFieldCollector TopScoreDocCollector Implements ITopDocsCollector ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopDocsCollector<T> : ITopDocsCollector, ICollector where T : ScoreDoc Type Parameters Name Description T Constructors | Improve this Doc View Source TopDocsCollector(PriorityQueue<T>) Sole constructor. Declaration protected TopDocsCollector(PriorityQueue<T> pq) Parameters Type Name Description PriorityQueue <T> pq Fields | Improve this Doc View Source EMPTY_TOPDOCS This is used in case GetTopDocs() is called with illegal parameters, or there simply aren't (enough) results. Declaration protected static readonly TopDocs EMPTY_TOPDOCS Field Value Type Description TopDocs | Improve this Doc View Source m_pq The priority queue which holds the top documents. Note that different implementations of PriorityQueue<T> give different meaning to 'top documents'. Lucene.Net.Search.HitQueue for example aggregates the top scoring documents, while other priority queue implementations may hold documents sorted by other criteria. Declaration protected PriorityQueue<T> m_pq Field Value Type Description PriorityQueue <T> | Improve this Doc View Source m_totalHits The total number of documents that the collector encountered. Declaration protected int m_totalHits Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration public abstract bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TopDocsCount The number of valid priority queue entries Declaration protected virtual int TopDocsCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHits The total number of documents that matched this query. Declaration public virtual int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopDocs() Returns the top docs that were collected by this collector. Declaration public virtual TopDocs GetTopDocs() Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32) Returns the documents in the rage [ start .. pq.Count) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned. This method is convenient to call if the application always asks for the last results, starting from the last 'page'. NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different start , you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration public virtual TopDocs GetTopDocs(int start) Parameters Type Name Description System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source GetTopDocs(Int32, Int32) Returns the documents in the rage [ start .. start + howMany ) that were collected by this collector. Note that if start >= pq.Count, an empty TopDocs is returned, and if pq.Count - start < howMany , then only the available documents in [ start .. pq.Count) are returned. This method is useful to call in case pagination of search results is allowed by the search application, as well as it attempts to optimize the memory used by allocating only as much as requested by howMany . NOTE: you cannot call this method more than once for each search execution. If you need to call it more than once, passing each time a different range, you should call GetTopDocs() and work with the returned TopDocs object, which will contain all the results this search execution collected. Declaration public virtual TopDocs GetTopDocs(int start, int howMany) Parameters Type Name Description System.Int32 start System.Int32 howMany Returns Type Description TopDocs | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Returns a TopDocs instance containing the given results. If results is null it means there are no results to return, either because there were 0 calls to Collect(Int32) or because the arguments to TopDocs were invalid. Declaration protected virtual TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs | Improve this Doc View Source PopulateResults(ScoreDoc[], Int32) Populates the results array with the ScoreDoc instances. This can be overridden in case a different ScoreDoc type should be returned. Declaration protected virtual void PopulateResults(ScoreDoc[] results, int howMany) Parameters Type Name Description ScoreDoc [] results System.Int32 howMany | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to Collect(Int32) ), should save the passed-in Scorer and call GetScore() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ITopDocsCollector ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopFieldCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopFieldCollector.html",
    "title": "Class TopFieldCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopFieldCollector A ICollector that sorts by SortField using FieldComparer s. See the Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) method for instantiating a TopFieldCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TopDocsCollector < FieldValueHitQueue.Entry > TopFieldCollector Implements ITopDocsCollector ICollector Inherited Members TopDocsCollector<FieldValueHitQueue.Entry>.EMPTY_TOPDOCS TopDocsCollector<FieldValueHitQueue.Entry>.m_pq TopDocsCollector<FieldValueHitQueue.Entry>.m_totalHits TopDocsCollector<FieldValueHitQueue.Entry>.TotalHits TopDocsCollector<FieldValueHitQueue.Entry>.TopDocsCount TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs() TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs(Int32) TopDocsCollector<FieldValueHitQueue.Entry>.GetTopDocs(Int32, Int32) TopDocsCollector<FieldValueHitQueue.Entry>.SetScorer(Scorer) TopDocsCollector<FieldValueHitQueue.Entry>.Collect(Int32) TopDocsCollector<FieldValueHitQueue.Entry>.SetNextReader(AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopFieldCollector : TopDocsCollector<FieldValueHitQueue.Entry>, ITopDocsCollector, ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public override bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.AcceptsDocsOutOfOrder Methods | Improve this Doc View Source Create(Sort, Int32, FieldDoc, Boolean, Boolean, Boolean, Boolean) Creates a new TopFieldCollector from the given arguments. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static TopFieldCollector Create(Sort sort, int numHits, FieldDoc after, bool fillFields, bool trackDocScores, bool trackMaxScore, bool docsScoredInOrder) Parameters Type Name Description Sort sort The sort criteria ( SortField s). System.Int32 numHits The number of results to collect. FieldDoc after Only hits after this FieldDoc will be collected System.Boolean fillFields Specifies whether the actual field values should be returned on the results ( FieldDoc ). System.Boolean trackDocScores Specifies whether document scores should be tracked and set on the results. Note that if set to false , then the results' scores will be set to System.Single.NaN . Setting this to true affects performance, as it incurs the score computation on each competitive result. Therefore if document scores are not required by the application, it is recommended to set it to false . System.Boolean trackMaxScore Specifies whether the query's maxScore should be tracked and set on the resulting TopDocs . Note that if set to false , MaxScore returns System.Single.NaN . Setting this to true affects performance as it incurs the score computation on each result. Also, setting this true automatically sets trackDocScores to true as well. System.Boolean docsScoredInOrder Specifies whether documents are scored in doc Id order or not by the given Scorer in SetScorer(Scorer) . Returns Type Description TopFieldCollector A TopFieldCollector instance which will sort the results by the sort criteria. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) Creates a new TopFieldCollector from the given arguments. NOTE : The instances returned by this method pre-allocate a full array of length numHits . Declaration public static TopFieldCollector Create(Sort sort, int numHits, bool fillFields, bool trackDocScores, bool trackMaxScore, bool docsScoredInOrder) Parameters Type Name Description Sort sort The sort criteria ( SortField s). System.Int32 numHits The number of results to collect. System.Boolean fillFields Specifies whether the actual field values should be returned on the results ( FieldDoc ). System.Boolean trackDocScores Specifies whether document scores should be tracked and set on the results. Note that if set to false , then the results' scores will be set to System.Single.NaN . Setting this to true affects performance, as it incurs the score computation on each competitive result. Therefore if document scores are not required by the application, it is recommended to set it to false . System.Boolean trackMaxScore Specifies whether the query's Lucene.Net.Search.TopFieldCollector.maxScore should be tracked and set on the resulting TopDocs . Note that if set to false , MaxScore returns System.Single.NaN . Setting this to true affects performance as it incurs the score computation on each result. Also, setting this true automatically sets trackDocScores to true as well. System.Boolean docsScoredInOrder Specifies whether documents are scored in doc Id order or not by the given Scorer in SetScorer(Scorer) . Returns Type Description TopFieldCollector A TopFieldCollector instance which will sort the results by the sort criteria. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Declaration protected override TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.NewTopDocs(Lucene.Net.Search.ScoreDoc[], System.Int32) | Improve this Doc View Source PopulateResults(ScoreDoc[], Int32) Declaration protected override void PopulateResults(ScoreDoc[] results, int howMany) Parameters Type Name Description ScoreDoc [] results System.Int32 howMany Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.FieldValueHitQueue.Entry>.PopulateResults(Lucene.Net.Search.ScoreDoc[], System.Int32) Implements ITopDocsCollector ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopFieldDocs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopFieldDocs.html",
    "title": "Class TopFieldDocs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopFieldDocs Represents hits returned by Search(Query, Filter, Int32, Sort) . Inheritance System.Object TopDocs TopFieldDocs Inherited Members TopDocs.TotalHits TopDocs.ScoreDocs TopDocs.MaxScore TopDocs.Merge(Sort, Int32, TopDocs[]) TopDocs.Merge(Sort, Int32, Int32, TopDocs[]) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TopFieldDocs : TopDocs Constructors | Improve this Doc View Source TopFieldDocs(Int32, ScoreDoc[], SortField[], Single) Creates one of these objects. Declaration public TopFieldDocs(int totalHits, ScoreDoc[] scoreDocs, SortField[] fields, float maxScore) Parameters Type Name Description System.Int32 totalHits Total number of hits for the query. ScoreDoc [] scoreDocs The top hits for the query. SortField [] fields The sort criteria used to find the top hits. System.Single maxScore The maximum score encountered. Properties | Improve this Doc View Source Fields The fields which were used to sort results by. Declaration public SortField[] Fields { get; set; } Property Value Type Description SortField [] Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopScoreDocCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopScoreDocCollector.html",
    "title": "Class TopScoreDocCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopScoreDocCollector A ICollector implementation that collects the top-scoring hits, returning them as a TopDocs . this is used by IndexSearcher to implement TopDocs -based search. Hits are sorted by score descending and then (when the scores are tied) docID ascending. When you create an instance of this collector you should know in advance whether documents are going to be collected in doc Id order or not. NOTE : The values System.Single.NaN and System.Single.NegativeInfinity are not valid scores. This collector will not properly collect hits with such scores. Inheritance System.Object TopDocsCollector < ScoreDoc > TopScoreDocCollector Implements ITopDocsCollector ICollector Inherited Members TopDocsCollector<ScoreDoc>.EMPTY_TOPDOCS TopDocsCollector<ScoreDoc>.m_pq TopDocsCollector<ScoreDoc>.m_totalHits TopDocsCollector<ScoreDoc>.PopulateResults(ScoreDoc[], Int32) TopDocsCollector<ScoreDoc>.TotalHits TopDocsCollector<ScoreDoc>.TopDocsCount TopDocsCollector<ScoreDoc>.GetTopDocs() TopDocsCollector<ScoreDoc>.GetTopDocs(Int32) TopDocsCollector<ScoreDoc>.GetTopDocs(Int32, Int32) TopDocsCollector<ScoreDoc>.Collect(Int32) TopDocsCollector<ScoreDoc>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopScoreDocCollector : TopDocsCollector<ScoreDoc>, ITopDocsCollector, ICollector Methods | Improve this Doc View Source Create(Int32, ScoreDoc, Boolean) Creates a new TopScoreDocCollector given the number of hits to collect, the bottom of the previous page, and whether documents are scored in order by the input Scorer to SetScorer(Scorer) . NOTE : The instances returned by this method pre-allocate a full array of length numHits , and fill the array with sentinel objects. Declaration public static TopScoreDocCollector Create(int numHits, ScoreDoc after, bool docsScoredInOrder) Parameters Type Name Description System.Int32 numHits ScoreDoc after System.Boolean docsScoredInOrder Returns Type Description TopScoreDocCollector | Improve this Doc View Source Create(Int32, Boolean) Creates a new TopScoreDocCollector given the number of hits to collect and whether documents are scored in order by the input Scorer to SetScorer(Scorer) . NOTE : The instances returned by this method pre-allocate a full array of length numHits , and fill the array with sentinel objects. Declaration public static TopScoreDocCollector Create(int numHits, bool docsScoredInOrder) Parameters Type Name Description System.Int32 numHits System.Boolean docsScoredInOrder Returns Type Description TopScoreDocCollector | Improve this Doc View Source NewTopDocs(ScoreDoc[], Int32) Declaration protected override TopDocs NewTopDocs(ScoreDoc[] results, int start) Parameters Type Name Description ScoreDoc [] results System.Int32 start Returns Type Description TopDocs Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.NewTopDocs(Lucene.Net.Search.ScoreDoc[], System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides Lucene.Net.Search.TopDocsCollector<Lucene.Net.Search.ScoreDoc>.SetScorer(Lucene.Net.Search.Scorer) Implements ITopDocsCollector ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopTermsRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopTermsRewrite-1.html",
    "title": "Class TopTermsRewrite<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopTermsRewrite<Q> Base rewrite method for collecting only the top terms via a priority queue. @lucene.internal - Only public to be accessible by spans package. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite <Q> TopTermsRewrite<Q> MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite MultiTermQuery.TopTermsScoringBooleanQueryRewrite Inherited Members TermCollectingRewrite<Q>.GetTopLevelQuery() TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single) TermCollectingRewrite<Q>.AddClause(Q, Term, Int32, Single, TermContext) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TopTermsRewrite<Q> : TermCollectingRewrite<Q>, ITopTermsRewrite where Q : Query Type Parameters Name Description Q Constructors | Improve this Doc View Source TopTermsRewrite(Int32) Create a TopTermsRewrite<Q> for at most count terms. NOTE: if MaxClauseCount is smaller than count , then it will be used instead. Declaration public TopTermsRewrite(int count) Parameters Type Name Description System.Int32 count Properties | Improve this Doc View Source Count Return the maximum priority queue size. NOTE: This was size() in Lucene. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxSize Return the maximum size of the priority queue (for boolean rewrites this is MaxClauseCount ). Declaration protected abstract int MaxSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TotalHitCountCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TotalHitCountCollector.html",
    "title": "Class TotalHitCountCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TotalHitCountCollector Just counts the total number of hits. Inheritance System.Object TotalHitCountCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TotalHitCountCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TotalHits Returns how many hits matched the search. Declaration public virtual int TotalHits { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.WildcardQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.WildcardQuery.html",
    "title": "Class WildcardQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WildcardQuery Implements the wildcard search query. Supported wildcards are , which matches any character sequence (including the empty one), and ? , which matches any single character. '&apos; is the escape character. Note this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow WildcardQueries, a Wildcard term should not start with the wildcard This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. Inheritance System.Object Query MultiTermQuery AutomatonQuery WildcardQuery Inherited Members AutomatonQuery.m_automaton AutomatonQuery.m_compiled AutomatonQuery.m_term AutomatonQuery.GetTermsEnum(Terms, AttributeSource) AutomatonQuery.GetHashCode() AutomatonQuery.Equals(Object) AutomatonQuery.Automaton MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class WildcardQuery : AutomatonQuery Constructors | Improve this Doc View Source WildcardQuery(Term) Constructs a query for terms matching term . Declaration public WildcardQuery(Term term) Parameters Type Name Description Term term Fields | Improve this Doc View Source WILDCARD_CHAR Char equality with support for wildcards Declaration public const char WILDCARD_CHAR = '?' Field Value Type Description System.Char | Improve this Doc View Source WILDCARD_ESCAPE Escape character Declaration public const char WILDCARD_ESCAPE = '\\\\' Field Value Type Description System.Char | Improve this Doc View Source WILDCARD_STRING String equality with support for wildcards Declaration public const char WILDCARD_STRING = '*' Field Value Type Description System.Char Properties | Improve this Doc View Source Term Returns the pattern term. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source ToAutomaton(Term) Convert Lucene wildcard syntax into an automaton. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static Automaton ToAutomaton(Term wildcardquery) Parameters Type Name Description Term wildcardquery Returns Type Description Automaton | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides AutomatonQuery.ToString(String) Extension Methods Number.IsNumber(Object) See Also AutomatonQuery"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMInputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMInputStream.html",
    "title": "Class RAMInputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMInputStream A memory-resident IndexInput implementation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataInput IndexInput RAMInputStream Implements System.IDisposable Inherited Members IndexInput.Dispose() IndexInput.ToString() IndexInput.Clone() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class RAMInputStream : IndexInput, IDisposable Constructors | Improve this Doc View Source RAMInputStream(String, RAMFile) Declaration public RAMInputStream(string name, RAMFile f) Parameters Type Name Description System.String name RAMFile f Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source Seek(Int64) Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMOutputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMOutputStream.html",
    "title": "Class RAMOutputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMOutputStream A memory-resident IndexOutput implementation. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DataOutput IndexOutput RAMOutputStream Implements System.IDisposable Inherited Members IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class RAMOutputStream : IndexOutput, IDisposable Constructors | Improve this Doc View Source RAMOutputStream() Construct an empty output buffer. Declaration public RAMOutputStream() | Improve this Doc View Source RAMOutputStream(RAMFile) Declaration public RAMOutputStream(RAMFile f) Parameters Type Name Description RAMFile f Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; set; } Property Value Type Description System.Int64 Overrides IndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides IndexOutput.Flush() | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexOutput.GetFilePointer() | Improve this Doc View Source GetSizeInBytes() Returns byte usage of all buffers. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source Reset() Resets this to an empty file. Declaration public virtual void Reset() | Improve this Doc View Source Seek(Int64) Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexOutput.Seek(Int64) | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) | Improve this Doc View Source WriteTo(DataOutput) Copy the current contents of this buffer to the named output. Declaration public virtual void WriteTo(DataOutput out) Parameters Type Name Description DataOutput out | Improve this Doc View Source WriteTo(Byte[], Int32) Copy the current contents of this buffer to output byte array Declaration public virtual void WriteTo(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes System.Int32 offset Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimitedDirectoryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimitedDirectoryWrapper.html",
    "title": "Class RateLimitedDirectoryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RateLimitedDirectoryWrapper A Directory wrapper that allows IndexOutput rate limiting using IO context ( IOContext.UsageContext ) specific rate limiters ( RateLimiter ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory FilterDirectory RateLimitedDirectoryWrapper Implements System.IDisposable Inherited Members FilterDirectory.m_input FilterDirectory.Delegate FilterDirectory.ListAll() FilterDirectory.FileExists(String) FilterDirectory.DeleteFile(String) FilterDirectory.FileLength(String) FilterDirectory.Sync(ICollection<String>) FilterDirectory.OpenInput(String, IOContext) FilterDirectory.MakeLock(String) FilterDirectory.ClearLock(String) FilterDirectory.Dispose(Boolean) FilterDirectory.SetLockFactory(LockFactory) FilterDirectory.GetLockID() FilterDirectory.LockFactory FilterDirectory.ToString() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.EnsureOpen() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class RateLimitedDirectoryWrapper : FilterDirectory, IDisposable Constructors | Improve this Doc View Source RateLimitedDirectoryWrapper(Directory) Declaration public RateLimitedDirectoryWrapper(Directory wrapped) Parameters Type Name Description Directory wrapped Methods | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides Directory.Copy(Directory, String, String, IOContext) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides FilterDirectory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source GetMaxWriteMBPerSec(IOContext.UsageContext) See SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public double GetMaxWriteMBPerSec(IOContext.UsageContext context) Parameters Type Name Description IOContext.UsageContext context Returns Type Description System.Double Exceptions Type Condition System.ObjectDisposedException if the Directory is already disposed | Improve this Doc View Source SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) Sets the maximum (approx) MB/sec allowed by all write IO performed by IndexOutput created with the given IOContext.UsageContext . Pass null for mbPerSec to have no limit. NOTE : For already created IndexOutput instances there is no guarantee this new rate will apply to them; it will only be guaranteed to apply for new created IndexOutput instances. NOTE : this is an optional operation and might not be respected by all Directory implementations. Currently only buffered ( FSDirectory ) Directory implementations use rate-limiting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void SetMaxWriteMBPerSec(double? mbPerSec, IOContext.UsageContext context) Parameters Type Name Description System.Nullable < System.Double > mbPerSec IOContext.UsageContext context Exceptions Type Condition System.ObjectDisposedException if the Directory is already disposed | Improve this Doc View Source SetRateLimiter(RateLimiter, IOContext.UsageContext) Sets the rate limiter to be used to limit (approx) MB/sec allowed by all IO performed with the given context ( IOContext.UsageContext ). Pass null to have no limit. Passing an instance of rate limiter compared to setting it using SetMaxWriteMBPerSec(Nullable<Double>, IOContext.UsageContext) allows to use the same limiter instance across several directories globally limiting IO across them. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void SetRateLimiter(RateLimiter mergeWriteRateLimiter, IOContext.UsageContext context) Parameters Type Name Description RateLimiter mergeWriteRateLimiter IOContext.UsageContext context Exceptions Type Condition System.ObjectDisposedException if the Directory is already disposed Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also SetRateLimiter(RateLimiter, IOContext.UsageContext)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimiter.SimpleRateLimiter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimiter.SimpleRateLimiter.html",
    "title": "Class RateLimiter.SimpleRateLimiter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RateLimiter.SimpleRateLimiter Simple class to rate limit IO. Inheritance System.Object RateLimiter RateLimiter.SimpleRateLimiter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class SimpleRateLimiter : RateLimiter Constructors | Improve this Doc View Source SimpleRateLimiter(Double) mbPerSec is the MB/sec max IO rate Declaration public SimpleRateLimiter(double mbPerSec) Parameters Type Name Description System.Double mbPerSec Properties | Improve this Doc View Source MbPerSec The current mb per second rate limit. Declaration public override double MbPerSec { get; } Property Value Type Description System.Double Overrides RateLimiter.MbPerSec Methods | Improve this Doc View Source Pause(Int64) Pauses, if necessary, to keep the instantaneous IO rate at or below the target. NOTE: multiple threads may safely use this, however the implementation is not perfectly thread safe but likely in practice this is harmless (just means in some rare cases the rate might exceed the target). It's best to call this with a biggish count, not one byte at a time. Declaration public override long Pause(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.Int64 the pause time in nano seconds Overrides RateLimiter.Pause(Int64) | Improve this Doc View Source SetMbPerSec(Double) Sets an updated mb per second rate limit. Declaration public override void SetMbPerSec(double mbPerSec) Parameters Type Name Description System.Double mbPerSec Overrides RateLimiter.SetMbPerSec(Double) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.html",
    "title": "Class SimpleFSDirectory.SimpleFSIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFSDirectory.SimpleFSIndexInput Reads bytes with System.IO.FileStream.Seek(System.Int64,System.IO.SeekOrigin) followed by System.IO.FileStream.Read(System.Byte[],System.Int32,System.Int32) . Inheritance System.Object DataInput IndexInput BufferedIndexInput SimpleFSDirectory.SimpleFSIndexInput Implements System.IDisposable Inherited Members BufferedIndexInput.BUFFER_SIZE BufferedIndexInput.MERGE_BUFFER_SIZE BufferedIndexInput.m_buffer BufferedIndexInput.ReadByte() BufferedIndexInput.SetBufferSize(Int32) BufferedIndexInput.NewBuffer(Byte[]) BufferedIndexInput.BufferSize BufferedIndexInput.ReadBytes(Byte[], Int32, Int32) BufferedIndexInput.ReadBytes(Byte[], Int32, Int32, Boolean) BufferedIndexInput.ReadInt16() BufferedIndexInput.ReadInt32() BufferedIndexInput.ReadInt64() BufferedIndexInput.ReadVInt32() BufferedIndexInput.ReadVInt64() BufferedIndexInput.GetFilePointer() BufferedIndexInput.Seek(Int64) BufferedIndexInput.FlushBuffer(IndexOutput, Int64) BufferedIndexInput.GetBufferSize(IOContext) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax protected class SimpleFSIndexInput : BufferedIndexInput, IDisposable Constructors | Improve this Doc View Source SimpleFSIndexInput(String, FileStream, IOContext) Declaration public SimpleFSIndexInput(string resourceDesc, FileStream file, IOContext context) Parameters Type Name Description System.String resourceDesc System.IO.FileStream file IOContext context | Improve this Doc View Source SimpleFSIndexInput(String, FileStream, Int64, Int64, Int32) Declaration public SimpleFSIndexInput(string resourceDesc, FileStream file, long off, long length, int bufferSize) Parameters Type Name Description System.String resourceDesc System.IO.FileStream file System.Int64 off System.Int64 length System.Int32 bufferSize Fields | Improve this Doc View Source m_end end offset (start+length) Declaration protected readonly long m_end Field Value Type Description System.Int64 | Improve this Doc View Source m_file the file channel we will read from Declaration protected readonly FileStream m_file Field Value Type Description System.IO.FileStream | Improve this Doc View Source m_off start offset: non-zero in the slice case Declaration protected readonly long m_off Field Value Type Description System.Int64 Properties | Improve this Doc View Source IsClone is this instance a clone and hence does not own the file to close it Declaration public bool IsClone { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsFDValid Declaration public virtual bool IsFDValid { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides BufferedIndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) IndexInput methods Declaration protected override void ReadInternal(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides BufferedIndexInput.ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SeekInternal(Int64) Declaration protected override void SeekInternal(long position) Parameters Type Name Description System.Int64 position Overrides BufferedIndexInput.SeekInternal(Int64) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSDirectory.html",
    "title": "Class SimpleFSDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFSDirectory A straightforward implementation of FSDirectory using System.IO.FileStream . However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. Inheritance System.Object Directory BaseDirectory FSDirectory SimpleFSDirectory Implements System.IDisposable Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class SimpleFSDirectory : FSDirectory, IDisposable Constructors | Improve this Doc View Source SimpleFSDirectory(DirectoryInfo) Create a new SimpleFSDirectory for the named location and NativeFSLockFactory . Declaration public SimpleFSDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SimpleFSDirectory(DirectoryInfo, LockFactory) Create a new SimpleFSDirectory for the named location. Declaration public SimpleFSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SimpleFSDirectory(String) Create a new SimpleFSDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public SimpleFSDirectory(string path) Parameters Type Name Description System.String path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SimpleFSDirectory(String, LockFactory) Create a new SimpleFSDirectory for the named location. LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public SimpleFSDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IQueue-1.html",
    "title": "Interface IQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueue<T> The interface describing the operations of a FIFO queue data structure. Inherited Members IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IQueue<T> : IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T The item type Properties | Improve this Doc View Source AllowsDuplicates Declaration bool AllowsDuplicates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Get the index 'th element of the queue. The front of the queue has index 0. Declaration T this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description T Methods | Improve this Doc View Source Dequeue() Dequeue an item from the front of the queue. Declaration T Dequeue() Returns Type Description T The item | Improve this Doc View Source Enqueue(T) Enqueue an item at the back of the queue. Declaration void Enqueue(T item) Parameters Type Name Description T item The item Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IReadOnlyCollection-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IReadOnlyCollection-1.html",
    "title": "Interface IReadOnlyCollection<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReadOnlyCollection<T> Represents a strongly-typed, read-only collection of elements. Enables System.Collections.Generic.IReadOnlyCollection to be used in .NET 4.5 projects Inherited Members System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable Type Parameters Name Description T Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IReadOnlyList-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IReadOnlyList-1.html",
    "title": "Interface IReadOnlyList<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReadOnlyList<T> Represents a read-only collection of elements that can be accessed by index. Enables System.Collections.Generic.IReadOnlyList to be used in .NET 4.5 projects Inherited Members System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IReadOnlyList<out T> : IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source Item[Int32] Gets the element at the specified index in the read-only list. Declaration T this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description T Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ISequenced-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ISequenced-1.html",
    "title": "Interface ISequenced<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISequenced<T> An editable collection maintaining a definite sequence order of the items. Implementations of this interface must compute the hash code and equality exactly as prescribed in the method definitions in order to be consistent with other collection classes implementing this interface. This interface is usually implemented by explicit interface implementation, not as ordinary virtual methods. Inherited Members ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ISequenced<T> : ICollection<T>, IExtensible<T>, ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Methods | Improve this Doc View Source GetSequencedHashCode() The hashcode is defined as h(...h(h(h(x1),x2),x3),...,xn) for h(a,b)=CONSTANT*a+b and the x's the hash codes of the items of this collection. Declaration int GetSequencedHashCode() Returns Type Description System.Int32 The sequence order hashcode of this collection. | Improve this Doc View Source SequencedEquals(ISequenced<T>) Compare this sequenced collection to another one in sequence order. Declaration bool SequencedEquals(ISequenced<T> otherCollection) Parameters Type Name Description ISequenced <T> otherCollection The sequenced collection to compare to. Returns Type Description System.Boolean True if this collection and that contains equal (according to this collection's itemequalityComparer) in the same sequence order. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IShowable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IShowable.html",
    "title": "Interface IShowable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IShowable (Describe usage of \"L:300\" format string.) Inherited Members System.IFormattable.ToString(System.String, System.IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IShowable : IFormattable Methods | Improve this Doc View Source Show(StringBuilder, ref Int32, IFormatProvider) Format this using at most approximately rest chars and append the result, possibly truncated, to stringbuilder. Subtract the actual number of used chars from rest . Declaration bool Show(StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest System.IFormatProvider formatProvider Returns Type Description System.Boolean True if the appended formatted string was complete (not truncated). Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ISorted-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ISorted-1.html",
    "title": "Interface ISorted<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISorted<T> A sorted collection, i.e. a collection where items are maintained and can be searched for in sorted order. Thus the sequence order is given as a sorting order. The sorting order is defined by a comparer, an object of type IComparer<T> ( C5.IComparer`1 ). Implementors of this interface will normally let the user define the comparer as an argument to a constructor. Usually there will also be constructors without a comparer argument, in which case the comparer should be the defalt comparer for the item type, C5.Comparer`1.Default . The comparer of the sorted collection is available as the System.Collections.Generic.Comparer property ( C5.ISorted`1.Comparer ). The methods are grouped according to Since this interface extends ISequenced<T>, sorted collections will also have an item equalityComparer ( C5.IExtensible`1.EqualityComparer ). This equalityComparer will not be used in connection with the inner workings of the sorted collection, but will be used if the sorted collection is used as an item in a collection of unsequenced or sequenced collections, ( C5.ICollection`1 and C5.ISequenced`1 ) Note that code may check if two sorted collections has the same sorting order by checking if the Comparer properties are equal. This is done a few places in this library for optimization purposes. Inherited Members ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ISorted<T> : ISequenced<T>, ICollection<T>, IExtensible<T>, ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source Comparer The comparer object supplied at creation time for this sorted collection. Declaration IComparer<T> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <T> The comparer Methods | Improve this Doc View Source AddSorted(IEnumerable<T>) Add all the items from another collection with an enumeration order that is increasing in the items. Declaration void AddSorted(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The collection to add. Exceptions Type Condition System.ArgumentException if the enumerated items turns out not to be in increasing order. | Improve this Doc View Source Cut(IComparable<T>, out T, out Boolean, out T, out Boolean) Given a \"cut\" function from the items of the sorted collection to int whose only sign changes when going through items in increasing order can be The \"cut\" function is supplied as the CompareTo method of an object c implementing IComparable<T> . A typical example is the case where T is comparable and cutFunction is itself of type T . This method performs a search in the sorted collection for the ranges in which the \"cut\" function is negative, zero respectively positive. If T is comparable and c is of type T , this is a safe way (no exceptions thrown) to find predecessor and successor of c . If the supplied cut function does not satisfy the sign-change condition, the result of this call is undefined. Declaration bool Cut(IComparable<T> cutFunction, out T low, out bool lowIsValid, out T high, out bool highIsValid) Parameters Type Name Description System.IComparable <T> cutFunction The cut function T to int , given by the CompareTo method of an object implementing IComparable<T> . T low Returns the largest item in the collection, where the cut function is positive (if any). System.Boolean lowIsValid Returns true if the cut function is positive somewhere on this collection. T high Returns the least item in the collection, where the cut function is negative (if any). System.Boolean highIsValid Returns true if the cut function is negative somewhere on this collection. Returns Type Description System.Boolean True if the cut function is zero somewhere on this collection. | Improve this Doc View Source DeleteMax() Remove the largest item from this sorted collection. Declaration T DeleteMax() Returns Type Description T The removed item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source DeleteMin() Remove the least item from this sorted collection. Declaration T DeleteMin() Returns Type Description T The removed item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source FindMax() Find the current largest item of this sorted collection. Declaration T FindMax() Returns Type Description T The largest item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source FindMin() Find the current least item of this sorted collection. Declaration T FindMin() Returns Type Description T The least item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source Predecessor(T) Find the strict predecessor in the sorted collection of a particular value, that is, the largest item in the collection less than the supplied value. Declaration T Predecessor(T item) Parameters Type Name Description T item The item to find the predecessor for. Returns Type Description T The predecessor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is less than or equal to the minimum of this collection.) | Improve this Doc View Source RangeAll() Create a directed collection with the same items as this collection. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedCollectionValue<T> RangeAll() Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeFrom(T) Query this sorted collection for items greater than or equal to a supplied value. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<T> RangeFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive). Returns Type Description IDirectedEnumerable <T> The result directed collection. | Improve this Doc View Source RangeFromTo(T, T) Query this sorted collection for items between two supplied values. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<T> RangeFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive). T top The upper bound (exclusive). Returns Type Description IDirectedEnumerable <T> The result directed collection. | Improve this Doc View Source RangeTo(T) Query this sorted collection for items less than a supplied value. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<T> RangeTo(T top) Parameters Type Name Description T top The upper bound (exclusive). Returns Type Description IDirectedEnumerable <T> The result directed collection. | Improve this Doc View Source RemoveRangeFrom(T) Remove all items of this collection above or at a supplied threshold. Declaration void RemoveRangeFrom(T low) Parameters Type Name Description T low The lower threshold (inclusive). | Improve this Doc View Source RemoveRangeFromTo(T, T) Remove all items of this collection between two supplied thresholds. Declaration void RemoveRangeFromTo(T low, T hi) Parameters Type Name Description T low The lower threshold (inclusive). T hi The upper threshold (exclusive). | Improve this Doc View Source RemoveRangeTo(T) Remove all items of this collection below a supplied threshold. Declaration void RemoveRangeTo(T hi) Parameters Type Name Description T hi The upper threshold (exclusive). | Improve this Doc View Source Successor(T) Find the strict successor in the sorted collection of a particular value, that is, the least item in the collection greater than the supplied value. Declaration T Successor(T item) Parameters Type Name Description T item The item to find the successor for. Returns Type Description T The successor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is greater than or equal to the maximum of this collection.) | Improve this Doc View Source TryPredecessor(T, out T) Find the strict predecessor of item in the sorted collection, that is, the greatest item in the collection smaller than the item. Declaration bool TryPredecessor(T item, out T res) Parameters Type Name Description T item The item to find the predecessor for. T res The predecessor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a predecessor; otherwise false. | Improve this Doc View Source TrySuccessor(T, out T) Find the strict successor of item in the sorted collection, that is, the least item in the collection greater than the supplied value. Declaration bool TrySuccessor(T item, out T res) Parameters Type Name Description T item The item to find the successor for. T res The successor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a successor; otherwise false. | Improve this Doc View Source TryWeakPredecessor(T, out T) Find the weak predecessor of item in the sorted collection, that is, the greatest item in the collection smaller than or equal to the item. Declaration bool TryWeakPredecessor(T item, out T res) Parameters Type Name Description T item The item to find the weak predecessor for. T res The weak predecessor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a weak predecessor; otherwise false. | Improve this Doc View Source TryWeakSuccessor(T, out T) Find the weak successor of item in the sorted collection, that is, the least item in the collection greater than or equal to the supplied value. Declaration bool TryWeakSuccessor(T item, out T res) Parameters Type Name Description T item The item to find the weak successor for. T res The weak successor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a weak successor; otherwise false. | Improve this Doc View Source WeakPredecessor(T) Find the weak predecessor in the sorted collection of a particular value, that is, the largest item in the collection less than or equal to the supplied value. Declaration T WeakPredecessor(T item) Parameters Type Name Description T item The item to find the weak predecessor for. Returns Type Description T The weak predecessor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is less than the minimum of this collection.) | Improve this Doc View Source WeakSuccessor(T) Find the weak successor in the sorted collection of a particular value, that is, the least item in the collection greater than or equal to the supplied value. Declaration T WeakSuccessor(T item) Parameters Type Name Description T item The item to find the weak successor for. Returns Type Description T The weak successor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is greater than the maximum of this collection.) Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ISortedDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ISortedDictionary-2.html",
    "title": "Interface ISortedDictionary<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISortedDictionary<K, V> A dictionary with sorted keys. Inherited Members IDictionary<K, V>.EqualityComparer IDictionary<K, V>.Item[K] IDictionary<K, V>.IsReadOnly IDictionary<K, V>.Keys IDictionary<K, V>.Values IDictionary<K, V>.Func IDictionary<K, V>.Add(K, V) IDictionary<K, V>.AddAll<U, W>(IEnumerable<KeyValuePair<U, W>>) IDictionary<K, V>.ContainsSpeed IDictionary<K, V>.ContainsAll<H>(IEnumerable<H>) IDictionary<K, V>.Remove(K) IDictionary<K, V>.Remove(K, V) IDictionary<K, V>.Clear() IDictionary<K, V>.Contains(K) IDictionary<K, V>.Find(K, V) IDictionary<K, V>.Update(K, V) IDictionary<K, V>.Update(K, V, V) IDictionary<K, V>.FindOrAdd(K, V) IDictionary<K, V>.UpdateOrAdd(K, V) IDictionary<K, V>.UpdateOrAdd(K, V, V) IDictionary<K, V>.Check() ICollectionValue<KeyValuePair<K, V>>.ListenableEvents ICollectionValue<KeyValuePair<K, V>>.ActiveEvents ICollectionValue<KeyValuePair<K, V>>.CollectionChanged ICollectionValue<KeyValuePair<K, V>>.CollectionCleared ICollectionValue<KeyValuePair<K, V>>.ItemsAdded ICollectionValue<KeyValuePair<K, V>>.ItemInserted ICollectionValue<KeyValuePair<K, V>>.ItemsRemoved ICollectionValue<KeyValuePair<K, V>>.ItemRemovedAt ICollectionValue<KeyValuePair<K, V>>.IsEmpty ICollectionValue<KeyValuePair<K, V>>.Count ICollectionValue<KeyValuePair<K, V>>.CountSpeed ICollectionValue<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) ICollectionValue<KeyValuePair<K, V>>.ToArray() ICollectionValue<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) ICollectionValue<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) ICollectionValue<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) ICollectionValue<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) ICollectionValue<KeyValuePair<K, V>>.Choose() ICollectionValue<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) System.Collections.Generic.IEnumerable<Lucene.Net.Support.C5.KeyValuePair<K, V>>.GetEnumerator() System.Collections.IEnumerable.GetEnumerator() IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ISortedDictionary<K, V> : IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, IEnumerable<KeyValuePair<K, V>>, IEnumerable, IShowable, IFormattable Type Parameters Name Description K V Properties | Improve this Doc View Source Comparer The key comparer used by this dictionary. Declaration IComparer<K> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <K> | Improve this Doc View Source Keys Declaration ISorted<K> Keys { get; } Property Value Type Description ISorted <K> Methods | Improve this Doc View Source AddSorted(IEnumerable<KeyValuePair<K, V>>) Add all the items from another collection with an enumeration order that is increasing in the items. Declaration void AddSorted(IEnumerable<KeyValuePair<K, V>> items) Parameters Type Name Description System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> items The collection to add. Exceptions Type Condition System.ArgumentException if the enumerated items turns out not to be in increasing order. | Improve this Doc View Source Cut(IComparable<K>, out KeyValuePair<K, V>, out Boolean, out KeyValuePair<K, V>, out Boolean) Given a \"cut\" function from the items of the sorted collection to int whose only sign changes when going through items in increasing order can be The \"cut\" function is supplied as the CompareTo method of an object c implementing IComparable<K> . A typical example is the case where K is comparable and c is itself of type K . This method performs a search in the sorted collection for the ranges in which the \"cut\" function is negative, zero respectively positive. If K is comparable and c is of type K , this is a safe way (no exceptions thrown) to find predecessor and successor of c . If the supplied cut function does not satisfy the sign-change condition, the result of this call is undefined. Declaration bool Cut(IComparable<K> cutFunction, out KeyValuePair<K, V> lowEntry, out bool lowIsValid, out KeyValuePair<K, V> highEntry, out bool highIsValid) Parameters Type Name Description System.IComparable <K> cutFunction The cut function K to int , given by the CompareTo method of an object implementing IComparable<K> . KeyValuePair <K, V> lowEntry Returns the largest item in the collection, where the cut function is positive (if any). System.Boolean lowIsValid Returns true if the cut function is positive somewhere on this collection. KeyValuePair <K, V> highEntry Returns the least item in the collection, where the cut function is negative (if any). System.Boolean highIsValid Returns true if the cut function is negative somewhere on this collection. Returns Type Description System.Boolean True if the cut function is zero somewhere on this collection. | Improve this Doc View Source DeleteMax() Remove the largest item from this sorted collection. Declaration KeyValuePair<K, V> DeleteMax() Returns Type Description KeyValuePair <K, V> The removed item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source DeleteMin() Remove the least item from this sorted collection. Declaration KeyValuePair<K, V> DeleteMin() Returns Type Description KeyValuePair <K, V> The removed item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source FindMax() Find the current largest item of this sorted collection. Declaration KeyValuePair<K, V> FindMax() Returns Type Description KeyValuePair <K, V> The largest item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source FindMin() Find the current least item of this sorted collection. Declaration KeyValuePair<K, V> FindMin() Returns Type Description KeyValuePair <K, V> The least item. Exceptions Type Condition NoSuchItemException if the collection is empty. | Improve this Doc View Source Predecessor(K) Find the entry with the largest key less than a given key. Declaration KeyValuePair<K, V> Predecessor(K key) Parameters Type Name Description K key The key to compare to Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException if there is no such entry. | Improve this Doc View Source RangeAll() Create a directed collection with the same items as this collection. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedCollectionValue<KeyValuePair<K, V>> RangeAll() Returns Type Description IDirectedCollectionValue < KeyValuePair <K, V>> The result directed collection. | Improve this Doc View Source RangeFrom(K) Query this sorted collection for items greater than or equal to a supplied value. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<KeyValuePair<K, V>> RangeFrom(K bot) Parameters Type Name Description K bot The lower bound (inclusive). Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> The result directed collection. | Improve this Doc View Source RangeFromTo(K, K) Query this sorted collection for items between two supplied values. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<KeyValuePair<K, V>> RangeFromTo(K lowerBound, K upperBound) Parameters Type Name Description K lowerBound The lower bound (inclusive). K upperBound The upper bound (exclusive). Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> The result directed collection. | Improve this Doc View Source RangeTo(K) Query this sorted collection for items less than a supplied value. The returned collection is not a copy but a view into the collection. The view is fragile in the sense that changes to the underlying collection will invalidate the view so that further operations on the view throws InvalidView exceptions. Declaration IDirectedEnumerable<KeyValuePair<K, V>> RangeTo(K top) Parameters Type Name Description K top The upper bound (exclusive). Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> The result directed collection. | Improve this Doc View Source RemoveRangeFrom(K) Remove all items of this collection above or at a supplied threshold. Declaration void RemoveRangeFrom(K low) Parameters Type Name Description K low The lower threshold (inclusive). | Improve this Doc View Source RemoveRangeFromTo(K, K) Remove all items of this collection between two supplied thresholds. Declaration void RemoveRangeFromTo(K low, K hi) Parameters Type Name Description K low The lower threshold (inclusive). K hi The upper threshold (exclusive). | Improve this Doc View Source RemoveRangeTo(K) Remove all items of this collection below a supplied threshold. Declaration void RemoveRangeTo(K hi) Parameters Type Name Description K hi The upper threshold (exclusive). | Improve this Doc View Source Successor(K) Find the entry with the least key greater than a given key. Declaration KeyValuePair<K, V> Successor(K key) Parameters Type Name Description K key The key to compare to Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException if there is no such entry. | Improve this Doc View Source TryPredecessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the predecessor of the specified key. Declaration bool TryPredecessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The predecessor, if any Returns Type Description System.Boolean True if key has a predecessor | Improve this Doc View Source TrySuccessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the successor of the specified key. Declaration bool TrySuccessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The successor, if any Returns Type Description System.Boolean True if the key has a successor | Improve this Doc View Source TryWeakPredecessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the weak predecessor of the specified key. Declaration bool TryWeakPredecessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The predecessor, if any Returns Type Description System.Boolean True if key has a weak predecessor | Improve this Doc View Source TryWeakSuccessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the weak successor of the specified key. Declaration bool TryWeakSuccessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The weak successor, if any Returns Type Description System.Boolean True if the key has a weak successor | Improve this Doc View Source WeakPredecessor(K) Find the entry with the largest key less than or equal to a given key. Declaration KeyValuePair<K, V> WeakPredecessor(K key) Parameters Type Name Description K key The key to compare to Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException if there is no such entry. | Improve this Doc View Source WeakSuccessor(K) Find the entry with the least key greater than or equal to a given key. Declaration KeyValuePair<K, V> WeakSuccessor(K key) Parameters Type Name Description K key The key to compare to Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException if there is no such entry. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.html",
    "title": "Class AbstractAllGroupHeadsCollector<GH> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector<GH> This collector specializes in collecting the most relevant document (group head) for each group that match the query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector<GH> FunctionAllGroupHeadsCollector TermAllGroupHeadsCollector<GH> Implements ICollector Inherited Members AbstractAllGroupHeadsCollector.SetScorer(Scorer) AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector<GH> : AbstractAllGroupHeadsCollector, ICollector where GH : AbstractAllGroupHeadsCollector_GroupHead Type Parameters Name Description GH Constructors | Improve this Doc View Source AbstractAllGroupHeadsCollector(Int32) Declaration protected AbstractAllGroupHeadsCollector(int numberOfSorts) Parameters Type Name Description System.Int32 numberOfSorts Fields | Improve this Doc View Source m_compIDXEnd Declaration protected readonly int m_compIDXEnd Field Value Type Description System.Int32 | Improve this Doc View Source m_reversed Declaration protected readonly int[] m_reversed Field Value Type Description System.Int32 [] | Improve this Doc View Source m_temporalResult Declaration protected readonly AbstractAllGroupHeadsCollector<GH>.TemporalResult m_temporalResult Field Value Type Description AbstractAllGroupHeadsCollector.TemporalResult <> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public override bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides AbstractAllGroupHeadsCollector.AcceptsDocsOutOfOrder | Improve this Doc View Source CollectedGroupHeads Returns the collected group heads. Subsequent calls should return the same group heads. Declaration protected abstract ICollection<GH> CollectedGroupHeads { get; } Property Value Type Description System.Collections.Generic.ICollection <GH> the collected group heads | Improve this Doc View Source GroupHeadsCount The number of group heads found for a query. LUCENENET NOTE: This was groupHeadsSize() in Lucene Declaration public override int GroupHeadsCount { get; } Property Value Type Description System.Int32 the number of group heads found for a query. Overrides AbstractAllGroupHeadsCollector.GroupHeadsCount Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides AbstractAllGroupHeadsCollector.Collect(Int32) | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Returns the group head and puts it into AbstractAllGroupHeadsCollector<GH>.TemporalResult . If the group head wasn't encountered before then it will be added to the collected group heads. The Stop property will be true if the group head wasn't encountered before otherwise false . Declaration protected abstract override void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc The document to retrieve the group head for. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeadAndAddIfNotExist(Int32) Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source RetrieveGroupHeads() Declaration public override int[] RetrieveGroupHeads() Returns Type Description System.Int32 [] an int array containing all group heads. The size of the array is equal to number of collected unique groups. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeads() | Improve this Doc View Source RetrieveGroupHeads(Int32) Declaration public override FixedBitSet RetrieveGroupHeads(int maxDoc) Parameters Type Name Description System.Int32 maxDoc The maxDoc of the top level IndexReader Returns Type Description FixedBitSet a FixedBitSet containing all group heads. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeads(Int32) Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector.html",
    "title": "Class AbstractAllGroupHeadsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector LUCENENET specific class used to reference an AbstractAllGroupHeadsCollector<GH> subclass without refering to its generic closing type. Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector <GH> Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration public abstract bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GroupHeadsCount The number of group heads found for a query. LUCENENET NOTE: This was groupHeadsSize() in Lucene Declaration public abstract int GroupHeadsCount { get; } Property Value Type Description System.Int32 the number of group heads found for a query. Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Returns the group head and puts it into AbstractAllGroupHeadsCollector<GH>.TemporalResult . If the group head wasn't encountered before then it will be added to the collected group heads. The Stop property will be true if the group head wasn't encountered before otherwise false . Declaration protected abstract void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc The document to retrieve the group head for. Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source RetrieveGroupHeads() Declaration public abstract int[] RetrieveGroupHeads() Returns Type Description System.Int32 [] an int array containing all group heads. The size of the array is equal to number of collected unique groups. | Improve this Doc View Source RetrieveGroupHeads(Int32) Declaration public abstract FixedBitSet RetrieveGroupHeads(int maxDoc) Parameters Type Name Description System.Int32 maxDoc The maxDoc of the top level IndexReader Returns Type Description FixedBitSet a FixedBitSet containing all group heads. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to ), should save the passed-in Scorer and call scorer.Score() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractAllGroupsCollector-1.html",
    "title": "Class AbstractAllGroupsCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAllGroupsCollector<TGroupValue> A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. This is an abstract version. Concrete implementations define what a group actually is and how it is internally collected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector<TGroupValue> FunctionAllGroupsCollector TermAllGroupsCollector Implements IAbstractAllGroupsCollector <TGroupValue> ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupsCollector<TGroupValue> : IAbstractAllGroupsCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GroupCount Returns the total number of groups for the executed search. This is a convenience method. The following code snippet has the same effect: GetGroups().Count Declaration public virtual int GroupCount { get; } Property Value Type Description System.Int32 The total number of groups for the executed search | Improve this Doc View Source Groups Returns the group values This is an unordered collections of group values. For each group that matched the query there is a BytesRef representing a group value. Declaration public abstract IEnumerable<TGroupValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> the group values Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector-1.html",
    "title": "Class AbstractDistinctValuesCollector<GC> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector<GC> A second pass grouping collector that keeps track of distinct values for a specified field for the top N group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector<GC> FunctionDistinctValuesCollector TermDistinctValuesCollector Implements IAbstractDistinctValuesCollector <GC> ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractDistinctValuesCollector<GC> : IAbstractDistinctValuesCollector<GC>, ICollector where GC : AbstractDistinctValuesCollector.IGroupCount<object> Type Parameters Name Description GC Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Groups Returns all unique values for each top N group. Declaration public abstract IEnumerable<GC> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <GC> all unique values for each top N group Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.GroupCount-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.GroupCount-1.html",
    "title": "Class AbstractDistinctValuesCollector.GroupCount<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector.GroupCount<TGroupValue> Returned by Groups , representing the value and set of distinct values for the group. Inheritance System.Object AbstractDistinctValuesCollector.GroupCount<TGroupValue> FunctionDistinctValuesCollector.GroupCount TermDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class GroupCount<TGroupValue> : AbstractDistinctValuesCollector.IGroupCount<TGroupValue> Type Parameters Name Description TGroupValue Remarks LUCENENET - removed this class from being a nested class of AbstractDistinctValuesCollector<GC> and renamed from GroupCount to AbstractGroupCount Constructors | Improve this Doc View Source GroupCount(TGroupValue) Declaration public GroupCount(TGroupValue groupValue) Parameters Type Name Description TGroupValue groupValue Properties | Improve this Doc View Source GroupValue Declaration public TGroupValue GroupValue { get; protected set; } Property Value Type Description TGroupValue | Improve this Doc View Source UniqueValues Declaration public IEnumerable<TGroupValue> UniqueValues { get; protected set; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector-1.html",
    "title": "Class AbstractFirstPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractFirstPassGroupingCollector<TGroupValue> FirstPassGroupingCollector is the first of two passes necessary to collect grouped hits. This pass gathers the top N sorted groups. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector<TGroupValue> FunctionFirstPassGroupingCollector TermFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector <TGroupValue> ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractFirstPassGroupingCollector<TGroupValue> : IAbstractFirstPassGroupingCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source AbstractFirstPassGroupingCollector(Sort, Int32) Create the first pass collector. Declaration public AbstractFirstPassGroupingCollector(Sort groupSort, int topNGroups) Parameters Type Name Description Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use Sort.RELEVANCE. System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException If I/O related errors occur Fields | Improve this Doc View Source m_orderedGroups Declaration protected SortedSet<CollectedSearchGroup<TGroupValue>> m_orderedGroups Field Value Type Description System.Collections.Generic.SortedSet < CollectedSearchGroup <TGroupValue>> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CopyDocGroupValue(TGroupValue, TGroupValue) Returns a copy of the specified group value by creating a new instance and copying the value from the specified groupValue in the new instance. Or optionally the reuse argument can be used to copy the group value in. Declaration protected abstract TGroupValue CopyDocGroupValue(TGroupValue groupValue, TGroupValue reuse) Parameters Type Name Description TGroupValue groupValue The group value to copy TGroupValue reuse Optionally a reuse instance to prevent a new instance creation Returns Type Description TGroupValue a copy of the specified group value | Improve this Doc View Source GetDocGroupValue(Int32) Returns the group value for the specified doc. Declaration protected abstract TGroupValue GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc The specified doc Returns Type Description TGroupValue the group value for the specified doc | Improve this Doc View Source GetTopGroups(Int32, Boolean) Returns top groups, starting from offset. This may return null, if no groups were collected, or if the number of unique groups collected is <= offset. Declaration public virtual IEnumerable<ISearchGroup<TGroupValue>> GetTopGroups(int groupOffset, bool fillFields) Parameters Type Name Description System.Int32 groupOffset The offset in the collected groups System.Boolean fillFields Whether to fill to SortValues Returns Type Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> top groups, starting from offset | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilter.html",
    "title": "Class ICUFoldingFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUFoldingFilter A TokenFilter that applies search term folding to Unicode text, applying foldings from UTR#30 Character Foldings. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUNormalizer2Filter ICUFoldingFilter Implements System.IDisposable Inherited Members ICUNormalizer2Filter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUFoldingFilter : ICUNormalizer2Filter, IDisposable Remarks This filter applies the following foldings from the report to unicode text: Accent removal Case folding Canonical duplicates folding Dashes folding Diacritic removal (including stroke, hook, descender) Greek letterforms folding Han Radical folding Hebrew Alternates folding Jamo folding Letterforms folding Math symbol folding Multigraph Expansions: All Native digit folding No-break folding Overline folding Positional forms folding Small forms folding Space folding Spacing Accents folding Subscript folding Superscript folding Suzhou Numeral folding Symbol folding Underline folding Vertical forms folding Width folding Additionally, Default Ignorables are removed, and text is normalized to NFKC. All foldings, case folding, and normalization mappings are applied recursively to ensure a fully folded and normalized result. Constructors | Improve this Doc View Source ICUFoldingFilter(TokenStream) Create a new ICUFoldingFilter on the specified input Declaration public ICUFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUFoldingFilterFactory.html",
    "title": "Class ICUFoldingFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUFoldingFilterFactory Factory for ICUFoldingFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUFoldingFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUFoldingFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks <fieldType name=\"text_folded\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ICUFoldingFilterFactory\"/> </analyzer> </fieldType> Constructors | Improve this Doc View Source ICUFoldingFilterFactory(IDictionary<String, String>) Creates a new ICUFoldingFilterFactory . Declaration public ICUFoldingFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilter.html",
    "title": "Class ICUNormalizer2CharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUNormalizer2CharFilter Normalize token text with ICU's ICU4N.Text.Normalizer2 . Inheritance System.Object System.IO.TextReader CharFilter BaseCharFilter ICUNormalizer2CharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Read() CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUNormalizer2CharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source ICUNormalizer2CharFilter(TextReader) Create a new ICUNormalizer2CharFilter that combines NFKC normalization, Case Folding, and removes Default Ignorables (NFKC_Casefold). Declaration public ICUNormalizer2CharFilter(TextReader input) Parameters Type Name Description System.IO.TextReader input | Improve this Doc View Source ICUNormalizer2CharFilter(TextReader, Normalizer2) Create a new ICUNormalizer2CharFilter with the specified ICU4N.Text.Normalizer2 . Declaration public ICUNormalizer2CharFilter(TextReader input, Normalizer2 normalizer) Parameters Type Name Description System.IO.TextReader input Input text. ICU4N.Text.Normalizer2 normalizer Normalizer to use. Methods | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilterFactory.html",
    "title": "Class ICUNormalizer2CharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUNormalizer2CharFilterFactory Factory for ICUNormalizer2CharFilter . Inheritance System.Object AbstractAnalysisFactory CharFilterFactory ICUNormalizer2CharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2CharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: name A Unicode Normalization Form , one of 'nfc','nfkc', 'nfkc_cf'. Default is nfkc_cf. mode Either 'compose' or 'decompose'. Default is compose. Use \"decompose\" with nfc or nfkc, to get nfd or nfkd, respectively. filter A ICU4N.Text.UnicodeSet pattern. Codepoints outside the set are always left unchanged. Default is [] (the null set, no filtering). Constructors | Improve this Doc View Source ICUNormalizer2CharFilterFactory(IDictionary<String, String>) Creates a new ICUNormalizer2CharFilterFactory . Declaration public ICUNormalizer2CharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent See Also ICUNormalizer2CharFilter ICU4N.Text.Normalizer2 ICU4N.Text.FilteredNormalizer2"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html",
    "title": "Class ICUNormalizer2Filter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUNormalizer2Filter Normalize token text with ICU's ICU4N.Text.Normalizer2 . Inheritance System.Object AttributeSource TokenStream TokenFilter ICUNormalizer2Filter ICUFoldingFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2Filter : TokenFilter, IDisposable Remarks With this filter, you can normalize text in the following ways: NFKC Normalization, Case Folding, and removing Ignorables (the default) Using a standard Normalization mode (NFC, NFD, NFKC, NFKD) Based on rules from a custom normalization mapping. If you use the defaults, this filter is a simple way to standardize Unicode text in a language-independent way for search: The case folding that it does can be seen as a replacement for LowerCaseFilter: For example, it handles cases such as the Greek sigma, so that \"Μάϊος\" and \"ΜΆΪΟΣ\" will match correctly. The normalization will standardizes different forms of the same character in Unicode. For example, CJK full-width numbers will be standardized to their ASCII forms. Ignorables such as Zero-Width Joiner and Variation Selectors are removed. These are typically modifier characters that affect display. Constructors | Improve this Doc View Source ICUNormalizer2Filter(TokenStream) Create a new ICUNormalizer2Filter that combines NFKC normalization, Case Folding, and removes Default Ignorables (NFKC_Casefold) Declaration public ICUNormalizer2Filter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source ICUNormalizer2Filter(TokenStream, Normalizer2) Create a new ICUNormalizer2Filter with the specified ICU4N.Text.Normalizer2 Declaration public ICUNormalizer2Filter(TokenStream input, Normalizer2 normalizer) Parameters Type Name Description TokenStream input stream ICU4N.Text.Normalizer2 normalizer normalizer to use Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also ICU4N.Text.Normalizer2 ICU4N.Text.FilteredNormalizer2"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2FilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUNormalizer2FilterFactory.html",
    "title": "Class ICUNormalizer2FilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUNormalizer2FilterFactory Factory for ICUNormalizer2Filter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUNormalizer2FilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public class ICUNormalizer2FilterFactory : TokenFilterFactory, IMultiTermAwareComponent Remarks Supports the following attributes: name A Unicode Normalization Form , one of 'nfc','nfkc', 'nfkc_cf'. Default is nfkc_cf. mode Either 'compose' or 'decompose'. Default is compose. Use \"decompose\" with nfc or nfkc, to get nfd or nfkd, respectively. filter A ICU4N.Text.UnicodeSet pattern. Codepoints outside the set are always left unchanged. Default is [] (the null set, no filtering). Constructors | Improve this Doc View Source ICUNormalizer2FilterFactory(IDictionary<String, String>) Creates a new ICUNormalizer2FilterFactory . Declaration public ICUNormalizer2FilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent See Also ICUNormalizer2Filter ICU4N.Text.Normalizer2 ICU4N.Text.FilteredNormalizer2"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.ICUTransformFilter.html",
    "title": "Class ICUTransformFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUTransformFilter A TokenFilter that transforms text with ICU. Inheritance System.Object AttributeSource TokenStream TokenFilter ICUTransformFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Icu Assembly : Lucene.Net.ICU.dll Syntax public sealed class ICUTransformFilter : TokenFilter, IDisposable Remarks ICU provides text-transformation functionality via its Transliteration API. Although script conversion is its most common use, a Transliterator can actually perform a more general class of tasks. In fact, Transliterator defines a very general API which specifies only that a segment of the input text is replaced by new text. The particulars of this conversion are determined entirely by subclasses of Transliterator. Some useful transformations for search are built-in: Conversion from Traditional to Simplified Chinese characters Conversion from Hiragana to Katakana Conversion from Fullwidth to Halfwidth forms. Script conversions, for example Serbian Cyrillic to Latin Example usage: stream = new ICUTransformFilter(stream, Transliterator.GetInstance(\"Traditional-Simplified\")); For more details, see the ICU User Guide . Constructors | Improve this Doc View Source ICUTransformFilter(TokenStream, Transliterator) Create a new ICUTransformFilter that transforms text on the given stream. Declaration public ICUTransformFilter(TokenStream input, Transliterator transform) Parameters Type Name Description TokenStream input TokenStream to filter. ICU4N.Text.Transliterator transform Transliterator to transform the text. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Gener.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Gener.html",
    "title": "Class Gener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Gener The Gener object helps in the discarding of nodes which break the reduction effort and defend the structure against large reductions. Inheritance System.Object Reduce Gener Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Gener : Reduce Constructors | Improve this Doc View Source Gener() Constructor for the Gener object. Declaration public Gener() Methods | Improve this Doc View Source Eat(Row, Int32[]) Test whether the given Row of Cells in a Trie should be included in an optimized Trie. Declaration public bool Eat(Row in, int[] remap) Parameters Type Name Description Row in the Row to test System.Int32 [] remap Description of the Parameter Returns Type Description System.Boolean true if the Row should remain; otherwise, false | Improve this Doc View Source Optimize(Trie) Return a Trie with infrequent values occurring in the given Trie removed. Declaration public override Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimize Returns Type Description Trie a new optimized Trie Overrides Reduce.Optimize(Trie)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.CzechAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.CzechAnalyzer.html",
    "title": "Class CzechAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CzechAnalyzer Analyzer for Czech language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating CzechAnalyzer : As of 3.1, words are stemmed with CzechStemFilter As of 2.9, StopFilter preserves position increments As of 2.4, Tokens incorrectly identified as acronyms are corrected (see LUCENE-1068 ) Inheritance System.Object Analyzer StopwordAnalyzerBase CzechAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CzechAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source CzechAnalyzer(LuceneVersion) Builds an analyzer with the default stop words ( DefaultStopSet ). Declaration public CzechAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match | Improve this Doc View Source CzechAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public CzechAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match CharArraySet stopwords a stopword set | Improve this Doc View Source CzechAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and a set of work to be excluded from the CzechStemFilter . Declaration public CzechAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionTable) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match CharArraySet stopwords a stopword set CharArraySet stemExclusionTable a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Czech stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default Czech-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default Czech-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , and CzechStemFilter (only if version is >= LUCENE_31). If a version is >= LUCENE_31 and a stem exclusion set is provided via CzechAnalyzer(LuceneVersion, CharArraySet, CharArraySet) a SetKeywordMarkerFilter is added before CzechStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.CzechStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.CzechStemFilter.html",
    "title": "Class CzechStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CzechStemFilter A TokenFilter that applies CzechStemmer to stem Czech words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE : Input is expected to be in lowercase, but with diacritical marks Inheritance System.Object AttributeSource TokenStream TokenFilter CzechStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CzechStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CzechStemFilter(TokenStream) Declaration public CzechStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.CzechStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cz.CzechStemFilterFactory.html",
    "title": "Class CzechStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CzechStemFilterFactory Factory for CzechStemFilter . <fieldType name=\"text_czstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.CzechStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CzechStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cz Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CzechStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source CzechStemFilterFactory(IDictionary<String, String>) Creates a new CzechStemFilterFactory Declaration public CzechStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Da.DanishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Da.DanishAnalyzer.html",
    "title": "Class DanishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DanishAnalyzer Analyzer for Danish. Inheritance System.Object Analyzer StopwordAnalyzerBase DanishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Da Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class DanishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source DanishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public DanishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source DanishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public DanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source DanishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public DanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Danish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"danish_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanAnalyzer.html",
    "title": "Class GermanAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanAnalyzer Analyzer for German language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating GermanAnalyzer: NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Analyzer StopwordAnalyzerBase GermanAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source GermanAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DefaultStopSet . Declaration public GermanAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source GermanAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public GermanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source GermanAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words Declaration public GermanAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a stemming exclusion set Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default German stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"german_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns a set of default German-stopwords Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet a set of default German-stopwords Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from a StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided, GermanNormalizationFilter and GermanLightStemFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanLightStemFilter.html",
    "title": "Class GermanLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanLightStemFilter A TokenFilter that applies GermanLightStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanLightStemFilter(TokenStream) Declaration public GermanLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanLightStemFilterFactory.html",
    "title": "Class GermanLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanLightStemFilterFactory Factory for GermanLightStemFilter . <fieldType name=\"text_delgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GermanLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GermanLightStemFilterFactory(IDictionary<String, String>) Creates a new GermanLightStemFilterFactory Declaration public GermanLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanMinimalStemFilter.html",
    "title": "Class GermanMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanMinimalStemFilter A TokenFilter that applies GermanMinimalStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter GermanMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanMinimalStemFilter(TokenStream) Declaration public GermanMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanMinimalStemFilterFactory.html",
    "title": "Class GermanMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanMinimalStemFilterFactory Factory for GermanMinimalStemFilter . <fieldType name=\"text_deminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory GermanMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source GermanMinimalStemFilterFactory(IDictionary<String, String>) Creates a new GermanMinimalStemFilterFactory Declaration public GermanMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanNormalizationFilter.html",
    "title": "Class GermanNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanNormalizationFilter Normalizes German characters according to the heuristics of the http://snowball.tartarus.org/algorithms/german2/stemmer.html German2 snowball algorithm . It allows for the fact that ä, ö and ü are sometimes written as ae, oe and ue. This is useful if you want this normalization without using the German2 stemmer, or perhaps no stemming at all. Inheritance System.Object AttributeSource TokenStream TokenFilter GermanNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class GermanNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source GermanNormalizationFilter(TokenStream) Declaration public GermanNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.EmptyTokenStream.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.EmptyTokenStream.html",
    "title": "Class EmptyTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EmptyTokenStream An always exhausted token stream. Inheritance System.Object AttributeSource TokenStream EmptyTokenStream Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Reset() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EmptyTokenStream : TokenStream, IDisposable Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilter.html",
    "title": "Class HyphenatedWordsFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HyphenatedWordsFilter When the plain text is extracted from documents, we will often have many words hyphenated and broken into two lines. This is often the case with documents where narrow text columns are used, such as newsletters. In order to increase search efficiency, this filter puts hyphenated words broken into two lines back together. This filter should be used on indexing time only. Example field definition in schema.xml: <fieldtype name=\"text\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer type=\"index\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"index_synonyms.txt\" ignoreCase=\"true\" expand=\"false\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"1\" catenateNumbers=\"1\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" ignoreCase=\"true\" expand=\"true\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldtype> Inheritance System.Object AttributeSource TokenStream TokenFilter HyphenatedWordsFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HyphenatedWordsFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HyphenatedWordsFilter(TokenStream) Creates a new HyphenatedWordsFilter Declaration public HyphenatedWordsFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream that will be filtered Methods | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate Attribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all Attribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public override bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilterFactory.html",
    "title": "Class HyphenatedWordsFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HyphenatedWordsFilterFactory Factory for HyphenatedWordsFilter . <fieldType name=\"text_hyphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HyphenatedWordsFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenatedWordsFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source HyphenatedWordsFilterFactory(IDictionary<String, String>) Creates a new HyphenatedWordsFilterFactory Declaration public HyphenatedWordsFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeepWordFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeepWordFilter.html",
    "title": "Class KeepWordFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeepWordFilter A TokenFilter that only keeps tokens with text contained in the required words. This filter behaves like the inverse of StopFilter . @since solr 1.3 Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter KeepWordFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeepWordFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source KeepWordFilter(LuceneVersion, TokenStream, CharArraySet) Create a new KeepWordFilter . NOTE : The words set passed to this constructor will be directly used by this filter and should not be modified. Declaration public KeepWordFilter(LuceneVersion version, TokenStream in, CharArraySet words) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume CharArraySet words the words to keep | Improve this Doc View Source KeepWordFilter(LuceneVersion, Boolean, TokenStream, CharArraySet) Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public KeepWordFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream in, CharArraySet words) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream in CharArraySet words Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeepWordFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeepWordFilterFactory.html",
    "title": "Class KeepWordFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeepWordFilterFactory Factory for KeepWordFilter . <fieldType name=\"text_keepword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeepWordFilterFactory\" words=\"keepwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory KeepWordFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KeepWordFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source KeepWordFilterFactory(IDictionary<String, String>) Creates a new KeepWordFilterFactory Declaration public KeepWordFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source EnablePositionIncrements Declaration public virtual bool EnablePositionIncrements { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Words Declaration public virtual CharArraySet Words { get; } Property Value Type Description CharArraySet Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilter.html",
    "title": "Class KeywordMarkerFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter PatternKeywordMarkerFilter SetKeywordMarkerFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class KeywordMarkerFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KeywordMarkerFilter(TokenStream) Creates a new KeywordMarkerFilter Declaration protected KeywordMarkerFilter(TokenStream in) Parameters Type Name Description TokenStream in the input stream Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsKeyword() Declaration protected abstract bool IsKeyword() Returns Type Description System.Boolean Implements System.IDisposable See Also KeywordAttribute"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilterFactory.html",
    "title": "Class KeywordMarkerFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordMarkerFilterFactory Factory for KeywordMarkerFilter . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeywordMarkerFilterFactory\" protected=\"protectedkeyword.txt\" pattern=\"^.+er$\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory KeywordMarkerFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KeywordMarkerFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source KeywordMarkerFilterFactory(IDictionary<String, String>) Creates a new KeywordMarkerFilterFactory Declaration public KeywordMarkerFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PATTERN Declaration public const string PATTERN = \"pattern\" Field Value Type Description System.String | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = \"protected\" Field Value Type Description System.String Properties | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilter.html",
    "title": "Class KeywordRepeatFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordRepeatFilter This TokenFilter emits each incoming token twice once as keyword and once non-keyword, in other words once with IsKeyword set to true and once set to false . This is useful if used with a stem filter that respects the KeywordAttribute to index the stemmed and the un-stemmed version of a term into the same field. Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordRepeatFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordRepeatFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KeywordRepeatFilter(TokenStream) Construct a token stream filtering the given input. Declaration public KeywordRepeatFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilterFactory.html",
    "title": "Class KeywordRepeatFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeywordRepeatFilterFactory Factory for KeywordRepeatFilter . Since KeywordRepeatFilter emits two tokens for every input token, and any tokens that aren't transformed later in the analysis chain will be in the document twice. Therefore, consider adding RemoveDuplicatesTokenFilterFactory later in the analysis chain. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory KeywordRepeatFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KeywordRepeatFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source KeywordRepeatFilterFactory(IDictionary<String, String>) Creates a new KeywordRepeatFilterFactory Declaration public KeywordRepeatFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LengthFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LengthFilter.html",
    "title": "Class LengthFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LengthFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of UTF-16 code units. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter LengthFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LengthFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source LengthFilter(LuceneVersion, TokenStream, Int32, Int32) Create a new LengthFilter . This will filter out tokens whose CharTermAttribute is either too short ( Length < min) or too long ( Length > max). Declaration public LengthFilter(LuceneVersion version, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the TokenStream to consume System.Int32 min the minimum length System.Int32 max the maximum length | Improve this Doc View Source LengthFilter(LuceneVersion, Boolean, TokenStream, Int32, Int32) Declaration [Obsolete(\"enablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public LengthFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream in, int min, int max) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream in System.Int32 min System.Int32 max Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LengthFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LengthFilterFactory.html",
    "title": "Class LengthFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LengthFilterFactory Factory for LengthFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LengthFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LengthFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LengthFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source LengthFilterFactory(IDictionary<String, String>) Creates a new LengthFilterFactory Declaration public LengthFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source MAX_KEY Declaration public const string MAX_KEY = \"max\" Field Value Type Description System.String | Improve this Doc View Source MIN_KEY Declaration public const string MIN_KEY = \"min\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountAnalyzer.html",
    "title": "Class LimitTokenCountAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitTokenCountAnalyzer This Analyzer limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . Inheritance System.Object Analyzer AnalyzerWrapper LimitTokenCountAnalyzer Implements System.IDisposable Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenCountAnalyzer : AnalyzerWrapper, IDisposable Constructors | Improve this Doc View Source LimitTokenCountAnalyzer(Analyzer, Int32) Build an analyzer that limits the maximum number of tokens per field. This analyzer will not consume any tokens beyond the maxTokenCount limit Declaration public LimitTokenCountAnalyzer(Analyzer delegate, int maxTokenCount) Parameters Type Name Description Analyzer delegate System.Int32 maxTokenCount See Also LimitTokenCountAnalyzer(Analyzer, Int32, Boolean) | Improve this Doc View Source LimitTokenCountAnalyzer(Analyzer, Int32, Boolean) Build an analyzer that limits the maximum number of tokens per field. Declaration public LimitTokenCountAnalyzer(Analyzer delegate, int maxTokenCount, bool consumeAllTokens) Parameters Type Name Description Analyzer delegate the analyzer to wrap System.Int32 maxTokenCount max number of tokens to produce System.Boolean consumeAllTokens whether all tokens from the delegate should be consumed even if maxTokenCount is reached. Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer Overrides AnalyzerWrapper.GetWrappedAnalyzer(String) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable See Also LimitTokenCountFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilter.html",
    "title": "Class LimitTokenCountFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitTokenCountFilter This TokenFilter limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been reached, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenCountFilter(TokenStream, Int32, Boolean) consumeAllTokens option. Inheritance System.Object AttributeSource TokenStream TokenFilter LimitTokenCountFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenCountFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LimitTokenCountFilter(TokenStream, Int32) Build a filter that only accepts tokens up to a maximum number. This filter will not consume any tokens beyond the maxTokenCount limit Declaration public LimitTokenCountFilter(TokenStream in, int maxTokenCount) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenCount max number of tokens to produce See Also LimitTokenCountFilter(TokenStream, Int32, Boolean) | Improve this Doc View Source LimitTokenCountFilter(TokenStream, Int32, Boolean) Build an filter that limits the maximum number of tokens per field. Declaration public LimitTokenCountFilter(TokenStream in, int maxTokenCount, bool consumeAllTokens) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenCount max number of tokens to produce System.Boolean consumeAllTokens whether all tokens from the input must be consumed even if maxTokenCount is reached. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.html",
    "title": "Class LimitTokenCountFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitTokenCountFilterFactory Factory for LimitTokenCountFilter . <fieldType name=\"text_lngthcnt\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenCountFilterFactory\" maxTokenCount=\"10\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenCountFilter for an explanation of it's use. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LimitTokenCountFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LimitTokenCountFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source LimitTokenCountFilterFactory(IDictionary<String, String>) Creates a new LimitTokenCountFilterFactory Declaration public LimitTokenCountFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CONSUME_ALL_TOKENS_KEY Declaration public const string CONSUME_ALL_TOKENS_KEY = \"consumeAllTokens\" Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_COUNT_KEY Declaration public const string MAX_TOKEN_COUNT_KEY = \"maxTokenCount\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilter.html",
    "title": "Class LimitTokenPositionFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitTokenPositionFilter This TokenFilter limits its emitted tokens to those with positions that are not greater than the configured limit. By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been exceeded, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenPositionFilter(TokenStream, Int32, Boolean) consumeAllTokens option. Inheritance System.Object AttributeSource TokenStream TokenFilter LimitTokenPositionFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LimitTokenPositionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LimitTokenPositionFilter(TokenStream, Int32) Build a filter that only accepts tokens up to and including the given maximum position. This filter will not consume any tokens with position greater than the maxTokenPosition limit. Declaration public LimitTokenPositionFilter(TokenStream in, int maxTokenPosition) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenPosition max position of tokens to produce (1st token always has position 1) See Also LimitTokenPositionFilter(TokenStream, Int32, Boolean) | Improve this Doc View Source LimitTokenPositionFilter(TokenStream, Int32, Boolean) Build a filter that limits the maximum position of tokens to emit. Declaration public LimitTokenPositionFilter(TokenStream in, int maxTokenPosition, bool consumeAllTokens) Parameters Type Name Description TokenStream in the stream to wrap System.Int32 maxTokenPosition max position of tokens to produce (1st token always has position 1) System.Boolean consumeAllTokens whether all tokens from the wrapped input stream must be consumed even if maxTokenPosition is exceeded. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.html",
    "title": "Class LimitTokenPositionFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LimitTokenPositionFilterFactory Factory for LimitTokenPositionFilter . <fieldType name=\"text_limit_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenPositionFilterFactory\" maxTokenPosition=\"3\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenPositionFilter for an explanation of its use. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LimitTokenPositionFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LimitTokenPositionFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source LimitTokenPositionFilterFactory(IDictionary<String, String>) Creates a new LimitTokenPositionFilterFactory Declaration public LimitTokenPositionFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source CONSUME_ALL_TOKENS_KEY Declaration public const string CONSUME_ALL_TOKENS_KEY = \"consumeAllTokens\" Field Value Type Description System.String | Improve this Doc View Source MAX_TOKEN_POSITION_KEY Declaration public const string MAX_TOKEN_POSITION_KEY = \"maxTokenPosition\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net/Lucene.Net.Index.AtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.AtomicReader.html",
    "title": "Class AtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicReader AtomicReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. IndexReader s implemented by this subclass do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader AtomicReader FilterAtomicReader ParallelAtomicReader SegmentReader SlowCompositeReaderWrapper Implements System.IDisposable Inherited Members IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVectors(Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDocs IndexReader.MaxDoc IndexReader.NumDeletedDocs IndexReader.Document(Int32, StoredFieldVisitor) IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class AtomicReader : IndexReader, IDisposable Constructors | Improve this Doc View Source AtomicReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected AtomicReader() Properties | Improve this Doc View Source AtomicContext LUCENENET specific propety that allows access to the context as AtomicReaderContext , which prevents the need to cast. Declaration public AtomicReaderContext AtomicContext { get; } Property Value Type Description AtomicReaderContext | Improve this Doc View Source Context Declaration public override sealed IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext Overrides IndexReader.Context | Improve this Doc View Source FieldInfos Get the FieldInfos describing all fields in this reader. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source Fields Returns Fields for this reader. this property may return null if the reader has no postings. Declaration public abstract Fields Fields { get; } Property Value Type Description Fields | Improve this Doc View Source LiveDocs Returns the IBits representing live (not deleted) docs. A set bit indicates the doc ID has not been deleted. If this method returns null it means there are no deleted documents (all documents are live). The returned instance has been safely published for use by multiple threads without additional synchronization. Declaration public abstract IBits LiveDocs { get; } Property Value Type Description IBits Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source DocFreq(Term) Declaration public override sealed int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 Overrides IndexReader.DocFreq(Term) | Improve this Doc View Source GetBinaryDocValues(String) Returns BinaryDocValues for this field, or null if no BinaryDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues | Improve this Doc View Source GetDocCount(String) Declaration public override sealed int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 Overrides IndexReader.GetDocCount(String) | Improve this Doc View Source GetDocsWithField(String) Returns a IBits at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field, or null if no DocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits | Improve this Doc View Source GetNormValues(String) Returns NumericDocValues representing norms for this field, or null if no NumericDocValues were indexed. The returned instance should only be used by a single thread. Declaration public abstract NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetNumericDocValues(String) Returns NumericDocValues for this field, or null if no NumericDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues | Improve this Doc View Source GetSortedDocValues(String) Returns SortedDocValues for this field, or null if no SortedDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues | Improve this Doc View Source GetSortedSetDocValues(String) Returns SortedSetDocValues for this field, or null if no SortedSetDocValues were indexed for this field. The returned instance should only be used by a single thread. Declaration public abstract SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues | Improve this Doc View Source GetSumDocFreq(String) Declaration public override sealed long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumDocFreq(String) | Improve this Doc View Source GetSumTotalTermFreq(String) Declaration public override sealed long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 Overrides IndexReader.GetSumTotalTermFreq(String) | Improve this Doc View Source GetTermDocsEnum(Term) Returns DocsEnum for the specified term. This will return null if either the field or term does not exist. Declaration public DocsEnum GetTermDocsEnum(Term term) Parameters Type Name Description Term term Returns Type Description DocsEnum See Also Docs ( IBits , DocsEnum ) | Improve this Doc View Source GetTermPositionsEnum(Term) Returns DocsAndPositionsEnum for the specified term. This will return null if the field or term does not exist or positions weren't indexed. Declaration public DocsAndPositionsEnum GetTermPositionsEnum(Term term) Parameters Type Name Description Term term Returns Type Description DocsAndPositionsEnum See Also DocsAndPositions ( IBits , DocsAndPositionsEnum ) | Improve this Doc View Source GetTerms(String) This may return null if the field does not exist. Declaration public Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms | Improve this Doc View Source HasNorms(String) Returns true if there are norms stored for this field . Declaration [Obsolete(\"(4.0) use FieldInfos and check FieldInfo.HasNorms for the field instead.\")] public bool HasNorms(string field) Parameters Type Name Description System.String field Returns Type Description System.Boolean | Improve this Doc View Source TotalTermFreq(Term) Returns the number of documents containing the term . This method returns 0 if the term or field does not exist. This method does not take into account deleted documents that have not yet been merged away. Declaration public override sealed long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 Overrides IndexReader.TotalTermFreq(Term) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.Sorter.SortingMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Sorter.SortingMergePolicy.html",
    "title": "Class SortingMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortingMergePolicy A MergePolicy that reorders documents according to a Sort before merging them. As a consequence, all segments resulting from a merge will be sorted while segments resulting from a flush will be in the order in which documents have been added. NOTE : Never use this policy if you rely on AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) to have sequentially-assigned doc IDs, this policy will scatter doc IDs. NOTE : This policy should only be used with idempotent Sort s so that the order of segments is predictable. For example, using INDEXORDER in reverse (which is not idempotent) will make the order of documents in a segment depend on the number of times the segment has been merged. @lucene.experimental Inheritance System.Object MergePolicy SortingMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Dispose() MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public sealed class SortingMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source SortingMergePolicy(MergePolicy, Sort) Create a new MergePolicy that sorts documents with the given sort . Declaration public SortingMergePolicy(MergePolicy in, Sort sort) Parameters Type Name Description MergePolicy in Sort sort Fields | Improve this Doc View Source SORTER_ID_PROP Put in the Diagnostics to denote that this segment is sorted. Declaration public static readonly string SORTER_ID_PROP Field Value Type Description System.String Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergePolicy.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source IsSorted(AtomicReader, Sort) Returns true if the given reader is sorted by the specified sort . Declaration public static bool IsSorted(AtomicReader reader, Sort sort) Parameters Type Name Description AtomicReader reader Sort sort Returns Type Description System.Boolean | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.IBoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IBoostAttribute.html",
    "title": "Interface IBoostAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBoostAttribute Add this IAttribute to a TermsEnum returned by GetTermsEnum(Terms, AttributeSource) and update the boost on each returned term. This enables to control the boost factor for each matching term in SCORING_BOOLEAN_QUERY_REWRITE or TopTermsRewrite<Q> mode. FuzzyQuery is using this to take the edit distance into account. Please note: this attribute is intended to be added only by the TermsEnum to itself in its constructor and consumed by the MultiTermQuery.RewriteMethod . This is a Lucene.NET INTERNAL API, use at your own risk Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IBoostAttribute : IAttribute Properties | Improve this Doc View Source Boost Gets or Sets the boost in this attribute. Default is 1.0f . Declaration float Boost { get; set; } Property Value Type Description System.Single Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.DataInputStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.DataInputStream.html",
    "title": "Class DataInputStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DataInputStream Java's DataInputStream is similar to .NET's BinaryReader. However, it reads using a modified UTF-8 format that cannot be read using BinaryReader. This is a port of DataInputStream that is fully compatible with Java's DataOutputStream. Usage Note: Always favor BinaryReader over DataInputStream unless you specifically need the modified UTF-8 format and/or the ReadUTF() or Lucene.Net.Support.IO.DataInputStream.DecodeUTF(System.Int32) method. Inheritance System.Object DataInputStream Implements IDataInput System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class DataInputStream : IDataInput, IDisposable Constructors | Improve this Doc View Source DataInputStream(Stream) Constructs a new DataInputStream on the System.IO.Stream in . All reads are then filtered through this stream. Note that data read by this stream is not in a human readable format and was most likely created by a DataOutputStream . Declaration public DataInputStream(Stream in) Parameters Type Name Description System.IO.Stream in the source System.IO.Stream the filter reads from. See Also DataOutputStream Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Read(Byte[]) Declaration public int Read(byte[] buffer) Parameters Type Name Description System.Byte [] buffer Returns Type Description System.Int32 | Improve this Doc View Source Read(Byte[], Int32, Int32) Declaration public int Read(byte[] buffer, int offset, int length) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 length Returns Type Description System.Int32 | Improve this Doc View Source ReadBoolean() Declaration public bool ReadBoolean() Returns Type Description System.Boolean | Improve this Doc View Source ReadByte() NOTE: This was readUnsignedByte() in Java Declaration public int ReadByte() Returns Type Description System.Int32 | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char | Improve this Doc View Source ReadDouble() Declaration public double ReadDouble() Returns Type Description System.Double | Improve this Doc View Source ReadFully(Byte[]) Declaration public void ReadFully(byte[] buffer) Parameters Type Name Description System.Byte [] buffer | Improve this Doc View Source ReadFully(Byte[], Int32, Int32) Declaration public void ReadFully(byte[] buffer, int offset, int length) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 length | Improve this Doc View Source ReadInt16() NOTE: This was readShort() in Java Declaration public short ReadInt16() Returns Type Description System.Int16 | Improve this Doc View Source ReadInt32() NOTE: This was readInt() in Java Declaration public int ReadInt32() Returns Type Description System.Int32 | Improve this Doc View Source ReadInt64() NOTE: This was readLong() in Java Declaration public long ReadInt64() Returns Type Description System.Int64 | Improve this Doc View Source ReadLine() Declaration [Obsolete] public string ReadLine() Returns Type Description System.String | Improve this Doc View Source ReadSByte() NOTE: This was readByte() in Java Declaration public int ReadSByte() Returns Type Description System.Int32 | Improve this Doc View Source ReadSingle() NOTE: This was readFloat() in Java Declaration public float ReadSingle() Returns Type Description System.Single | Improve this Doc View Source ReadUInt16() NOTE: This was readUnsignedShort() in Java Declaration public int ReadUInt16() Returns Type Description System.Int32 | Improve this Doc View Source ReadUTF() Declaration public string ReadUTF() Returns Type Description System.String | Improve this Doc View Source SkipBytes(Int32) Declaration public int SkipBytes(int count) Parameters Type Name Description System.Int32 count Returns Type Description System.Int32 Implements IDataInput System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValue.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValue.html",
    "title": "Class MutableValue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValue Base class for all mutable values. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MutableValue MutableValueBool MutableValueDouble MutableValueInt32 MutableValueInt64 MutableValueSingle MutableValueStr Implements System.IComparable < MutableValue > System.IComparable Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public abstract class MutableValue : IComparable<MutableValue>, IComparable Constructors | Improve this Doc View Source MutableValue() Declaration protected MutableValue() Properties | Improve this Doc View Source Exists Declaration public bool Exists { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CompareSameType(Object) Declaration public abstract int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(MutableValue) Declaration public virtual int CompareTo(MutableValue other) Parameters Type Name Description MutableValue other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(Object) Declaration public virtual int CompareTo(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source Copy(MutableValue) Declaration public abstract void Copy(MutableValue source) Parameters Type Name Description MutableValue source | Improve this Doc View Source Duplicate() Declaration public abstract MutableValue Duplicate() Returns Type Description MutableValue | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source EqualsSameType(Object) Declaration public abstract bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToObject() Declaration public abstract object ToObject() Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueBool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueBool.html",
    "title": "Class MutableValueBool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueBool MutableValue implementation of type System.Boolean . Inheritance System.Object MutableValue MutableValueBool Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueBool : MutableValue, IComparable<MutableValue>, IComparable Properties | Improve this Doc View Source Value Declaration public bool Value { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.SpanishLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.SpanishLightStemFilterFactory.html",
    "title": "Class SpanishLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanishLightStemFilterFactory Factory for SpanishLightStemFilter . <fieldType name=\"text_eslgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SpanishLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SpanishLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SpanishLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SpanishLightStemFilterFactory(IDictionary<String, String>) Creates a new SpanishLightStemFilterFactory Declaration public SpanishLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Eu.BasqueAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Eu.BasqueAnalyzer.html",
    "title": "Class BasqueAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasqueAnalyzer Analyzer for Basque. Inheritance System.Object Analyzer StopwordAnalyzerBase BasqueAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Eu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BasqueAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source BasqueAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public BasqueAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BasqueAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public BasqueAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source BasqueAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public BasqueAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Basque stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.BaseFormAttribute.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.BaseFormAttribute.html",
    "title": "Class BaseFormAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseFormAttribute Attribute for GetBaseForm() . Inheritance System.Object Attribute BaseFormAttribute Implements IBaseFormAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class BaseFormAttribute : Attribute, IBaseFormAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetBaseForm() Declaration public virtual string GetBaseForm() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IBaseFormAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.IBaseFormAttribute.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.IBaseFormAttribute.html",
    "title": "Interface IBaseFormAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBaseFormAttribute Attribute for GetBaseForm() Note: depending on part of speech, this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IBaseFormAttribute : IAttribute Methods | Improve this Doc View Source GetBaseForm() Declaration string GetBaseForm() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilter.html",
    "title": "Class NumericPayloadTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericPayloadTokenFilter Assigns a payload to a token based on the Type Inheritance System.Object AttributeSource TokenStream TokenFilter NumericPayloadTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NumericPayloadTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source NumericPayloadTokenFilter(TokenStream, Single, String) Declaration public NumericPayloadTokenFilter(TokenStream input, float payload, string typeMatch) Parameters Type Name Description TokenStream input System.Single payload System.String typeMatch Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.html",
    "title": "Namespace Lucene.Net.Analysis.Ar | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ar Classes ArabicAnalyzer Analyzer for Arabic. This analyzer implements light-stemming as specified by: Light Stemming for Arabic Information Retrieval http://www.mtholyoke.edu/~lballest/Pubs/arab_stem05.pdf The analysis package contains three primary components: ArabicNormalizationFilter : Arabic orthographic normalization. ArabicStemFilter : Arabic light stemming Arabic stop words file: a set of default Arabic stop words. ArabicLetterTokenizer Tokenizer that breaks text into runs of letters and diacritics. The problem with the standard Letter tokenizer is that it fails on diacritics. Handling similar to this is necessary for Indic Scripts, Hebrew, Thaana, etc. You must specify the required LuceneVersion compatibility when creating ArabicLetterTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. ArabicLetterTokenizerFactory Factory for ArabicLetterTokenizer ArabicNormalizationFilter A TokenFilter that applies ArabicNormalizer to normalize the orthography. ArabicNormalizationFilterFactory Factory for ArabicNormalizationFilter . <fieldType name=\"text_arnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> </analyzer> </fieldType> ArabicNormalizer Normalizer for Arabic. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of hamza with alef seat to a bare alef. Normalization of teh marbuta to heh Normalization of dotless yeh (alef maksura) to yeh. Removal of Arabic diacritics (the harakat) Removal of tatweel (stretching character). ArabicStemFilter A TokenFilter that applies ArabicStemmer to stem Arabic words.. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . ArabicStemFilterFactory Factory for ArabicStemFilter . <fieldType name=\"text_arstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> <filter class=\"solr.ArabicStemFilterFactory\"/> </analyzer> </fieldType> ArabicStemmer Stemmer for Arabic. Stemming is done in-place for efficiency, operating on a termbuffer. Stemming is defined as: Removal of attached definite article, conjunction, and prepositions. Stemming of common suffixes."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicStemmer.html",
    "title": "Class ArabicStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicStemmer Stemmer for Arabic. Stemming is done in-place for efficiency, operating on a termbuffer. Stemming is defined as: Removal of attached definite article, conjunction, and prepositions. Stemming of common suffixes. Inheritance System.Object ArabicStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicStemmer Fields | Improve this Doc View Source ALEF Declaration public const char ALEF = 'ا' Field Value Type Description System.Char | Improve this Doc View Source BEH Declaration public const char BEH = 'ب' Field Value Type Description System.Char | Improve this Doc View Source FEH Declaration public const char FEH = 'ف' Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = 'ه' Field Value Type Description System.Char | Improve this Doc View Source KAF Declaration public const char KAF = 'ك' Field Value Type Description System.Char | Improve this Doc View Source LAM Declaration public const char LAM = 'ل' Field Value Type Description System.Char | Improve this Doc View Source NOON Declaration public const char NOON = 'ن' Field Value Type Description System.Char | Improve this Doc View Source prefixes Declaration public static readonly char[][] prefixes Field Value Type Description System.Char [][] | Improve this Doc View Source suffixes Declaration public static readonly char[][] suffixes Field Value Type Description System.Char [][] | Improve this Doc View Source TEH Declaration public const char TEH = 'ت' Field Value Type Description System.Char | Improve this Doc View Source TEH_MARBUTA Declaration public const char TEH_MARBUTA = 'ة' Field Value Type Description System.Char | Improve this Doc View Source WAW Declaration public const char WAW = 'و' Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = 'ي' Field Value Type Description System.Char Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Arabic text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization | Improve this Doc View Source StemPrefix(Char[], Int32) Stem a prefix off an Arabic word. Declaration public virtual int StemPrefix(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 new length of input buffer after stemming. | Improve this Doc View Source StemSuffix(Char[], Int32) Stem suffix(es) off an Arabic word. Declaration public virtual int StemSuffix(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 new length of input buffer after stemming"
  },
  "api/Lucene.Net/Lucene.Net.Util.PriorityQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PriorityQueue-1.html",
    "title": "Class PriorityQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PriorityQueue<T> A PriorityQueue<T> maintains a partial ordering of its elements such that the element with least priority can always be found in constant time. Put()'s and Pop()'s require log(size) time. NOTE : this class will pre-allocate a full array of length maxSize+1 if instantiated via the PriorityQueue(Int32, Boolean) constructor with prepopulate set to true . That maximum size can grow as we insert elements over the time. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PriorityQueue<T> FieldValueHitQueue<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class PriorityQueue<T> Type Parameters Name Description T Constructors | Improve this Doc View Source PriorityQueue(Int32) Declaration public PriorityQueue(int maxSize) Parameters Type Name Description System.Int32 maxSize | Improve this Doc View Source PriorityQueue(Int32, Boolean) Declaration public PriorityQueue(int maxSize, bool prepopulate) Parameters Type Name Description System.Int32 maxSize System.Boolean prepopulate Properties | Improve this Doc View Source Count Returns the number of elements currently stored in the PriorityQueue<T> . NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HeapArray This method returns the internal heap array as T[]. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected T[] HeapArray { get; } Property Value Type Description T[] | Improve this Doc View Source Top Returns the least element of the PriorityQueue<T> in constant time. Returns null if the queue is empty. Declaration public T Top { get; } Property Value Type Description T Methods | Improve this Doc View Source Add(T) Adds an Object to a PriorityQueue<T> in log(size) time. If one tries to add more objects than Lucene.Net.Util.PriorityQueue`1.maxSize from initialize and it is not possible to resize the heap, an System.IndexOutOfRangeException is thrown. Declaration public T Add(T element) Parameters Type Name Description T element Returns Type Description T The new 'top' element in the queue. | Improve this Doc View Source Clear() Removes all entries from the PriorityQueue<T> . Declaration public void Clear() | Improve this Doc View Source GetSentinelObject() This method can be overridden by extending classes to return a sentinel object which will be used by the PriorityQueue(Int32, Boolean) constructor to fill the queue, so that the code which uses that queue can always assume it's full and only change the top without attempting to insert any new object. Those sentinel values should always compare worse than any non-sentinel value (i.e., LessThan(T, T) should always favor the non-sentinel values). By default, this method returns false , which means the queue will not be filled with sentinel values. Otherwise, the value returned will be used to pre-populate the queue. Adds sentinel values to the queue. If this method is extended to return a non-null value, then the following usage pattern is recommended: // extends GetSentinelObject() to return a non-null value. PriorityQueue<MyObject> pq = new MyQueue<MyObject>(numHits); // save the 'top' element, which is guaranteed to not be null. MyObject pqTop = pq.Top; <...> // now in order to add a new element, which is 'better' than top (after // you've verified it is better), it is as simple as: pqTop.Change(). pqTop = pq.UpdateTop(); NOTE: if this method returns a non- null value, it will be called by the PriorityQueue(Int32, Boolean) constructor Count times, relying on a new object to be returned and will not check if it's null again. Therefore you should ensure any call to this method creates a new instance and behaves consistently, e.g., it cannot return null if it previously returned non- null . Declaration protected virtual T GetSentinelObject() Returns Type Description T The sentinel object to use to pre-populate the queue, or null if sentinel objects are not supported. | Improve this Doc View Source InsertWithOverflow(T) Adds an Object to a PriorityQueue<T> in log(size) time. It returns the object (if any) that was dropped off the heap because it was full. This can be the given parameter (in case it is smaller than the full heap's minimum, and couldn't be added), or another object that was previously the smallest value in the heap and now has been replaced by a larger one, or null if the queue wasn't yet full with Lucene.Net.Util.PriorityQueue`1.maxSize elements. Declaration public virtual T InsertWithOverflow(T element) Parameters Type Name Description T element Returns Type Description T | Improve this Doc View Source LessThan(T, T) Determines the ordering of objects in this priority queue. Subclasses must define this one method. Declaration protected abstract bool LessThan(T a, T b) Parameters Type Name Description T a T b Returns Type Description System.Boolean true if parameter a is less than parameter b . | Improve this Doc View Source Pop() Removes and returns the least element of the PriorityQueue<T> in log(size) time. Declaration public T Pop() Returns Type Description T | Improve this Doc View Source UpdateTop() Should be called when the Object at top changes values. Still log(n) worst case, but it's at least twice as fast to pq.Top.Change(); pq.UpdateTop(); instead of o = pq.Pop(); o.Change(); pq.Push(o); Declaration public T UpdateTop() Returns Type Description T The new 'top' element. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.Builder.html",
    "title": "Class PForDeltaDocIdSet.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PForDeltaDocIdSet.Builder A builder for PForDeltaDocIdSet . Inheritance System.Object PForDeltaDocIdSet.Builder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class Builder Constructors | Improve this Doc View Source Builder() Sole constructor. Declaration public Builder() Methods | Improve this Doc View Source Add(DocIdSetIterator) Convenience method to add the content of a DocIdSetIterator to this builder. Declaration public virtual PForDeltaDocIdSet.Builder Add(DocIdSetIterator it) Parameters Type Name Description DocIdSetIterator it Returns Type Description PForDeltaDocIdSet.Builder | Improve this Doc View Source Add(Int32) Add a document to this builder. Documents must be added in order. Declaration public virtual PForDeltaDocIdSet.Builder Add(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description PForDeltaDocIdSet.Builder | Improve this Doc View Source Build() Build the PForDeltaDocIdSet instance. Declaration public virtual PForDeltaDocIdSet Build() Returns Type Description PForDeltaDocIdSet | Improve this Doc View Source SetIndexInterval(Int32) Set the index interval. Every indexInterval -th block will be stored in the index. Set to System.Int32.MaxValue to disable indexing. Declaration public virtual PForDeltaDocIdSet.Builder SetIndexInterval(int indexInterval) Parameters Type Name Description System.Int32 indexInterval Returns Type Description PForDeltaDocIdSet.Builder Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.html",
    "title": "Class PagedBytes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedBytes Represents a logical byte[] as a series of pages. You can write-once into the logical byte[] (append only), using copy, and then retrieve slices ( BytesRef ) into it using fill. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PagedBytes Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytes Constructors | Improve this Doc View Source PagedBytes(Int32) 1<<blockBits must be bigger than biggest single BytesRef slice that will be pulled. Declaration public PagedBytes(int blockBits) Parameters Type Name Description System.Int32 blockBits Methods | Improve this Doc View Source Copy(IndexInput, Int64) Read this many bytes from in . Declaration public void Copy(IndexInput in, long byteCount) Parameters Type Name Description IndexInput in System.Int64 byteCount | Improve this Doc View Source Copy(BytesRef, BytesRef) Copy BytesRef in, setting BytesRef out to the result. Do not use this if you will use Freeze(true) . This only supports bytes.Length <= blockSize / Declaration public void Copy(BytesRef bytes, BytesRef out) Parameters Type Name Description BytesRef bytes BytesRef out | Improve this Doc View Source CopyUsingLengthPrefix(BytesRef) Copy bytes in, writing the length as a 1 or 2 byte vInt prefix. Declaration public long CopyUsingLengthPrefix(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.Int64 | Improve this Doc View Source Freeze(Boolean) Commits final byte[] , trimming it if necessary and if trim =true. Declaration public PagedBytes.Reader Freeze(bool trim) Parameters Type Name Description System.Boolean trim Returns Type Description PagedBytes.Reader | Improve this Doc View Source GetDataInput() Returns a DataInput to read values from this PagedBytes instance. Declaration public PagedBytes.PagedBytesDataInput GetDataInput() Returns Type Description PagedBytes.PagedBytesDataInput | Improve this Doc View Source GetDataOutput() Returns a DataOutput that you may use to write into this PagedBytes instance. If you do this, you should not call the other writing methods (eg, copy); results are undefined. Declaration public PagedBytes.PagedBytesDataOutput GetDataOutput() Returns Type Description PagedBytes.PagedBytesDataOutput | Improve this Doc View Source GetPointer() Declaration public long GetPointer() Returns Type Description System.Int64 | Improve this Doc View Source RamBytesUsed() Return approx RAM usage in bytes. Declaration public long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.Reader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.Reader.html",
    "title": "Class PagedBytes.Reader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedBytes.Reader Provides methods to read BytesRef s from a frozen PagedBytes . Inheritance System.Object PagedBytes.Reader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Reader Methods | Improve this Doc View Source Fill(BytesRef, Int64) Reads length as 1 or 2 byte vInt prefix, starting at start . Note: this method does not support slices spanning across block borders. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Fill(BytesRef b, long start) Parameters Type Name Description BytesRef b System.Int64 start | Improve this Doc View Source FillSlice(BytesRef, Int64, Int32) Gets a slice out of PagedBytes starting at start with a given length. If the slice spans across a block border this method will allocate sufficient resources and copy the paged data. Slices spanning more than two blocks are not supported. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void FillSlice(BytesRef b, long start, int length) Parameters Type Name Description BytesRef b System.Int64 start System.Int32 length | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object) See Also Freeze(Boolean)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.html",
    "title": "Class Int32sRefFSTEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32sRefFSTEnum LUCENENET specific. This class is to mimic Java's ability to specify nested classes of Generics without having to specify the generic type (i.e. Int32sRefFSTEnum.InputOutput{T} rather than Int32sRefFSTEnum{T}.InputOutput{T} ) NOTE: This was Int32sRefFSTEnum{T} in Lucene Inheritance System.Object Int32sRefFSTEnum Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32sRefFSTEnum Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.InputOutput-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum.InputOutput-1.html",
    "title": "Class Int32sRefFSTEnum.InputOutput<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32sRefFSTEnum.InputOutput<T> Holds a single input ( Int32sRef ) + output pair. Inheritance System.Object Int32sRefFSTEnum.InputOutput<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class InputOutput<T> Type Parameters Name Description T Properties | Improve this Doc View Source Input Declaration public Int32sRef Input { get; set; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Declaration public T Output { get; set; } Property Value Type Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FSTEnum-1.html",
    "title": "Class FSTEnum<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTEnum<T> Can Next() and Advance() through the terms in an FST This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum<T> BytesRefFSTEnum<T> Int32sRefFSTEnum<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class FSTEnum<T> Type Parameters Name Description T Constructors | Improve this Doc View Source FSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration protected FSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Fields | Improve this Doc View Source m_arcs Declaration protected FST.Arc<T>[] m_arcs Field Value Type Description FST.Arc <T>[] | Improve this Doc View Source m_fst Declaration protected readonly FST<T> m_fst Field Value Type Description FST <T> | Improve this Doc View Source m_fstReader Declaration protected readonly FST.BytesReader m_fstReader Field Value Type Description FST.BytesReader | Improve this Doc View Source m_output Declaration protected T[] m_output Field Value Type Description T[] | Improve this Doc View Source m_scratchArc Declaration protected readonly FST.Arc<T> m_scratchArc Field Value Type Description FST.Arc <T> | Improve this Doc View Source m_targetLength Declaration protected int m_targetLength Field Value Type Description System.Int32 | Improve this Doc View Source m_upto Declaration protected int m_upto Field Value Type Description System.Int32 | Improve this Doc View Source NO_OUTPUT Declaration protected readonly T NO_OUTPUT Field Value Type Description T Properties | Improve this Doc View Source CurrentLabel Declaration protected abstract int CurrentLabel { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TargetLabel Declaration protected abstract int TargetLabel { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source DoNext() Declaration protected virtual void DoNext() | Improve this Doc View Source DoSeekCeil() Seeks to smallest term that's >= target. Declaration protected virtual void DoSeekCeil() | Improve this Doc View Source DoSeekExact() Seeks to exactly target term. Declaration protected virtual bool DoSeekExact() Returns Type Description System.Boolean | Improve this Doc View Source DoSeekFloor() Seeks to largest term that's <= target. Declaration protected virtual void DoSeekFloor() | Improve this Doc View Source Grow() Declaration protected abstract void Grow() | Improve this Doc View Source RewindPrefix() Rewinds enum state to match the shared prefix between current term and target term Declaration protected void RewindPrefix() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.html",
    "title": "Class FST | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FST LUCENENET specific: This new base class is to mimic Java's ability to use nested types without specifying a type parameter. i.e. FST.BytesReader instead of FST<BytesRef>.BytesReader Inheritance System.Object FST Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class FST Constructors | Improve this Doc View Source FST() Declaration public FST() Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_BITS Declaration public static readonly int DEFAULT_MAX_BLOCK_BITS Field Value Type Description System.Int32 | Improve this Doc View Source END_LABEL If arc has this label then that arc is final/accepted Declaration public static readonly int END_LABEL Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_NUM_ARCS_DEEP Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_NUM_ARCS_DEEP = 10 Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_NUM_ARCS_SHALLOW Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_NUM_ARCS_SHALLOW = 5 Field Value Type Description System.Int32 | Improve this Doc View Source FIXED_ARRAY_SHALLOW_DISTANCE Builder.UnCompiledNode<S> Declaration public const int FIXED_ARRAY_SHALLOW_DISTANCE = 3 Field Value Type Description System.Int32 Methods | Improve this Doc View Source Read<T>(FileInfo, Outputs<T>) Reads an automaton from a file. Declaration public static FST<T> Read<T>(FileInfo file, Outputs<T> outputs) Parameters Type Name Description System.IO.FileInfo file Outputs <T> outputs Returns Type Description FST <T> Type Parameters Name Description T | Improve this Doc View Source TargetHasArcs<T>(FST.Arc<T>) returns true if the node at this address has any outgoing arcs Declaration public static bool TargetHasArcs<T>(FST.Arc<T> arc) Parameters Type Name Description FST.Arc <T> arc Returns Type Description System.Boolean Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.INPUT_TYPE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.INPUT_TYPE.html",
    "title": "Enum FST.INPUT_TYPE | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum FST.INPUT_TYPE Specifies allowed range of each int input label for this FST. Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public enum INPUT_TYPE Fields Name Description BYTE1 BYTE2 BYTE4 Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.MinimizationOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.MinimizationOperations.html",
    "title": "Class MinimizationOperations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MinimizationOperations Operations for minimizing automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MinimizationOperations Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class MinimizationOperations Methods | Improve this Doc View Source Minimize(Automaton) Minimizes (and determinizes if not already deterministic) the given automaton. Declaration public static void Minimize(Automaton a) Parameters Type Name Description Automaton a See Also SetMinimization(Int32) | Improve this Doc View Source MinimizeHopcroft(Automaton) Minimizes the given automaton using Hopcroft's algorithm. Declaration public static void MinimizeHopcroft(Automaton a) Parameters Type Name Description Automaton a"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.LevenshteinAutomata.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.LevenshteinAutomata.html",
    "title": "Class LevenshteinAutomata | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LevenshteinAutomata Class to construct DFAs that match a word within some edit distance. Implements the algorithm described in: Schulz and Mihov: Fast String Correction with Levenshtein Automata This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LevenshteinAutomata Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class LevenshteinAutomata Constructors | Improve this Doc View Source LevenshteinAutomata(Int32[], Int32, Boolean) Expert: specify a custom maximum possible symbol (alphaMax); default is MAX_CODE_POINT . Declaration public LevenshteinAutomata(int[] word, int alphaMax, bool withTranspositions) Parameters Type Name Description System.Int32 [] word System.Int32 alphaMax System.Boolean withTranspositions | Improve this Doc View Source LevenshteinAutomata(String, Boolean) Create a new LevenshteinAutomata for some input string. Optionally count transpositions as a primitive edit. Declaration public LevenshteinAutomata(string input, bool withTranspositions) Parameters Type Name Description System.String input System.Boolean withTranspositions Fields | Improve this Doc View Source MAXIMUM_SUPPORTED_DISTANCE @lucene.internal Declaration public const int MAXIMUM_SUPPORTED_DISTANCE = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source ToAutomaton(Int32) Compute a DFA that accepts all strings within an edit distance of n . All automata have the following properties: They are deterministic (DFA). There are no transitions to dead states. They are not minimal (some transitions could be combined). Declaration public virtual Automaton ToAutomaton(int n) Parameters Type Name Description System.Int32 n Returns Type Description Automaton Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.IAutomatonProvider.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.IAutomatonProvider.html",
    "title": "Interface IAutomatonProvider | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAutomatonProvider Automaton provider for RegExp . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public interface IAutomatonProvider Methods | Improve this Doc View Source GetAutomaton(String) Returns automaton of the given name. Declaration Automaton GetAutomaton(string name) Parameters Type Name Description System.String name Automaton name. Returns Type Description Automaton Automaton. Exceptions Type Condition System.IO.IOException If errors occur. Extension Methods Number.IsNumber(Object) See Also ToAutomaton(IAutomatonProvider)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.html",
    "title": "Class CompiledAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompiledAutomaton Immutable class holding compiled details for a given Automaton . The Automaton is deterministic, must not have dead states but is not necessarily minimal. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CompiledAutomaton Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class CompiledAutomaton Constructors | Improve this Doc View Source CompiledAutomaton(Automaton) Declaration public CompiledAutomaton(Automaton automaton) Parameters Type Name Description Automaton automaton | Improve this Doc View Source CompiledAutomaton(Automaton, Nullable<Boolean>, Boolean) Declaration public CompiledAutomaton(Automaton automaton, bool? finite, bool simplify) Parameters Type Name Description Automaton automaton System.Nullable < System.Boolean > finite System.Boolean simplify Properties | Improve this Doc View Source CommonSuffixRef Shared common suffix accepted by the automaton. Only valid for NORMAL , and only when the automaton accepts an infinite language. Declaration public BytesRef CommonSuffixRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source Finite Indicates if the automaton accepts a finite set of strings. Null if this was not computed. Only valid for NORMAL . Declaration public bool? Finite { get; } Property Value Type Description System.Nullable < System.Boolean > | Improve this Doc View Source RunAutomaton Matcher for quickly determining if a byte[] is accepted. only valid for NORMAL . Declaration public ByteRunAutomaton RunAutomaton { get; } Property Value Type Description ByteRunAutomaton | Improve this Doc View Source SortedTransitions Two dimensional array of transitions, indexed by state number for traversal. The state numbering is consistent with RunAutomaton . Only valid for NORMAL . Declaration public Transition[][] SortedTransitions { get; } Property Value Type Description Transition [][] | Improve this Doc View Source Term For PREFIX , this is the prefix term; for SINGLE this is the singleton term. Declaration public BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source Type Declaration public CompiledAutomaton.AUTOMATON_TYPE Type { get; } Property Value Type Description CompiledAutomaton.AUTOMATON_TYPE Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Floor(BytesRef, BytesRef) Finds largest term accepted by this Automaton, that's <= the provided input term. The result is placed in output; it's fine for output and input to point to the same BytesRef . The returned result is either the provided output, or null if there is no floor term (ie, the provided input term is before the first term accepted by this Automaton ). Declaration public virtual BytesRef Floor(BytesRef input, BytesRef output) Parameters Type Name Description BytesRef input BytesRef output Returns Type Description BytesRef | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms) Declaration public virtual TermsEnum GetTermsEnum(Terms terms) Parameters Type Name Description Terms terms Returns Type Description TermsEnum | Improve this Doc View Source ToDot() Declaration public virtual string ToDot() Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReader.html",
    "title": "Class CompositeReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompositeReader Instances of this reader type can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the AtomicReaderContext for all sub-readers via Leaves . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader implements the CompositeReader interface, it is not possible to directly get postings. Concrete subclasses of IndexReader are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader<R> Implements System.IDisposable Inherited Members IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVectors(Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDocs IndexReader.MaxDoc IndexReader.NumDeletedDocs IndexReader.Document(Int32, StoredFieldVisitor) IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey IndexReader.DocFreq(Term) IndexReader.TotalTermFreq(Term) IndexReader.GetSumDocFreq(String) IndexReader.GetDocCount(String) IndexReader.GetSumTotalTermFreq(String) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class CompositeReader : IndexReader, IDisposable Constructors | Improve this Doc View Source CompositeReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected CompositeReader() Properties | Improve this Doc View Source Context Declaration public override sealed IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext Overrides IndexReader.Context Methods | Improve this Doc View Source GetSequentialSubReaders() Expert: returns the sequential sub readers that this reader is logically composed of. This method may not return null . NOTE: In contrast to previous Lucene versions this method is no longer public, code that wants to get all AtomicReader s this composite is composed of should use Leaves . Declaration protected abstract IList<IndexReader> GetSequentialSubReaders() Returns Type Description System.Collections.Generic.IList < IndexReader > See Also Leaves | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIn.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIn.html",
    "title": "Class BasicModelIn | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelIn The basic tf-idf model of randomness. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIn Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIn : BasicModel Constructors | Improve this Doc View Source BasicModelIn() Sole constructor: parameter-free Declaration public BasicModelIn() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides BasicModel.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilter.html",
    "title": "Class ScandinavianFoldingFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScandinavianFoldingFilter This filter folds Scandinavian characters åÅäæÄÆ->a and öÖøØ->o. It also discriminate against use of double vowels aa, ae, ao, oe and oo, leaving just the first one. It's is a semantically more destructive solution than ScandinavianNormalizationFilter but can in addition help with matching raksmorgas as räksmörgås. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej == blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas == raksmorgas Background: Swedish åäö are in fact the same letters as Norwegian and Danish åæø and thus interchangeable when used between these languages. They are however folded differently when people type them on a keyboard lacking these characters. In that situation almost all Swedish people use a, a, o instead of å, ä, ö. Norwegians and Danes on the other hand usually type aa, ae and oe instead of å, æ and ø. Some do however use a, a, o, oo, ao and sometimes permutations of everything above. This filter solves that mismatch problem, but might also cause new. Inheritance System.Object AttributeSource TokenStream TokenFilter ScandinavianFoldingFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ScandinavianFoldingFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ScandinavianFoldingFilter(TokenStream) Declaration public ScandinavianFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also ScandinavianNormalizationFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilterFactory.html",
    "title": "Class ScandinavianFoldingFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScandinavianFoldingFilterFactory Factory for ScandinavianFoldingFilter . <fieldType name=\"text_scandfold\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianFoldingFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ScandinavianFoldingFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ScandinavianFoldingFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ScandinavianFoldingFilterFactory(IDictionary<String, String>) Creates a new ScandinavianFoldingFilterFactory Declaration public ScandinavianFoldingFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilter.html",
    "title": "Class ScandinavianNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScandinavianNormalizationFilter This filter normalize use of the interchangeable Scandinavian characters æÆäÄöÖøØ and folded variants (aa, ao, ae, oe and oo) by transforming them to åÅæÆøØ. It's a semantically less destructive solution than ScandinavianFoldingFilter , most useful when a person with a Norwegian or Danish keyboard queries a Swedish index and vice versa. This filter does not the common Swedish folds of å and ä to a nor ö to o. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej but not blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas but not raksmorgas Inheritance System.Object AttributeSource TokenStream TokenFilter ScandinavianNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ScandinavianNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ScandinavianNormalizationFilter(TokenStream) Declaration public ScandinavianNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also ScandinavianFoldingFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilterFactory.html",
    "title": "Class ScandinavianNormalizationFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScandinavianNormalizationFilterFactory Factory for ScandinavianNormalizationFilter . <fieldType name=\"text_scandnorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ScandinavianNormalizationFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ScandinavianNormalizationFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ScandinavianNormalizationFilterFactory(IDictionary<String, String>) Creates a new ScandinavianNormalizationFilterFactory Declaration public ScandinavianNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.SetKeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.SetKeywordMarkerFilter.html",
    "title": "Class SetKeywordMarkerFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SetKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token contained in the provided set is marked as a keyword by setting IsKeyword to true . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter SetKeywordMarkerFilter Implements System.IDisposable Inherited Members KeywordMarkerFilter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SetKeywordMarkerFilter : KeywordMarkerFilter, IDisposable Constructors | Improve this Doc View Source SetKeywordMarkerFilter(TokenStream, CharArraySet) Create a new SetKeywordMarkerFilter , that marks the current token as a keyword if the tokens term buffer is contained in the given set via the KeywordAttribute . Declaration public SetKeywordMarkerFilter(TokenStream in, CharArraySet keywordSet) Parameters Type Name Description TokenStream in TokenStream to filter CharArraySet keywordSet the keywords set to lookup the current termbuffer Methods | Improve this Doc View Source IsKeyword() Declaration protected override bool IsKeyword() Returns Type Description System.Boolean Overrides KeywordMarkerFilter.IsKeyword() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.SingleTokenTokenStream.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.SingleTokenTokenStream.html",
    "title": "Class SingleTokenTokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleTokenTokenStream A TokenStream containing a single token. Inheritance System.Object AttributeSource TokenStream SingleTokenTokenStream Implements System.IDisposable Inherited Members TokenStream.End() TokenStream.Dispose() TokenStream.Dispose(Boolean) AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SingleTokenTokenStream : TokenStream, IDisposable Constructors | Improve this Doc View Source SingleTokenTokenStream(Token) Declaration public SingleTokenTokenStream(Token token) Parameters Type Name Description Token token Methods | Improve this Doc View Source GetToken() Declaration public Token GetToken() Returns Type Description Token | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source SetToken(Token) Declaration public void SetToken(Token token) Parameters Type Name Description Token token Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Position.PositionFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Position.PositionFilter.html",
    "title": "Class PositionFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionFilter Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. Inheritance System.Object AttributeSource TokenStream TokenFilter PositionFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Position Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(4.4) PositionFilter makes TokenStream graphs inconsistent\")] public sealed class PositionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PositionFilter(TokenStream) Constructs a PositionFilter that assigns a position increment of zero to all but the first token from the given input stream. Declaration public PositionFilter(TokenStream input) Parameters Type Name Description TokenStream input the input stream | Improve this Doc View Source PositionFilter(TokenStream, Int32) Constructs a PositionFilter that assigns the given position increment to all but the first token from the given input stream. Declaration public PositionFilter(TokenStream input, int positionIncrement) Parameters Type Name Description TokenStream input the input stream System.Int32 positionIncrement position increment to assign to all but the first token from the input stream Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Position.PositionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Position.PositionFilterFactory.html",
    "title": "Class PositionFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionFilterFactory Factory for PositionFilter . Set the positionIncrement of all tokens to the \"positionIncrement\", except the first return token which retains its original positionIncrement value. The default positionIncrement value is zero. <fieldType name=\"text_position\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PositionFilterFactory\" positionIncrement=\"0\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PositionFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Position Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(4.4)\")] public class PositionFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PositionFilterFactory(IDictionary<String, String>) Creates a new PositionFilterFactory Declaration public PositionFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PositionFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseAnalyzer.html",
    "title": "Class PortugueseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseAnalyzer Analyzer for Portuguese. You must specify the required LuceneVersion compatibility when creating PortugueseAnalyzer : As of 3.6, PortugueseLightStemFilter is used for less aggressive stemming. Inheritance System.Object Analyzer StopwordAnalyzerBase PortugueseAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public PortugueseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public PortugueseAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source PortugueseAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public PortugueseAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Portuguese stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"portuguese_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and PortugueseLightStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.BlockGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.BlockGroupingCollector.html",
    "title": "Class BlockGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockGroupingCollector BlockGroupingCollector performs grouping with a single pass collector, as long as you are grouping by a doc block field, ie all documents sharing a given group value were indexed as a doc block using the atomic AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. This results in faster performance (~25% faster QPS) than the two-pass grouping collectors, with the tradeoff being that the documents in each group must always be indexed as a block. This collector also fills in TopGroups.totalGroupCount without requiring the separate TermAllGroupsCollector . However, this collector does not fill in the groupValue of each group; this field will always be null. NOTE : this collector makes no effort to verify the docs were in fact indexed as a block, so it's up to you to ensure this was the case. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BlockGroupingCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class BlockGroupingCollector : ICollector Constructors | Improve this Doc View Source BlockGroupingCollector(Sort, Int32, Boolean, Filter) Create the single pass collector. Declaration public BlockGroupingCollector(Sort groupSort, int topNGroups, bool needsScores, Filter lastDocPerGroup) Parameters Type Name Description Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. System.Boolean needsScores true if the collected documents require scores, either because relevance is included in the withinGroupSort or because you plan to pass true for either GetScores or GetMaxScores to GetTopGroups(Sort, Int32, Int32, Int32, Boolean) Filter lastDocPerGroup a Filter that marks the last document in each group. Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopGroups(Sort, Int32, Int32, Int32, Boolean) Returns the grouped results. Returns null if the number of groups collected is <= groupOffset. NOTE : This collector is unable to compute the groupValue per group so it will always be null. This is normally not a problem, as you can obtain the value just like you obtain other values for each matching document (eg, via stored fields, via FieldCache, etc.) Declaration public virtual ITopGroups<object> GetTopGroups(Sort withinGroupSort, int groupOffset, int withinGroupOffset, int maxDocsPerGroup, bool fillSortFields) Parameters Type Name Description Sort withinGroupSort The Sort used to sort documents within each group. Passing null is allowed, to sort by relevance. System.Int32 groupOffset Which group to start from System.Int32 withinGroupOffset Which document to start from within each group System.Int32 maxDocsPerGroup How many top documents to keep within each group. System.Boolean fillSortFields If true then the Comparable values for the sort fields will be set Returns Type Description ITopGroups < System.Object > | Improve this Doc View Source GetTopGroups<TGroupValue>(Sort, Int32, Int32, Int32, Boolean) Returns the grouped results. Returns null if the number of groups collected is <= groupOffset. NOTE : This collector is unable to compute the groupValue per group so it will always be null. This is normally not a problem, as you can obtain the value just like you obtain other values for each matching document (eg, via stored fields, via FieldCache, etc.) Declaration public virtual ITopGroups<TGroupValue> GetTopGroups<TGroupValue>(Sort withinGroupSort, int groupOffset, int withinGroupOffset, int maxDocsPerGroup, bool fillSortFields) Parameters Type Name Description Sort withinGroupSort The Sort used to sort documents within each group. Passing null is allowed, to sort by relevance. System.Int32 groupOffset Which group to start from System.Int32 withinGroupOffset Which document to start from within each group System.Int32 maxDocsPerGroup How many top documents to keep within each group. System.Boolean fillSortFields If true then the Comparable values for the sort fields will be set Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue The expected return type for group value | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.CollectedSearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.CollectedSearchGroup-1.html",
    "title": "Class CollectedSearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectedSearchGroup<TGroupValue> Expert: representation of a group in AbstractFirstPassGroupingCollector<TGroupValue> , tracking the top doc and FieldComparer slot. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SearchGroup <TGroupValue> CollectedSearchGroup<TGroupValue> Implements ISearchGroup <TGroupValue> ICollectedSearchGroup Inherited Members SearchGroup<TGroupValue>.GroupValue SearchGroup<TGroupValue>.SortValues SearchGroup<TGroupValue>.ToString() SearchGroup<TGroupValue>.Equals(Object) SearchGroup<TGroupValue>.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class CollectedSearchGroup<TGroupValue> : SearchGroup<TGroupValue>, ISearchGroup<TGroupValue>, ICollectedSearchGroup Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source ComparerSlot Declaration public int ComparerSlot { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopDoc Declaration public int TopDoc { get; } Property Value Type Description System.Int32 Implements ISearchGroup<TGroupValue> ICollectedSearchGroup"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead.html",
    "title": "Class FunctionAllGroupHeadsCollector.GroupHead | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionAllGroupHeadsCollector.GroupHead Holds current head document for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector_GroupHead FunctionAllGroupHeadsCollector.GroupHead Inherited Members AbstractAllGroupHeadsCollector_GroupHead.Doc System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class GroupHead : AbstractAllGroupHeadsCollector_GroupHead Properties | Improve this Doc View Source GroupValue Declaration public MutableValue GroupValue { get; } Property Value Type Description MutableValue Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int compIDX, int doc) Parameters Type Name Description System.Int32 compIDX System.Int32 doc Returns Type Description System.Int32 Overrides AbstractAllGroupHeadsCollector_GroupHead.Compare(Int32, Int32) | Improve this Doc View Source UpdateDocHead(Int32) Declaration public override void UpdateDocHead(int doc) Parameters Type Name Description System.Int32 doc Overrides AbstractAllGroupHeadsCollector_GroupHead.UpdateDocHead(Int32)"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.html",
    "title": "Class FunctionAllGroupHeadsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionAllGroupHeadsCollector An implementation of AbstractAllGroupHeadsCollector for retrieving the most relevant groups when grouping by ValueSource . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector < FunctionAllGroupHeadsCollector.GroupHead > FunctionAllGroupHeadsCollector Implements ICollector Inherited Members AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_reversed AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_compIDXEnd AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_temporalResult AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeads(Int32) AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeads() AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.GroupHeadsCount AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.Collect(Int32) AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionAllGroupHeadsCollector : AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>, ICollector Constructors | Improve this Doc View Source FunctionAllGroupHeadsCollector(ValueSource, IDictionary, Sort) Constructs a FunctionAllGroupHeadsCollector instance. Declaration public FunctionAllGroupHeadsCollector(ValueSource groupBy, IDictionary vsContext, Sort sortWithinGroup) Parameters Type Name Description ValueSource groupBy The ValueSource to group by System.Collections.IDictionary vsContext The ValueSource context Sort sortWithinGroup The sort within a group Properties | Improve this Doc View Source CollectedGroupHeads Declaration protected override ICollection<FunctionAllGroupHeadsCollector.GroupHead> CollectedGroupHeads { get; } Property Value Type Description System.Collections.Generic.ICollection < FunctionAllGroupHeadsCollector.GroupHead > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector<Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead>.CollectedGroupHeads Methods | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Declaration protected override void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector<Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeadAndAddIfNotExist(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Overrides AbstractAllGroupHeadsCollector.SetScorer(Scorer) Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionAllGroupsCollector.html",
    "title": "Class FunctionAllGroupsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: Uses ValueSource and FunctionValues to retrieve the field values to group by. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector < MutableValue > FunctionAllGroupsCollector Implements IAbstractAllGroupsCollector < MutableValue > ICollector Inherited Members AbstractAllGroupsCollector<MutableValue>.GroupCount AbstractAllGroupsCollector<MutableValue>.SetScorer(Scorer) AbstractAllGroupsCollector<MutableValue>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionAllGroupsCollector : AbstractAllGroupsCollector<MutableValue>, IAbstractAllGroupsCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionAllGroupsCollector(ValueSource, IDictionary) Constructs a FunctionAllGroupsCollector instance. Declaration public FunctionAllGroupsCollector(ValueSource groupBy, IDictionary vsContext) Parameters Type Name Description ValueSource groupBy The ValueSource to group by System.Collections.IDictionary vsContext The ValueSource context Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<MutableValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < MutableValue > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount.html",
    "title": "Class FunctionDistinctValuesCollector.GroupCount | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector.GroupCount < MutableValue > FunctionDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount < MutableValue > Inherited Members AbstractDistinctValuesCollector.GroupCount<MutableValue>.GroupValue AbstractDistinctValuesCollector.GroupCount<MutableValue>.UniqueValues System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class GroupCount : AbstractDistinctValuesCollector.GroupCount<MutableValue>, AbstractDistinctValuesCollector.IGroupCount<MutableValue> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.html",
    "title": "Class FunctionDistinctValuesCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionDistinctValuesCollector Function based implementation of AbstractDistinctValuesCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector < FunctionDistinctValuesCollector.GroupCount > FunctionDistinctValuesCollector Implements IAbstractDistinctValuesCollector < FunctionDistinctValuesCollector.GroupCount > ICollector Inherited Members AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>.AcceptsDocsOutOfOrder AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionDistinctValuesCollector : AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>, IAbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>, ICollector Constructors | Improve this Doc View Source FunctionDistinctValuesCollector(IDictionary, ValueSource, ValueSource, IEnumerable<ISearchGroup<MutableValue>>) Declaration public FunctionDistinctValuesCollector(IDictionary vsContext, ValueSource groupSource, ValueSource countSource, IEnumerable<ISearchGroup<MutableValue>> groups) Parameters Type Name Description System.Collections.IDictionary vsContext ValueSource groupSource ValueSource countSource System.Collections.Generic.IEnumerable < ISearchGroup < MutableValue >> groups Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<FunctionDistinctValuesCollector.GroupCount> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < FunctionDistinctValuesCollector.GroupCount > Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractDistinctValuesCollector<GC> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionFirstPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionFirstPassGroupingCollector.html",
    "title": "Class FunctionFirstPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector < MutableValue > FunctionFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector < MutableValue > ICollector Inherited Members AbstractFirstPassGroupingCollector<MutableValue>.m_orderedGroups AbstractFirstPassGroupingCollector<MutableValue>.GetTopGroups(Int32, Boolean) AbstractFirstPassGroupingCollector<MutableValue>.SetScorer(Scorer) AbstractFirstPassGroupingCollector<MutableValue>.Collect(Int32) AbstractFirstPassGroupingCollector<MutableValue>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionFirstPassGroupingCollector : AbstractFirstPassGroupingCollector<MutableValue>, IAbstractFirstPassGroupingCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionFirstPassGroupingCollector(ValueSource, IDictionary, Sort, Int32) Creates a first pass collector. Declaration public FunctionFirstPassGroupingCollector(ValueSource groupByVS, IDictionary vsContext, Sort groupSort, int topNGroups) Parameters Type Name Description ValueSource groupByVS The ValueSource instance to group by System.Collections.IDictionary vsContext The ValueSource context Sort groupSort The Sort used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use RELEVANCE . System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source CopyDocGroupValue(MutableValue, MutableValue) Declaration protected override MutableValue CopyDocGroupValue(MutableValue groupValue, MutableValue reuse) Parameters Type Name Description MutableValue groupValue MutableValue reuse Returns Type Description MutableValue Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.CopyDocGroupValue(Lucene.Net.Util.Mutable.MutableValue, Lucene.Net.Util.Mutable.MutableValue) | Improve this Doc View Source GetDocGroupValue(Int32) Declaration protected override MutableValue GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description MutableValue Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.GetDocGroupValue(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractFirstPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionSecondPassGroupingCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Function.FunctionSecondPassGroupingCollector.html",
    "title": "Class FunctionSecondPassGroupingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector < MutableValue > FunctionSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector < MutableValue > ICollector Inherited Members AbstractSecondPassGroupingCollector<MutableValue>.m_groupMap AbstractSecondPassGroupingCollector<MutableValue>.m_groupDocs AbstractSecondPassGroupingCollector<MutableValue>.SetScorer(Scorer) AbstractSecondPassGroupingCollector<MutableValue>.Collect(Int32) AbstractSecondPassGroupingCollector<MutableValue>.AcceptsDocsOutOfOrder AbstractSecondPassGroupingCollector<MutableValue>.GetTopGroups(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionSecondPassGroupingCollector : AbstractSecondPassGroupingCollector<MutableValue>, IAbstractSecondPassGroupingCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionSecondPassGroupingCollector(IEnumerable<ISearchGroup<MutableValue>>, Sort, Sort, Int32, Boolean, Boolean, Boolean, ValueSource, IDictionary) Constructs a FunctionSecondPassGroupingCollector instance. Declaration public FunctionSecondPassGroupingCollector(IEnumerable<ISearchGroup<MutableValue>> searchGroups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields, ValueSource groupByVS, IDictionary vsContext) Parameters Type Name Description System.Collections.Generic.IEnumerable < ISearchGroup < MutableValue >> searchGroups The SearchGroup<TGroupValue> instances collected during the first phase. Sort groupSort The group sort Sort withinGroupSort The sort inside a group System.Int32 maxDocsPerGroup The maximum number of documents to collect inside a group System.Boolean getScores Whether to include the scores System.Boolean getMaxScores Whether to include the maximum score System.Boolean fillSortFields Whether to fill the sort values in WithinGroupSort ValueSource groupByVS The ValueSource to group by System.Collections.IDictionary vsContext The value source context Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source RetrieveGroup(Int32) Declaration protected override AbstractSecondPassGroupingCollector.SearchGroupDocs<MutableValue> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs < MutableValue > Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.RetrieveGroup(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractSecondPassGroupingCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.AnalyzingQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Analyzing.AnalyzingQueryParser.html",
    "title": "Class AnalyzingQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzingQueryParser Overrides Lucene's default QueryParser so that Fuzzy-, Prefix-, Range-, and WildcardQuerys are also passed through the given analyzer, but wildcard characters * and ? don't get removed from the search terms. Warning: This class should only be used with analyzers that do not use stopwords or that add tokens. Also, several stemming analyzers are inappropriate: for example, GermanAnalyzer will turn Häuser into hau , but H?user will become h?user when using this parser and thus no match would be found (i.e. using this parser will be no improvement over QueryParser in such cases). Inheritance System.Object QueryBuilder QueryParserBase QueryParser AnalyzingQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Analyzing Assembly : Lucene.Net.QueryParser.dll Syntax public class AnalyzingQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source AnalyzingQueryParser(LuceneVersion, String, Analyzer) Declaration public AnalyzingQueryParser(LuceneVersion matchVersion, string field, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion System.String field Analyzer analyzer Methods | Improve this Doc View Source AnalyzeSingleChunk(String, String, String) Returns the analyzed form for the given chunk. If the analyzer produces more than one output token from the given chunk, a ParseException is thrown. Declaration protected virtual string AnalyzeSingleChunk(string field, string termStr, string chunk) Parameters Type Name Description System.String field The target field System.String termStr The full term from which the given chunk is excerpted System.String chunk The portion of the given termStr to be analyzed Returns Type Description System.String The result of analyzing the given chunk Exceptions Type Condition ParseException ParseException when analysis returns other than one output token | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Called when parser parses an input term that has the fuzzy suffix (~) appended. Depending on analyzer and settings, a fuzzy term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query System.Single minSimilarity Returns Type Description Query Resulting Query built for the term Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetPrefixQuery(String, String) Called when parser parses an input term that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on analyzer and settings, a prefix term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query ( without trailing '*' character!) Returns Type Description Query Resulting Query built for the term Overrides QueryParserBase.GetPrefixQuery(String, String) | Improve this Doc View Source GetWildcardQuery(String, String) Called when parser parses an input term that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on analyzer and settings, a prefix term may (most probably will) be lower-cased automatically. It will go through the default Analyzer. Overrides super class, by passing terms through analyzer. Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term to use for building term for the query ( without trailing '*' character!) Returns Type Description Query Resulting Query built for the term Overrides QueryParserBase.GetWildcardQuery(String, String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. Inheritance System.Object FastCharStream Implements ICharStream Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : ICharStream Constructors | Improve this Doc View Source FastCharStream(TextReader) Constructs from a System.IO.TextReader . Declaration public FastCharStream(TextReader r) Parameters Type Name Description System.IO.TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Declaration public string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.MultiFieldQueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.MultiFieldQueryParser.html",
    "title": "Class MultiFieldQueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFieldQueryParser A QueryParser which constructs queries to search multiple fields. Inheritance System.Object QueryBuilder QueryParserBase QueryParser MultiFieldQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParser.Conjunction() QueryParser.Modifiers() QueryParser.TopLevelQuery(String) QueryParser.Query(String) QueryParser.Clause(String) QueryParser.Term(String) QueryParser.TokenSource QueryParser.Token QueryParser.Jj_nt QueryParser.ReInit(ICharStream) QueryParser.ReInit(QueryParserTokenManager) QueryParser.GetNextToken() QueryParser.GetToken(Int32) QueryParser.GenerateParseException() QueryParser.Enable_tracing() QueryParser.Disable_tracing() QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiFieldQueryParser : QueryParser, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source MultiFieldQueryParser(LuceneVersion, String[], Analyzer) Creates a MultiFieldQueryParser. It will, when Parse(String) is called, construct a query like this (assuming the query consists of two terms and you specify the two fields title and body ): (title:term1 body:term1) (title:term2 body:term2) When DefaultOperator is set to AND_OPERATOR , the result will be: +(title:term1 body:term1) +(title:term2 body:term2) In other words, all the query's terms must appear, but it doesn't matter in what fields they appear. Declaration public MultiFieldQueryParser(LuceneVersion matchVersion, string[] fields, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion System.String [] fields Analyzer analyzer | Improve this Doc View Source MultiFieldQueryParser(LuceneVersion, String[], Analyzer, IDictionary<String, Single>) Creates a MultiFieldQueryParser . Allows passing of a map with term to Boost, and the boost to apply to each term. It will, when Parse(String) is called, construct a query like this (assuming the query consists of two terms and you specify the two fields title and body ): (title:term1 body:term1) (title:term2 body:term2) When DefaultOperator is set to AND_OPERATOR , the result will be: +(title:term1 body:term1) +(title:term2 body:term2) When you pass a boost (title=>5 body=>10) you can get +(title:term1^5.0 body:term1^10.0) +(title:term2^5.0 body:term2^10.0) In other words, all the query's terms must appear, but it doesn't matter in what fields they appear. Declaration public MultiFieldQueryParser(LuceneVersion matchVersion, string[] fields, Analyzer analyzer, IDictionary<string, float> boosts) Parameters Type Name Description LuceneVersion matchVersion System.String [] fields Analyzer analyzer System.Collections.Generic.IDictionary < System.String , System.Single > boosts Fields | Improve this Doc View Source m_boosts Declaration protected IDictionary<string, float> m_boosts Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.Single > | Improve this Doc View Source m_fields Declaration protected string[] m_fields Field Value Type Description System.String [] Methods | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected override Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Boolean) | Improve this Doc View Source GetFieldQuery(String, String, Int32) Declaration protected override Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Overrides QueryParserBase.GetFieldQuery(String, String, Int32) | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Declaration protected override Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field System.String termStr System.Single minSimilarity Returns Type Description Query Overrides QueryParserBase.GetFuzzyQuery(String, String, Single) | Improve this Doc View Source GetPrefixQuery(String, String) Declaration protected override Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetPrefixQuery(String, String) | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected override Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query Overrides QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) | Improve this Doc View Source GetRegexpQuery(String, String) Declaration protected override Query GetRegexpQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetRegexpQuery(String, String) | Improve this Doc View Source GetWildcardQuery(String, String) Declaration protected override Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field System.String termStr Returns Type Description Query Overrides QueryParserBase.GetWildcardQuery(String, String) | Improve this Doc View Source Parse(LuceneVersion, String, String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(\"query\", fields, flags, analyzer); The code above would construct a query: (filename:query) +(contents:query) -(description:query) Declaration public static Query Parse(LuceneVersion matchVersion, string query, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String query Query string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails System.ArgumentException if the length of the fields array differs from the length of the flags array | Improve this Doc View Source Parse(LuceneVersion, String[], String[], Analyzer) Parses a query which searches on the fields specified. If x fields are specified, this effectively constructs: (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx) Declaration public static Query Parse(LuceneVersion matchVersion, string[] queries, string[] fields, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String [] queries Queries strings to parse System.String [] fields Fields to search on Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails System.ArgumentException if the length of the queries array differs from the length of the fields array | Improve this Doc View Source Parse(LuceneVersion, String[], String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] query = {\"query1\", \"query2\", \"query3\"}; string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(query, fields, flags, analyzer); The code above would construct a query: (filename:query1) +(contents:query2) -(description:query3) Declaration public static Query Parse(LuceneVersion matchVersion, string[] queries, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match; this is passed through to QueryParser . System.String [] queries Queries string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition ParseException if query parsing fails System.ArgumentException if the length of the queries, fields, and flags array differ Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object System.Exception ParseException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : Exception Constructors | Improve this Doc View Source ParseException() Declaration public ParseException() | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method GenerateParseException() in the generated parser. Calling this constructor generates a new object of this type with the fields currentToken , expectedTokenSequences , and tokenImage set. Declaration public ParseException(Token currentToken, int[][] expectedTokenSequences, string[] tokenImage) Parameters Type Name Description Token currentToken System.Int32 [][] expectedTokenSequences System.String [] tokenImage | Improve this Doc View Source ParseException(String) Declaration public ParseException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source ParseException(String, Exception) Declaration public ParseException(string message, Exception innerException) Parameters Type Name Description System.String message System.Exception innerException Fields | Improve this Doc View Source eol The end of line string for this machine. Declaration protected static string eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token following this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParser.html",
    "title": "Class QueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParser This class is generated by JavaCC. The most important method is Parse(String) . The syntax for query strings is as follows: A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation . In TermRangeQuery s, QueryParser tries to detect date values, e.g. date:[6/1/2005 TO 6/4/2005] produces a range query that searches for \"date\" fields between 2005-06-01 and 2005-06-04. Note that the format of the accepted input depends on the System.Globalization.CultureInfo . A DateTools.Resolution has to be set, if you want to use DateTools for date conversion. The date resolution that shall be used for RangeQueries can be set using SetDateResolution(DateTools.Resolution) or SetDateResolution(String, DateTools.Resolution) . The former sets the default date resolution for all fields, whereas the latter can be used to set field specific date resolutions. Field specific date resolutions take, if set, precedence over the default date resolution. If you don't use DateTools in your index, you can create your own query parser that inherits QueryParser and overwrites GetRangeQuery(String, String, String, Boolean, Boolean) to use a different method for date conversion. Note that QueryParser is not thread-safe. NOTE : there is a new QueryParser in contrib, which matches the same syntax as this class, but is more modular, enabling substantial customization to how a query is created. NOTE : You must specify the required LuceneVersion compatibility when creating QueryParser: As of 3.1, AutoGeneratePhraseQueries is false by default. Inheritance System.Object QueryBuilder QueryParserBase QueryParser AnalyzingQueryParser MultiFieldQueryParser ComplexPhraseQueryParser ExtendableQueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryParserBase.CONJ_NONE QueryParserBase.CONJ_AND QueryParserBase.CONJ_OR QueryParserBase.MOD_NONE QueryParserBase.MOD_NOT QueryParserBase.MOD_REQ QueryParserBase.AND_OPERATOR QueryParserBase.OR_OPERATOR QueryParserBase.m_field QueryParserBase.Init(LuceneVersion, String, Analyzer) QueryParserBase.Parse(String) QueryParserBase.Field QueryParserBase.AutoGeneratePhraseQueries QueryParserBase.FuzzyMinSim QueryParserBase.FuzzyPrefixLength QueryParserBase.PhraseSlop QueryParserBase.AllowLeadingWildcard QueryParserBase.DefaultOperator QueryParserBase.LowercaseExpandedTerms QueryParserBase.MultiTermRewriteMethod QueryParserBase.Locale QueryParserBase.TimeZone QueryParserBase.SetDateResolution(DateTools.Resolution) QueryParserBase.SetDateResolution(String, DateTools.Resolution) QueryParserBase.GetDateResolution(String) QueryParserBase.AnalyzeRangeTerms QueryParserBase.AddClause(IList<BooleanClause>, Int32, Int32, Query) QueryParserBase.GetFieldQuery(String, String, Boolean) QueryParserBase.NewFieldQuery(Analyzer, String, String, Boolean) QueryParserBase.GetFieldQuery(String, String, Int32) QueryParserBase.GetRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewBooleanClause(Query, Occur) QueryParserBase.NewPrefixQuery(Term) QueryParserBase.NewRegexpQuery(Term) QueryParserBase.NewFuzzyQuery(Term, Single, Int32) QueryParserBase.AnalyzeMultitermTerm(String, String, Analyzer) QueryParserBase.NewRangeQuery(String, String, String, Boolean, Boolean) QueryParserBase.NewMatchAllDocsQuery() QueryParserBase.NewWildcardQuery(Term) QueryParserBase.GetBooleanQuery(IList<BooleanClause>) QueryParserBase.GetBooleanQuery(IList<BooleanClause>, Boolean) QueryParserBase.GetWildcardQuery(String, String) QueryParserBase.GetRegexpQuery(String, String) QueryParserBase.GetPrefixQuery(String, String) QueryParserBase.GetFuzzyQuery(String, String, Single) QueryParserBase.Escape(String) QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParser : QueryParserBase, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source QueryParser(ICharStream) Constructor with user supplied ICharStream . Declaration protected QueryParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParser(QueryParserTokenManager) Constructor with generated Token Manager. Declaration protected QueryParser(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source QueryParser(LuceneVersion, String, Analyzer) Constructs a query parser. Declaration public QueryParser(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match. System.String f the default field for query terms. Analyzer a used to find terms in the query text. Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public QueryParserTokenManager TokenSource { get; set; } Property Value Type Description QueryParserTokenManager Methods | Improve this Doc View Source Clause(String) Declaration public Query Clause(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source Conjunction() Declaration public int Conjunction() Returns Type Description System.Int32 | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source Modifiers() Declaration public int Modifiers() Returns Type Description System.Int32 | Improve this Doc View Source Query(String) Declaration public Query Query(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public override void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream Overrides QueryParserBase.ReInit(ICharStream) | Improve this Doc View Source ReInit(QueryParserTokenManager) Reinitialize. Declaration public virtual void ReInit(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source Term(String) Declaration public Query Term(string field) Parameters Type Name Description System.String field Returns Type Description Query | Improve this Doc View Source TopLevelQuery(String) Declaration public override sealed Query TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description Query Overrides QueryParserBase.TopLevelQuery(String) Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.MethodRemovedUseAnother.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.MethodRemovedUseAnother.html",
    "title": "Class QueryParserBase.MethodRemovedUseAnother | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserBase.MethodRemovedUseAnother Do not catch this exception in your code, it means you are using methods that you should no longer use. Inheritance System.Object System.Exception QueryParserBase.MethodRemovedUseAnother Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class MethodRemovedUseAnother : Exception Constructors | Improve this Doc View Source MethodRemovedUseAnother() Declaration public MethodRemovedUseAnother()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.QueryParserBase.html",
    "title": "Class QueryParserBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserBase This class is overridden by QueryParser . Inheritance System.Object QueryBuilder QueryParserBase QueryParser Implements ICommonQueryParserConfiguration Inherited Members QueryBuilder.CreateBooleanQuery(String, String) QueryBuilder.CreateBooleanQuery(String, String, Occur) QueryBuilder.CreatePhraseQuery(String, String) QueryBuilder.CreatePhraseQuery(String, String, Int32) QueryBuilder.CreateMinShouldMatchQuery(String, String, Single) QueryBuilder.Analyzer QueryBuilder.EnablePositionIncrements QueryBuilder.CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) QueryBuilder.NewBooleanQuery(Boolean) QueryBuilder.NewTermQuery(Term) QueryBuilder.NewPhraseQuery() QueryBuilder.NewMultiPhraseQuery() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryParserBase : QueryBuilder, ICommonQueryParserConfiguration Constructors | Improve this Doc View Source QueryParserBase() So the generated QueryParser(CharStream) won't error out Declaration protected QueryParserBase() Fields | Improve this Doc View Source AND_OPERATOR Alternative form of AND Declaration public const Operator AND_OPERATOR = Operator.AND Field Value Type Description Operator | Improve this Doc View Source CONJ_AND Declaration protected const int CONJ_AND = 1 Field Value Type Description System.Int32 | Improve this Doc View Source CONJ_NONE Declaration protected const int CONJ_NONE = 0 Field Value Type Description System.Int32 | Improve this Doc View Source CONJ_OR Declaration protected const int CONJ_OR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source m_field Declaration protected string m_field Field Value Type Description System.String | Improve this Doc View Source MOD_NONE Declaration protected const int MOD_NONE = 0 Field Value Type Description System.Int32 | Improve this Doc View Source MOD_NOT Declaration protected const int MOD_NOT = 10 Field Value Type Description System.Int32 | Improve this Doc View Source MOD_REQ Declaration protected const int MOD_REQ = 11 Field Value Type Description System.Int32 | Improve this Doc View Source OR_OPERATOR Alternative form of OR Declaration public const Operator OR_OPERATOR = Operator.OR Field Value Type Description Operator Properties | Improve this Doc View Source AllowLeadingWildcard Set to true to allow leading wildcard characters. When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery. Note that this can produce very slow queries on big indexes. Default: false. Declaration public virtual bool AllowLeadingWildcard { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AnalyzeRangeTerms Get or Set whether or not to analyze range terms when constructing TermRangeQuery s. For example, setting this to true can enable analyzing terms into collation keys for locale-sensitive TermRangeQuery . Declaration public virtual bool AnalyzeRangeTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source AutoGeneratePhraseQueries Set to true if phrase queries will be automatically generated when the analyzer returns more than one term from whitespace delimited text. NOTE: this behavior may not be suitable for all languages. Set to false if phrase queries should only be generated when surrounded by double quotes. Declaration public bool AutoGeneratePhraseQueries { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source DefaultOperator Gets or Sets the boolean operator of the QueryParser. In default mode ( OR_OPERATOR ) terms without any modifiers are considered optional: for example capital of Hungary is equal to capital OR of OR Hungary . In AND_OPERATOR mode terms are considered to be in conjunction: the above mentioned query is parsed as capital AND of AND Hungary Declaration public virtual Operator DefaultOperator { get; set; } Property Value Type Description Operator | Improve this Doc View Source Field Returns the default field. Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FuzzyMinSim Get or Set the minimum similarity for fuzzy queries. Default is 2f. Declaration public virtual float FuzzyMinSim { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FuzzyPrefixLength Get or Set the prefix length for fuzzy queries. Default is 0. Declaration public virtual int FuzzyPrefixLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Locale Get or Set locale used by date range parsing, lowercasing, and other locale-sensitive operations. By default, the culture is null , which indicates to read the culture on the fly from System.Globalization.CultureInfo.CurrentCulture . This ensures if you change the culture on the current thread, QueryParser will utilize it. You can also explicitly set a culture. Setting the culture to null will restore the default behavior if you have explicitly set a culture. Declaration public virtual CultureInfo Locale { get; set; } Property Value Type Description System.Globalization.CultureInfo | Improve this Doc View Source LowercaseExpandedTerms Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically lower-cased or not. Default is true . Declaration public virtual bool LowercaseExpandedTerms { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MultiTermRewriteMethod By default QueryParser uses CONSTANT_SCORE_AUTO_REWRITE_DEFAULT when creating a PrefixQuery , WildcardQuery or TermRangeQuery . This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any BooleanQuery.TooManyClausesException exception. However, if your application really needs to use the old-fashioned BooleanQuery expansion rewriting and the above points are not relevant then use this to change the rewrite method. Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source PhraseSlop Gets or Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero. Declaration public virtual int PhraseSlop { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeZone Get or Set the current time zone for date and time parsing operations. By default, the time zone is null , which indicates to read the time zone on the fly from System.TimeZoneInfo.Local . This ensures if you change the time zone on the current system, QueryParser will utilize it. You can also explicitly set a time zone. Setting the time zone to null will restore the default behavior if you have explicitly set a time zone. Declaration public virtual TimeZoneInfo TimeZone { get; set; } Property Value Type Description System.TimeZoneInfo Methods | Improve this Doc View Source AddClause(IList<BooleanClause>, Int32, Int32, Query) Declaration protected virtual void AddClause(IList<BooleanClause> clauses, int conj, int mods, Query q) Parameters Type Name Description System.Collections.Generic.IList < BooleanClause > clauses System.Int32 conj System.Int32 mods Query q | Improve this Doc View Source AnalyzeMultitermTerm(String, String, Analyzer) Declaration protected virtual BytesRef AnalyzeMultitermTerm(string field, string part, Analyzer analyzerIn) Parameters Type Name Description System.String field System.String part Analyzer analyzerIn Returns Type Description BytesRef | Improve this Doc View Source Escape(String) Returns a string where those characters that QueryParser expects to be escaped are escaped by a preceding \\ . Declaration public static string Escape(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source GetBooleanQuery(IList<BooleanClause>) Factory method for generating query, given a set of clauses. By default creates a boolean query composed of clauses passed in. Can be overridden by extending classes, to modify query being returned. Declaration protected virtual Query GetBooleanQuery(IList<BooleanClause> clauses) Parameters Type Name Description System.Collections.Generic.IList < BooleanClause > clauses List that contains BooleanClause instances to join. Returns Type Description Query Resulting Query object. Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetBooleanQuery(IList<BooleanClause>, Boolean) Factory method for generating query, given a set of clauses. By default creates a boolean query composed of clauses passed in. Can be overridden by extending classes, to modify query being returned. Declaration protected virtual Query GetBooleanQuery(IList<BooleanClause> clauses, bool disableCoord) Parameters Type Name Description System.Collections.Generic.IList < BooleanClause > clauses List that contains BooleanClause instances to join. System.Boolean disableCoord true if coord scoring should be disabled. Returns Type Description Query Resulting Query object. Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetDateResolution(String) Returns the date resolution that is used by RangeQueries for the given field. Returns null, if no default or field specific date resolution has been set for the given field. Declaration public virtual DateTools.Resolution GetDateResolution(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description DateTools.Resolution | Improve this Doc View Source GetFieldQuery(String, String, Boolean) Declaration protected virtual Query GetFieldQuery(string field, string queryText, bool quoted) Parameters Type Name Description System.String field System.String queryText System.Boolean quoted Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetFieldQuery(String, String, Int32) Base implementation delegates to GetFieldQuery(String, String, Boolean) . This method may be overridden, for example, to return a SpanNearQuery instead of a PhraseQuery . Declaration protected virtual Query GetFieldQuery(string field, string queryText, int slop) Parameters Type Name Description System.String field System.String queryText System.Int32 slop Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetFuzzyQuery(String, String, Single) Factory method for generating a query (similar to GetWildcardQuery(String, String) ). Called when parser parses an input term token that has the fuzzy suffix (~) appended. Declaration protected virtual Query GetFuzzyQuery(string field, string termStr, float minSimilarity) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token to use for building term for the query System.Single minSimilarity minimum similarity Returns Type Description Query Resulting Query built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetPrefixQuery(String, String) Factory method for generating a query (similar to GetWildcardQuery(String, String) ). Called when parser parses an input term token that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object. Depending on settings, a prefix term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with wildcard templates. Can be overridden by extending classes, to provide custom handling for wild card queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetPrefixQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token to use for building term for the query Returns Type Description Query Resulting Query built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetRangeQuery(String, String, String, Boolean, Boolean) Declaration protected virtual Query GetRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field System.String part1 System.String part2 System.Boolean startInclusive System.Boolean endInclusive Returns Type Description Query | Improve this Doc View Source GetRegexpQuery(String, String) Factory method for generating a query. Called when parser parses an input term token that contains a regular expression query. Depending on settings, pattern term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with regular expression templates. Can be overridden by extending classes, to provide custom handling for regular expression queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetRegexpQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token that contains a regular expression Returns Type Description Query Resulting Query built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source GetWildcardQuery(String, String) Factory method for generating a query. Called when parser parses an input term token that contains one or more wildcard characters (? and *), but is not a prefix term token (one that has just a single * character at the end) Depending on settings, prefix term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with wildcard templates. Can be overridden by extending classes, to provide custom handling for wildcard queries, which may be necessary due to missing analyzer calls. Declaration protected virtual Query GetWildcardQuery(string field, string termStr) Parameters Type Name Description System.String field Name of the field query will use. System.String termStr Term token that contains one or more wild card characters (? or *), but is not simple prefix term Returns Type Description Query Resulting Query built for the term Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source Init(LuceneVersion, String, Analyzer) Initializes a query parser. Called by the QueryParser constructor Declaration public virtual void Init(LuceneVersion matchVersion, string f, Analyzer a) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match. System.String f the default field for query terms. Analyzer a used to find terms in the query text. | Improve this Doc View Source NewBooleanClause(Query, Occur) Builds a new BooleanClause instance Declaration protected virtual BooleanClause NewBooleanClause(Query q, Occur occur) Parameters Type Name Description Query q sub query Occur occur how this clause should occur when matching documents Returns Type Description BooleanClause new BooleanClause instance | Improve this Doc View Source NewFieldQuery(Analyzer, String, String, Boolean) Declaration protected virtual Query NewFieldQuery(Analyzer analyzer, string field, string queryText, bool quoted) Parameters Type Name Description Analyzer analyzer System.String field System.String queryText System.Boolean quoted Returns Type Description Query Exceptions Type Condition ParseException throw in overridden method to disallow | Improve this Doc View Source NewFuzzyQuery(Term, Single, Int32) Builds a new FuzzyQuery instance Declaration protected virtual Query NewFuzzyQuery(Term term, float minimumSimilarity, int prefixLength) Parameters Type Name Description Term term Term System.Single minimumSimilarity minimum similarity System.Int32 prefixLength prefix length Returns Type Description Query new FuzzyQuery Instance | Improve this Doc View Source NewMatchAllDocsQuery() Builds a new MatchAllDocsQuery instance Declaration protected virtual Query NewMatchAllDocsQuery() Returns Type Description Query new MatchAllDocsQuery instance | Improve this Doc View Source NewPrefixQuery(Term) Builds a new PrefixQuery instance Declaration protected virtual Query NewPrefixQuery(Term prefix) Parameters Type Name Description Term prefix Prefix term Returns Type Description Query new PrefixQuery instance | Improve this Doc View Source NewRangeQuery(String, String, String, Boolean, Boolean) Builds a new TermRangeQuery instance Declaration protected virtual Query NewRangeQuery(string field, string part1, string part2, bool startInclusive, bool endInclusive) Parameters Type Name Description System.String field Field System.String part1 min System.String part2 max System.Boolean startInclusive true if the start of the range is inclusive System.Boolean endInclusive true if the end of the range is inclusive Returns Type Description Query new TermRangeQuery instance | Improve this Doc View Source NewRegexpQuery(Term) Builds a new RegexpQuery instance Declaration protected virtual Query NewRegexpQuery(Term regexp) Parameters Type Name Description Term regexp Regexp term Returns Type Description Query new RegexpQuery instance | Improve this Doc View Source NewWildcardQuery(Term) Builds a new WildcardQuery instance Declaration protected virtual Query NewWildcardQuery(Term t) Parameters Type Name Description Term t wildcard term Returns Type Description Query new WildcardQuery instance | Improve this Doc View Source Parse(String) Parses a query string, returning a Query . Declaration public virtual Query Parse(string query) Parameters Type Name Description System.String query the query string to be parsed. Returns Type Description Query Exceptions Type Condition ParseException if the parsing fails | Improve this Doc View Source ReInit(ICharStream) Declaration public abstract void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source SetDateResolution(DateTools.Resolution) Gets or Sets the default date resolution used by RangeQueries for fields for which no specific date resolutions has been set. Field specific resolutions can be set with SetDateResolution(String, DateTools.Resolution) . Declaration public virtual void SetDateResolution(DateTools.Resolution dateResolution) Parameters Type Name Description DateTools.Resolution dateResolution | Improve this Doc View Source SetDateResolution(String, DateTools.Resolution) Sets the date resolution used by RangeQueries for a specific field. Declaration public virtual void SetDateResolution(string fieldName, DateTools.Resolution dateResolution) Parameters Type Name Description System.String fieldName field for which the date resolution is to be set DateTools.Resolution dateResolution date resolution to set | Improve this Doc View Source TopLevelQuery(String) Declaration public abstract Query TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description Query Implements ICommonQueryParserConfiguration"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.MatchAllBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.MatchAllBits.html",
    "title": "Class Bits.MatchAllBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Bits.MatchAllBits Bits impl of the specified length with all bits set. Inheritance System.Object Bits.MatchAllBits Implements IBits Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MatchAllBits : IBits Constructors | Improve this Doc View Source MatchAllBits(Int32) Declaration public MatchAllBits(int len) Parameters Type Name Description System.Int32 len Properties | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IBits Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Bits.MatchNoBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Bits.MatchNoBits.html",
    "title": "Class Bits.MatchNoBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Bits.MatchNoBits Bits impl of the specified length with no bits set. Inheritance System.Object Bits.MatchNoBits Implements IBits Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MatchNoBits : IBits Constructors | Improve this Doc View Source MatchNoBits(Int32) Declaration public MatchNoBits(int len) Parameters Type Name Description System.Int32 len Properties | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IBits Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Token.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token A Token is an occurrence of a term from the text of a field. It consists of a term's text, the start and end offset of the term in the text of the field, and a type string. The start and end offsets permit applications to re-associate a token with its source text, e.g., to display highlighted query terms in a document browser, or to show matching text fragments in a KWIC (KeyWord In Context) display, etc. The type is a string, assigned by a lexical analyzer (a.k.a. tokenizer), naming the lexical or syntactic class that the token belongs to. For example an end of sentence marker token might be implemented with type \"eos\". The default token type is \"word\". A Token can optionally have metadata (a.k.a. payload) in the form of a variable length byte array. Use GetPayload() to retrieve the payloads from the index. NOTE: As of 2.9, Token implements all IAttribute interfaces that are part of core Lucene and can be found in the Lucene.Net.Analysis.TokenAttributes namespace. Even though it is not necessary to use Token anymore, with the new TokenStream API it can be used as convenience class that implements all IAttribute s, which is especially useful to easily switch from the old to the new TokenStream API. Tokenizer s and TokenFilter s should try to re-use a Token instance when possible for best performance, by implementing the IncrementToken() API. Failing that, to create a new Token you should first use one of the constructors that starts with null text. To load the token from a char[] use CopyBuffer(Char[], Int32, Int32) . To load from a System.String use SetEmpty() followed by Append(String) or Append(String, Int32, Int32) . Alternatively you can get the Token 's termBuffer by calling either Buffer , if you know that your text is shorter than the capacity of the termBuffer or ResizeBuffer(Int32) , if there is any possibility that you may need to grow the buffer. Fill in the characters of your term into this buffer, with System.String.ToCharArray(System.Int32,System.Int32) if loading from a string, or with System.Array.Copy(System.Array,System.Int32,System.Array,System.Int32,System.Int32) , and finally call SetLength(Int32) to set the length of the term text. See LUCENE-969 for details. Typical Token reuse patterns: Copying text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, startOffset, endOffset[, type]); Copying some text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, 0, string.Length, startOffset, endOffset[, type]); Copying text from char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, 0, buffer.Length, startOffset, endOffset[, type]); Copying some text from a char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, start, end - start, startOffset, endOffset[, type]); Copying from one one Token to another (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(source.Buffer, 0, source.Length, source.StartOffset, source.EndOffset[, source.Type]); A few things to note: Clear() initializes all of the fields to default values. this was changed in contrast to Lucene 2.4, but should affect no one. Because TokenStream s can be chained, one cannot assume that the Token 's current type is correct. The startOffset and endOffset represent the start and offset in the source text, so be careful in adjusting them. When caching a reusable token, clone it. When injecting a cached token into a stream that can be reset, clone it again. Please note: With Lucene 3.1, the ToString() method had to be changed to match the ICharSequence interface introduced by the interface ICharTermAttribute . this method now only prints the term text, no additional information anymore. Inheritance System.Object Attribute CharTermAttribute Token Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute ITypeAttribute IPositionIncrementAttribute IFlagsAttribute IOffsetAttribute IPayloadAttribute IPositionLengthAttribute IAttribute Inherited Members CharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.Buffer CharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.Length CharTermAttribute.SetLength(Int32) CharTermAttribute.SetEmpty() CharTermAttribute.FillBytesRef() CharTermAttribute.BytesRef CharTermAttribute.Item[Int32] CharTermAttribute.SubSequence(Int32, Int32) CharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.Append(Char) CharTermAttribute.Append(Char[]) CharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.Append(String) CharTermAttribute.Append(StringBuilder) CharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.Append(ICharSequence) CharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.ToString() Attribute.ReflectAsString(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public class Token : CharTermAttribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, ITypeAttribute, IPositionIncrementAttribute, IFlagsAttribute, IOffsetAttribute, IPayloadAttribute, IPositionLengthAttribute, IAttribute Constructors | Improve this Doc View Source Token() Constructs a Token will null text. Declaration public Token() | Improve this Doc View Source Token(Char[], Int32, Int32, Int32, Int32) Constructs a Token with the given term buffer (offset & length), start and end offsets Declaration public Token(char[] startTermBuffer, int termBufferOffset, int termBufferLength, int start, int end) Parameters Type Name Description System.Char [] startTermBuffer buffer containing term text System.Int32 termBufferOffset the index in the buffer of the first character System.Int32 termBufferLength number of valid characters in the buffer System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(Int32, Int32) Constructs a Token with null text and start & end offsets. Declaration public Token(int start, int end) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(Int32, Int32, Int32) Constructs a Token with null text and start & end offsets plus flags. NOTE: flags is EXPERIMENTAL. Declaration public Token(int start, int end, int flags) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.Int32 flags The bits to set for this token | Improve this Doc View Source Token(Int32, Int32, String) Constructs a Token with null text and start & end offsets plus the Token type. Declaration public Token(int start, int end, string typ) Parameters Type Name Description System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.String typ the lexical type of this Token | Improve this Doc View Source Token(String, Int32, Int32) Constructs a Token with the given term text, and start & end offsets. The type defaults to \"word.\" NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text | Improve this Doc View Source Token(String, Int32, Int32, Int32) Constructs a Token with the given text, start and end offsets, & type. NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end, int flags) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.Int32 flags token type bits | Improve this Doc View Source Token(String, Int32, Int32, String) Constructs a Token with the given text, start and end offsets, & type. NOTE: for better indexing speed you should instead use the char[] termBuffer methods to set the term text. Declaration public Token(string text, int start, int end, string typ) Parameters Type Name Description System.String text term text System.Int32 start start offset in the source text System.Int32 end end offset in the source text System.String typ token type Fields | Improve this Doc View Source TOKEN_ATTRIBUTE_FACTORY Convenience factory that returns Token as implementation for the basic attributes and return the default impl (with \"Impl\" appended) for all other attributes. @since 3.0 Declaration public static readonly AttributeSource.AttributeFactory TOKEN_ATTRIBUTE_FACTORY Field Value Type Description AttributeSource.AttributeFactory Properties | Improve this Doc View Source EndOffset Returns this Token 's ending offset, one greater than the position of the last character corresponding to this token in the source text. The length of the token in the source text is ( EndOffset - StartOffset ). Declaration public int EndOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) IOffsetAttribute | Improve this Doc View Source Flags Get the bitset for any bits that have been set. This is completely distinct from Type , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. Declaration public virtual int Flags { get; set; } Property Value Type Description System.Int32 See Also IFlagsAttribute | Improve this Doc View Source Payload Gets or Sets this Token 's payload. Declaration public virtual BytesRef Payload { get; set; } Property Value Type Description BytesRef See Also IPayloadAttribute | Improve this Doc View Source PositionIncrement Gets or Sets the position increment (the distance from the prior term). The default value is one. Declaration public virtual int PositionIncrement { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if value is set to a negative value. See Also IPositionIncrementAttribute | Improve this Doc View Source PositionLength Gets or Sets the position length of this Token (how many positions this token spans). The default value is one. Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if value is set to zero or negative. See Also IPositionLengthAttribute | Improve this Doc View Source StartOffset Returns this Token 's starting offset, the position of the first character corresponding to this token in the source text. Note that the difference between EndOffset and StartOffset may not be equal to termText.Length, as the term text may have been altered by a stemmer or some other filter. Declaration public int StartOffset { get; } Property Value Type Description System.Int32 See Also SetOffset(Int32, Int32) IOffsetAttribute | Improve this Doc View Source Type Gets or Sets this Token 's lexical type. Defaults to \"word\". Declaration public string Type { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source Clear() Resets the term text, payload, flags, and positionIncrement, startOffset, endOffset and token type to default. Declaration public override void Clear() Overrides CharTermAttribute.Clear() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides CharTermAttribute.Clone() | Improve this Doc View Source Clone(Char[], Int32, Int32, Int32, Int32) Makes a clone, but replaces the term buffer & start/end offset in the process. This is more efficient than doing a full clone (and then calling CopyBuffer(Char[], Int32, Int32) ) because it saves a wasted copy of the old termBuffer. Declaration public virtual Token Clone(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides CharTermAttribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides CharTermAttribute.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides CharTermAttribute.GetHashCode() | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides CharTermAttribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source Reinit(Token) Copy the prototype token's fields into this one. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype) Parameters Type Name Description Token prototype source Token to copy fields from | Improve this Doc View Source Reinit(Token, Char[], Int32, Int32) Copy the prototype token's fields into this one, with a different term. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype, char[] newTermBuffer, int offset, int length) Parameters Type Name Description Token prototype existing Token System.Char [] newTermBuffer buffer containing new term text System.Int32 offset the index in the buffer of the first character System.Int32 length number of valid characters in the buffer | Improve this Doc View Source Reinit(Token, String) Copy the prototype token's fields into this one, with a different term. Note: Payloads are shared. Declaration public virtual void Reinit(Token prototype, string newTerm) Parameters Type Name Description Token prototype existing Token System.String newTerm new term text | Improve this Doc View Source Reinit(Char[], Int32, Int32, Int32, Int32) Shorthand for calling Clear() , CopyBuffer(Char[], Int32, Int32) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(Char[], Int32, Int32, Int32, Int32, String) Shorthand for calling Clear() , CopyBuffer(Char[], Int32, Int32) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(char[] newTermBuffer, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.Char [] newTermBuffer System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32) Shorthand for calling Clear() , Append(String) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(string newTerm, int newStartOffset, int newEndOffset) Parameters Type Name Description System.String newTerm System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, Int32, Int32) Shorthand for calling Clear() , Append(String, Int32, Int32) , SetOffset(Int32, Int32) , Type (set) on DEFAULT_TYPE Declaration public virtual Token Reinit(string newTerm, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset) Parameters Type Name Description System.String newTerm System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, Int32, Int32, String) Shorthand for calling Clear() , Append(String, Int32, Int32) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(string newTerm, int newTermOffset, int newTermLength, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.String newTerm System.Int32 newTermOffset System.Int32 newTermLength System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source Reinit(String, Int32, Int32, String) Shorthand for calling Clear() , Append(String) , SetOffset(Int32, Int32) , Type (set) Declaration public virtual Token Reinit(string newTerm, int newStartOffset, int newEndOffset, string newType) Parameters Type Name Description System.String newTerm System.Int32 newStartOffset System.Int32 newEndOffset System.String newType Returns Type Description Token this Token instance | Improve this Doc View Source SetOffset(Int32, Int32) Set the starting and ending offset. Declaration public virtual void SetOffset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Exceptions Type Condition System.ArgumentException If startOffset or endOffset are negative, or if startOffset is greater than endOffset See Also StartOffset EndOffset IOffsetAttribute Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute ITypeAttribute IPositionIncrementAttribute IFlagsAttribute IOffsetAttribute IPayloadAttribute IPositionLengthAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStream.html",
    "title": "Class TokenStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStream A TokenStream enumerates the sequence of tokens, either from Field s of a Document or from query text. this is an abstract class; concrete subclasses are: Tokenizer , a TokenStream whose input is a System.IO.TextReader ; and TokenFilter , a TokenStream whose input is another TokenStream . A new TokenStream API has been introduced with Lucene 2.9. this API has moved from being Token -based to IAttribute -based. While Token still exists in 2.9 as a convenience class, the preferred way to store the information of a Token is to use System.Attribute s. TokenStream now extends AttributeSource , which provides access to all of the token IAttribute s for the TokenStream . Note that only one instance per System.Attribute is created and reused for every token. This approach reduces object creation and allows local caching of references to the System.Attribute s. See IncrementToken() for further details. The workflow of the new TokenStream API is as follows: Instantiation of TokenStream / TokenFilter s which add/get attributes to/from the AttributeSource . The consumer calls Reset() . The consumer retrieves attributes from the stream and stores local references to all attributes it wants to access. The consumer calls IncrementToken() until it returns false consuming the attributes after each call. The consumer calls End() so that any end-of-stream operations can be performed. The consumer calls Dispose() to release any resource when finished using the TokenStream . To make sure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . You can find some example code for the new API in the analysis documentation. Sometimes it is desirable to capture a current state of a TokenStream , e.g., for buffering purposes (see CachingTokenFilter , TeeSinkTokenFilter). For this usecase CaptureState() and RestoreState(AttributeSource.State) can be used. The TokenStream -API in Lucene is based on the decorator pattern. Therefore all non-abstract subclasses must be sealed or have at least a sealed implementation of IncrementToken() ! This is checked when assertions are enabled. Inheritance System.Object AttributeSource TokenStream NumericTokenStream TokenFilter Tokenizer Implements System.IDisposable Inherited Members AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public abstract class TokenStream : AttributeSource, IDisposable Constructors | Improve this Doc View Source TokenStream() A TokenStream using the default attribute factory. Declaration protected TokenStream() | Improve this Doc View Source TokenStream(AttributeSource) A TokenStream that uses the same attributes as the supplied one. Declaration protected TokenStream(AttributeSource input) Parameters Type Name Description AttributeSource input | Improve this Doc View Source TokenStream(AttributeSource.AttributeFactory) A TokenStream using the supplied AttributeSource.AttributeFactory for creating new IAttribute instances. Declaration protected TokenStream(AttributeSource.AttributeFactory factory) Parameters Type Name Description AttributeSource.AttributeFactory factory Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Releases resources associated with this stream. If you override this method, always call base.Dispose(disposing) , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on reuse). Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source End() This method is called by the consumer after the last token has been consumed, after IncrementToken() returned false (using the new TokenStream API). Streams implementing the old API should upgrade to use this feature. This method can be used to perform any end-of-stream operations, such as setting the final offset of a stream. The final offset of a stream might differ from the offset of the last token eg in case one or more whitespaces followed after the last token, but a WhitespaceTokenizer was used. Additionally any skipped positions (such as those removed by a stopfilter) can be applied to the position increment, or any adjustment of other attributes where the end-of-stream value may be important. If you override this method, always call base.End(); . Declaration public virtual void End() Exceptions Type Condition System.IO.IOException If an I/O error occurs | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate IAttribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all IAttribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public abstract bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public virtual void Reset() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.BlockTreeTermsReader.html",
    "title": "Class BlockTreeTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTreeTermsReader A block-based terms index and dictionary that assigns terms to variable length blocks according to how they share prefixes. The terms index is a prefix trie whose leaves are term blocks. The advantage of this approach is that SeekExact() is often able to determine a term cannot exist without doing any IO, and intersection with Automata is very fast. Note that this terms dictionary has it's own fixed terms index (ie, it does not support a pluggable terms index implementation). NOTE : this terms dictionary does not support index divisor when opening an IndexReader. Instead, you can change the min/maxItemsPerBlock during indexing. The data structure used by this implementation is very similar to a burst trie ( http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.3499 ), but with added logic to break up too-large blocks of all terms sharing a given prefix into smaller ones. Use CheckIndex with the -verbose option to see summary statistics on the blocks in the dictionary. See BlockTreeTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer BlockTreeTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class BlockTreeTermsReader : FieldsProducer, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source BlockTreeTermsReader(Directory, FieldInfos, SegmentInfo, PostingsReaderBase, IOContext, String, Int32) Sole constructor. Declaration public BlockTreeTermsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo info, PostingsReaderBase postingsReader, IOContext ioContext, string segmentSuffix, int indexDivisor) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo info PostingsReaderBase postingsReader IOContext ioContext System.String segmentSuffix System.Int32 indexDivisor Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Disposes all resources used by this object. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() | Improve this Doc View Source ReadHeader(IndexInput) Reads terms file header. Declaration protected virtual int ReadHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 | Improve this Doc View Source ReadIndexHeader(IndexInput) Reads index file header. Declaration protected virtual int ReadIndexHeader(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int32 | Improve this Doc View Source SeekDir(IndexInput, Int64) Seek input to the directory offset. Declaration protected virtual void SeekDir(IndexInput input, long dirOffset) Parameters Type Name Description IndexInput input System.Int64 dirOffset Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40LiveDocsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40LiveDocsFormat.html",
    "title": "Class Lucene40LiveDocsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40LiveDocsFormat Lucene 4.0 Live Documents Format. The .del file is optional, and only exists when a segment contains deletions. Although per-segment, this file is maintained exterior to compound segment files. Deletions (.del) --> Format,Header,ByteCount,BitCount, Bits | DGaps (depending on Format) Format,ByteSize,BitCount --> Uint32 ( WriteInt32(Int32) ) Bits --> < Byte ( WriteByte(Byte) ) > ByteCount DGaps --> <DGap,NonOnesByte> NonzeroBytesCount DGap --> VInt ( WriteVInt32(Int32) ) NonOnesByte --> Byte( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Format is 1: indicates cleared DGaps. ByteCount indicates the number of bytes in Bits. It is typically (SegSize/8)+1. BitCount indicates the number of bits that are currently set in Bits. Bits contains one bit for each document indexed. When the bit corresponding to a document number is cleared, that document is marked as deleted. Bit ordering is from least to most significant. Thus, if Bits contains two bytes, 0x00 and 0x02, then document 9 is marked as alive (not deleted). DGaps represents sparse bit-vectors more efficiently than Bits. It is made of DGaps on indexes of nonOnes bytes in Bits, and the nonOnes bytes themselves. The number of nonOnes bytes in Bits (NonOnesBytesCount) is not stored. For example, if there are 8000 bits and only bits 10,12,32 are cleared, DGaps would be used: (VInt) 1 , (byte) 20 , (VInt) 3 , (Byte) 1 Inheritance System.Object LiveDocsFormat Lucene40LiveDocsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40LiveDocsFormat : LiveDocsFormat Constructors | Improve this Doc View Source Lucene40LiveDocsFormat() Sole constructor. Declaration public Lucene40LiveDocsFormat() Methods | Improve this Doc View Source Files(SegmentCommitInfo, ICollection<String>) Declaration public override void Files(SegmentCommitInfo info, ICollection<string> files) Parameters Type Name Description SegmentCommitInfo info System.Collections.Generic.ICollection < System.String > files Overrides LiveDocsFormat.Files(SegmentCommitInfo, ICollection<String>) | Improve this Doc View Source NewLiveDocs(IBits) Declaration public override IMutableBits NewLiveDocs(IBits existing) Parameters Type Name Description IBits existing Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(IBits) | Improve this Doc View Source NewLiveDocs(Int32) Declaration public override IMutableBits NewLiveDocs(int size) Parameters Type Name Description System.Int32 size Returns Type Description IMutableBits Overrides LiveDocsFormat.NewLiveDocs(Int32) | Improve this Doc View Source ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) Declaration public override IBits ReadLiveDocs(Directory dir, SegmentCommitInfo info, IOContext context) Parameters Type Name Description Directory dir SegmentCommitInfo info IOContext context Returns Type Description IBits Overrides LiveDocsFormat.ReadLiveDocs(Directory, SegmentCommitInfo, IOContext) | Improve this Doc View Source WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Declaration public override void WriteLiveDocs(IMutableBits bits, Directory dir, SegmentCommitInfo info, int newDelCount, IOContext context) Parameters Type Name Description IMutableBits bits Directory dir SegmentCommitInfo info System.Int32 newDelCount IOContext context Overrides LiveDocsFormat.WriteLiveDocs(IMutableBits, Directory, SegmentCommitInfo, Int32, IOContext) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40NormsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40NormsFormat.html",
    "title": "Class Lucene40NormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40NormsFormat Lucene 4.0 Norms Format. Files: .nrm.cfs : compound container ( CompoundFileDirectory ) .nrm.cfe : compound entries ( CompoundFileDirectory ) Norms are implemented as DocValues, so other than file extension, norms are written exactly the same way as Lucene40DocValuesFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NormsFormat Lucene40NormsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 and 4.1 segments\")] public class Lucene40NormsFormat : NormsFormat Constructors | Improve this Doc View Source Lucene40NormsFormat() Sole constructor. Declaration public Lucene40NormsFormat() Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState) Extension Methods Number.IsNumber(Object) See Also Lucene40DocValuesFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.html",
    "title": "Class Lucene45DocValuesProducer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesProducer Reader for Lucene45DocValuesFormat . Inheritance System.Object DocValuesProducer Lucene45DocValuesProducer Implements System.IDisposable Inherited Members DocValuesProducer.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax public class Lucene45DocValuesProducer : DocValuesProducer, IDisposable Constructors | Improve this Doc View Source Lucene45DocValuesProducer(SegmentReadState, String, String, String, String) Expert: instantiates a new reader. Declaration protected Lucene45DocValuesProducer(SegmentReadState state, string dataCodec, string dataExtension, string metaCodec, string metaExtension) Parameters Type Name Description SegmentReadState state System.String dataCodec System.String dataExtension System.String metaCodec System.String metaExtension Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides DocValuesProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides DocValuesProducer.Dispose(Boolean) | Improve this Doc View Source GetAddressInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.BinaryEntry) Returns an address instance for variable-length binary values. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetAddressInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.BinaryEntry bytes) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.BinaryEntry bytes Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetBinary(FieldInfo) Declaration public override BinaryDocValues GetBinary(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description BinaryDocValues Overrides DocValuesProducer.GetBinary(FieldInfo) | Improve this Doc View Source GetDocsWithField(FieldInfo) Declaration public override IBits GetDocsWithField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description IBits Overrides DocValuesProducer.GetDocsWithField(FieldInfo) | Improve this Doc View Source GetIntervalInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.BinaryEntry) Returns an address instance for prefix-compressed binary values. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetIntervalInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.BinaryEntry bytes) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.BinaryEntry bytes Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetNumeric(FieldInfo) Declaration public override NumericDocValues GetNumeric(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description NumericDocValues Overrides DocValuesProducer.GetNumeric(FieldInfo) | Improve this Doc View Source GetOrdIndexInstance(IndexInput, FieldInfo, Lucene45DocValuesProducer.NumericEntry) Returns an address instance for sortedset ordinal lists. This is a Lucene.NET INTERNAL API, use at your own risk Declaration protected virtual MonotonicBlockPackedReader GetOrdIndexInstance(IndexInput data, FieldInfo field, Lucene45DocValuesProducer.NumericEntry entry) Parameters Type Name Description IndexInput data FieldInfo field Lucene45DocValuesProducer.NumericEntry entry Returns Type Description MonotonicBlockPackedReader | Improve this Doc View Source GetSorted(FieldInfo) Declaration public override SortedDocValues GetSorted(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedDocValues Overrides DocValuesProducer.GetSorted(FieldInfo) | Improve this Doc View Source GetSortedSet(FieldInfo) Declaration public override SortedSetDocValues GetSortedSet(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description SortedSetDocValues Overrides DocValuesProducer.GetSortedSet(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides DocValuesProducer.RamBytesUsed() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.Lucene46Codec.html",
    "title": "Class Lucene46Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene46Codec Implements the Lucene 4.6 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene46 package documentation for file format details. @lucene.experimental Inheritance System.Object Codec Lucene46Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene46 Assembly : Lucene.Net.dll Syntax [CodecName(\"Lucene46\")] public class Lucene46Codec : Codec Constructors | Improve this Doc View Source Lucene46Codec() Sole constructor. Declaration public Lucene46Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override sealed FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override sealed NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override sealed SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene45\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsReaderBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsReaderBase.html",
    "title": "Class PostingsReaderBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsReaderBase The core terms dictionaries (BlockTermsReader, BlockTreeTermsReader ) interact with a single instance of this class to manage creation of DocsEnum and DocsAndPositionsEnum instances. It provides an IndexInput (termsIn) where this class may read any previously stored data that it had written in its corresponding PostingsWriterBase at indexing time. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase Lucene40PostingsReader Lucene41PostingsReader Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsReaderBase : IDisposable Constructors | Improve this Doc View Source PostingsReaderBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsReaderBase() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Actually decode metadata for next term. Declaration public abstract void DecodeTerm(long[] longs, DataInput in, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataInput in FieldInfo fieldInfo BlockTermState state System.Boolean absolute See Also EncodeTerm ( System.Int64 [], DataOutput , FieldInfo , BlockTermState , System.Boolean ) | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Must fully consume state, since after this call that TermState may be reused. Declaration public abstract DocsEnum Docs(FieldInfo fieldInfo, BlockTermState state, IBits skipDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState state IBits skipDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Must fully consume state, since after this call that TermState may be reused. Declaration public abstract DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState state, IBits skipDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState state IBits skipDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source Init(IndexInput) Performs any initialization, such as reading and verifying the header from the provided terms dictionary IndexInput . Declaration public abstract void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn | Improve this Doc View Source NewTermState() Return a newly created empty TermState . Declaration public abstract BlockTermState NewTermState() Returns Type Description BlockTermState | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsWriterBase.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsWriterBase.html",
    "title": "Class PostingsWriterBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsWriterBase Extension of PostingsConsumer to support pluggable term dictionaries. This class contains additional hooks to interact with the provided term dictionaries such as BlockTreeTermsWriter . If you want to re-use an existing implementation and are only interested in customizing the format of the postings list, extend this class instead. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Lucene41PostingsWriter Implements System.IDisposable Inherited Members PostingsConsumer.StartDoc(Int32, Int32) PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) PostingsConsumer.FinishDoc() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsWriterBase : PostingsConsumer, IDisposable Constructors | Improve this Doc View Source PostingsWriterBase() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsWriterBase() Methods | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Encode metadata as long[] and byte[] . absolute controls whether current term is delta encoded according to latest term. Usually elements in longs are file pointers, so each one always increases when a new term is consumed. out is used to write generic bytes, which are not monotonic. NOTE: sometimes long[] might contain \"don't care\" values that are unused, e.g. the pointer to postings list may not be defined for some terms but is defined for others, if it is designed to inline some postings data in term dictionary. In this case, the postings writer should always use the last value, so that each element in metadata long[] remains monotonic. Declaration public abstract void EncodeTerm(long[] longs, DataOutput out, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput out FieldInfo fieldInfo BlockTermState state System.Boolean absolute | Improve this Doc View Source FinishTerm(BlockTermState) Finishes the current term. The provided BlockTermState contains the term's summary statistics, and will holds metadata from PBF when returned. Declaration public abstract void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state | Improve this Doc View Source Init(IndexOutput) Called once after startup, before any terms have been added. Implementations typically write a header to the provided termsOut . Declaration public abstract void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut | Improve this Doc View Source NewTermState() Return a newly created empty TermState Declaration public abstract BlockTermState NewTermState() Returns Type Description BlockTermState | Improve this Doc View Source SetField(FieldInfo) Sets the current field for writing, and returns the fixed length of long[] metadata (which is fixed per field), called when the writing switches to another field. Declaration public abstract int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 | Improve this Doc View Source StartTerm() Start a new term. Note that a matching call to FinishTerm(BlockTermState) is done, only if the term has at least one document. Declaration public abstract void StartTerm() Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also PostingsReaderBase"
  },
  "api/Lucene.Net/Lucene.Net.Documents.FieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.FieldType.html",
    "title": "Class FieldType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldType Describes the properties of a field. Inheritance System.Object FieldType Implements IIndexableFieldType Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class FieldType : IIndexableFieldType Constructors | Improve this Doc View Source FieldType() Create a new FieldType with default properties. Declaration public FieldType() | Improve this Doc View Source FieldType(FieldType) Create a new mutable FieldType with all of the properties from ref Declaration public FieldType(FieldType ref) Parameters Type Name Description FieldType ref Properties | Improve this Doc View Source DocValueType Sets the field's DocValuesType , or set to NONE if no DocValues should be stored. The default is NONE (no DocValues ). Declaration public virtual DocValuesType DocValueType { get; set; } Property Value Type Description DocValuesType Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source IndexOptions Sets the indexing options for the field. The default is DOCS_AND_FREQS_AND_POSITIONS . Declaration public virtual IndexOptions IndexOptions { get; set; } Property Value Type Description IndexOptions Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source IsIndexed Set to true to index (invert) this field. The default is false . Declaration public virtual bool IsIndexed { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source IsStored Set to true to store this field. The default is false . Declaration public virtual bool IsStored { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source IsTokenized Set to true to tokenize this field's contents via the configured Analyzer . The default is false . Declaration public virtual bool IsTokenized { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source NumericPrecisionStep Sets the numeric precision step for the field. This has no effect if NumericType returns NONE . The default is PRECISION_STEP_DEFAULT . Declaration public virtual int NumericPrecisionStep { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if precisionStep is less than 1. System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source NumericType Specifies the field's numeric type, or set to null if the field has no numeric type. If non-null then the field's value will be indexed numerically so that NumericRangeQuery can be used at search time. Declaration public virtual NumericType NumericType { get; set; } Property Value Type Description NumericType Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source OmitNorms Set to true to omit normalization values for the field. The default is false . Declaration public virtual bool OmitNorms { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source StoreTermVectorOffsets Set to true to also store token character offsets into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorOffsets { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source StoreTermVectorPayloads Set to true to also store token payloads into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorPayloads { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source StoreTermVectorPositions Set to true to also store token positions into the term vector for this field. The default is false . Declaration public virtual bool StoreTermVectorPositions { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. | Improve this Doc View Source StoreTermVectors Set to true if this field's indexed form should be also stored into term vectors. The default is false . Declaration public virtual bool StoreTermVectors { get; set; } Property Value Type Description System.Boolean Exceptions Type Condition System.InvalidOperationException if this FieldType is frozen against future modifications. Methods | Improve this Doc View Source Freeze() Prevents future changes. Note, it is recommended that this is called once the FieldType 's properties have been set, to prevent unintentional state changes. Declaration public virtual void Freeze() | Improve this Doc View Source ToString() Prints a FieldType for human consumption. Declaration public override sealed string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IIndexableFieldType Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StringField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StringField.html",
    "title": "Class StringField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringField A field that is indexed but not tokenized: the entire System.String value is indexed as a single token. For example this might be used for a 'country' field or an 'id' field, or any field that you intend to use for sorting or access through the field cache. Inheritance System.Object Field StringField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class StringField : Field, IIndexableField Constructors | Improve this Doc View Source StringField(String, String, Field.Store) Creates a new StringField (a field that is indexed but not tokenized) Declaration public StringField(string name, string value, Field.Store stored) Parameters Type Name Description System.String name field name System.String value System.String value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name or value is null . Fields | Improve this Doc View Source TYPE_NOT_STORED Indexed, not tokenized, omits norms, indexes DOCS_ONLY , not stored. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Indexed, not tokenized, omits norms, indexes DOCS_ONLY , stored Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.TextField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.TextField.html",
    "title": "Class TextField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TextField A field that is indexed and tokenized, without term vectors. For example this would be used on a 'body' field, that contains the bulk of a document's text. Inheritance System.Object Field TextField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class TextField : Field, IIndexableField Constructors | Improve this Doc View Source TextField(String, TokenStream) Creates a new un-stored TextField with TokenStream value. Declaration public TextField(string name, TokenStream stream) Parameters Type Name Description System.String name field name TokenStream stream TokenStream value Exceptions Type Condition System.ArgumentNullException if the field name or stream is null . | Improve this Doc View Source TextField(String, TextReader) Creates a new un-stored TextField with System.IO.TextReader value. Declaration public TextField(string name, TextReader reader) Parameters Type Name Description System.String name field name System.IO.TextReader reader System.IO.TextReader value Exceptions Type Condition System.ArgumentNullException if the field name or reader is null | Improve this Doc View Source TextField(String, String, Field.Store) Creates a new TextField with System.String value. Declaration public TextField(string name, string value, Field.Store store) Parameters Type Name Description System.String name field name System.String value System.String value Field.Store store YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name or value is null . Fields | Improve this Doc View Source TYPE_NOT_STORED Indexed, tokenized, not stored. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Indexed, tokenized, stored. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePairComparer-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePairComparer-2.html",
    "title": "Class KeyValuePairComparer<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeyValuePairComparer<K, V> Default comparer for dictionary entries in a sorted dictionary. Entry comparisons only look at keys and uses an externally defined comparer for that. Inheritance System.Object KeyValuePairComparer<K, V> Implements System.Collections.Generic.IComparer < KeyValuePair <K, V>> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class KeyValuePairComparer<K, V> : IComparer<KeyValuePair<K, V>> Type Parameters Name Description K V Constructors | Improve this Doc View Source KeyValuePairComparer(IComparer<K>) Create an entry comparer for a item comparer of the keys Declaration public KeyValuePairComparer(IComparer<K> comparer) Parameters Type Name Description System.Collections.Generic.IComparer <K> comparer Comparer of keys Methods | Improve this Doc View Source Compare(KeyValuePair<K, V>, KeyValuePair<K, V>) Compare two entries Declaration public int Compare(KeyValuePair<K, V> entry1, KeyValuePair<K, V> entry2) Parameters Type Name Description KeyValuePair <K, V> entry1 First entry KeyValuePair <K, V> entry2 Second entry Returns Type Description System.Int32 The result of comparing the keys Implements System.Collections.Generic.IComparer<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePairEqualityComparer-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.KeyValuePairEqualityComparer-2.html",
    "title": "Class KeyValuePairEqualityComparer<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeyValuePairEqualityComparer<K, V> Default equalityComparer for dictionary entries. Operations only look at keys and uses an externally defined equalityComparer for that. Inheritance System.Object KeyValuePairEqualityComparer<K, V> Implements System.Collections.Generic.IEqualityComparer < KeyValuePair <K, V>> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public sealed class KeyValuePairEqualityComparer<K, V> : IEqualityComparer<KeyValuePair<K, V>> Type Parameters Name Description K V Constructors | Improve this Doc View Source KeyValuePairEqualityComparer() Create an entry equalityComparer using the default equalityComparer for keys Declaration public KeyValuePairEqualityComparer() | Improve this Doc View Source KeyValuePairEqualityComparer(IEqualityComparer<K>) Create an entry equalityComparer from a specified item equalityComparer for the keys Declaration public KeyValuePairEqualityComparer(IEqualityComparer<K> keyequalityComparer) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <K> keyequalityComparer The key equalitySCG.Comparer Methods | Improve this Doc View Source Equals(KeyValuePair<K, V>, KeyValuePair<K, V>) Test two entries for equality Declaration public bool Equals(KeyValuePair<K, V> entry1, KeyValuePair<K, V> entry2) Parameters Type Name Description KeyValuePair <K, V> entry1 First entry KeyValuePair <K, V> entry2 Second entry Returns Type Description System.Boolean True if keys are equal | Improve this Doc View Source GetHashCode(KeyValuePair<K, V>) Get the hash code of the entry Declaration public int GetHashCode(KeyValuePair<K, V> entry) Parameters Type Name Description KeyValuePair <K, V> entry The entry Returns Type Description System.Int32 The hash code of the key Implements System.Collections.Generic.IEqualityComparer<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IntroSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IntroSorter.html",
    "title": "Class IntroSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IntroSorter Sorter implementation based on a variant of the quicksort algorithm called introsort : when the recursion level exceeds the log of the length of the array to sort, it falls back to heapsort. This prevents quicksort from running into its worst-case quadratic runtime. Small arrays are sorted with insertion sort. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter IntroSorter Inherited Members Sorter.Compare(Int32, Int32) Sorter.Swap(Int32, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class IntroSorter : Sorter Constructors | Improve this Doc View Source IntroSorter() Create a new IntroSorter . Declaration public IntroSorter() Methods | Improve this Doc View Source ComparePivot(Int32) Compare the pivot with the slot at j , similarly to Compare(i, j) ( Compare(Int32, Int32) ). Declaration protected abstract int ComparePivot(int j) Parameters Type Name Description System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source SetPivot(Int32) Save the value at slot i so that it can later be used as a pivot, see ComparePivot(Int32) . Declaration protected abstract void SetPivot(int i) Parameters Type Name Description System.Int32 i | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public override sealed void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to Overrides Sorter.Sort(Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.MergedIterator-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MergedIterator-1.html",
    "title": "Class MergedIterator<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergedIterator<T> Provides a merged sorted view from several sorted iterators. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to true and an element appears in multiple iterators then it is deduplicated, that is this iterator returns the sorted union of elements. If built with Lucene.Net.Util.MergedIterator`1.removeDuplicates set to false then all elements in all iterators are returned. Caveats: The behavior is undefined if the iterators are not actually sorted. Null elements are unsupported. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to true and if a single iterator contains duplicates then they will not be deduplicated. When elements are deduplicated it is not defined which one is returned. If Lucene.Net.Util.MergedIterator`1.removeDuplicates is set to false then the order in which duplicates are returned isn't defined. The caller is responsible for disposing the System.Collections.Generic.IEnumerator<T> instances that are passed into the constructor, MergedIterator<T> doesn't do it automatically. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MergedIterator<T> Implements System.Collections.Generic.IEnumerator <T> System.Collections.IEnumerator System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class MergedIterator<T> : IEnumerator<T>, IEnumerator, IDisposable where T : IComparable<T> Type Parameters Name Description T Constructors | Improve this Doc View Source MergedIterator(Boolean, IEnumerator<T>[]) Declaration public MergedIterator(bool removeDuplicates, params IEnumerator<T>[] iterators) Parameters Type Name Description System.Boolean removeDuplicates System.Collections.Generic.IEnumerator <T>[] iterators | Improve this Doc View Source MergedIterator(IEnumerator<T>[]) Declaration public MergedIterator(params IEnumerator<T>[] iterators) Parameters Type Name Description System.Collections.Generic.IEnumerator <T>[] iterators Properties | Improve this Doc View Source Current Declaration public T Current { get; } Property Value Type Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source MoveNext() Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public void Reset() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.KStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.KStemFilter.html",
    "title": "Class KStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KStemFilter A high-performance kstem filter for english. See \"Viewing Morphology as an Inference Process\" (Krovetz, R., Proceedings of the Sixteenth Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, 191-203, 1993). All terms must already be lowercased for this filter to work correctly. Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter KStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class KStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source KStemFilter(TokenStream) Declaration public KStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Returns the next, stemmed, input Token. Declaration public override bool IncrementToken() Returns Type Description System.Boolean The stemmed form of a token. Overrides TokenStream.IncrementToken() Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.KStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.KStemFilterFactory.html",
    "title": "Class KStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KStemFilterFactory Factory for KStemFilter . <fieldType name=\"text_kstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.KStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory KStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source KStemFilterFactory(IDictionary<String, String>) Creates a new KStemFilterFactory Declaration public KStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.PorterStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.PorterStemFilter.html",
    "title": "Class PorterStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PorterStemFilter Transforms the token stream as per the Porter stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! To use this filter with other analyzers, you'll want to write an Analyzer class that sets up the TokenStream chain as you want it. To use this with LowerCaseTokenizer, for example, you'd write an analyzer like this: class MyAnalyzer : Analyzer { protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) { Tokenizer source = new LowerCaseTokenizer(version, reader); return new TokenStreamComponents(source, new PorterStemFilter(source)); } } Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object AttributeSource TokenStream TokenFilter PorterStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PorterStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PorterStemFilter(TokenStream) Declaration public PorterStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.PorterStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.PorterStemFilterFactory.html",
    "title": "Class PorterStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PorterStemFilterFactory Factory for PorterStemFilter . <fieldType name=\"text_porterstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PorterStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PorterStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PorterStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PorterStemFilterFactory(IDictionary<String, String>) Creates a new PorterStemFilterFactory Declaration public PorterStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.SpanishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.SpanishAnalyzer.html",
    "title": "Class SpanishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanishAnalyzer Analyzer for Spanish. You must specify the required LuceneVersion compatibility when creating SpanishAnalyzer : As of 3.6, SpanishLightStemFilter is used for less aggressive stemming. Inheritance System.Object Analyzer StopwordAnalyzerBase SpanishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SpanishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source SpanishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SpanishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SpanishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SpanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SpanishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SpanishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Spanish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"spanish_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SpanishLightStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.SpanishLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.SpanishLightStemFilter.html",
    "title": "Class SpanishLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanishLightStemFilter A TokenFilter that applies SpanishLightStemmer to stem Spanish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SpanishLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SpanishLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SpanishLightStemFilter(TokenStream) Declaration public SpanishLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.DoubleMetaphoneFilterFactory.html",
    "title": "Class DoubleMetaphoneFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleMetaphoneFilterFactory Factory for DoubleMetaphoneFilter . <fieldType name=\"text_dblmtphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DoubleMetaphoneFilterFactory\" inject=\"true\" maxCodeLength=\"4\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory DoubleMetaphoneFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphoneFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source DoubleMetaphoneFilterFactory(IDictionary<String, String>) Creates a new DoubleMetaphoneFilterFactory Declaration public DoubleMetaphoneFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source DEFAULT_MAX_CODE_LENGTH default maxCodeLength if not specified Declaration public static readonly int DEFAULT_MAX_CODE_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source INJECT parameter name: true if encoded tokens should be added as synonyms Declaration public static readonly string INJECT Field Value Type Description System.String | Improve this Doc View Source MAX_CODE_LENGTH parameter name: restricts the length of the phonetic code Declaration public static readonly string MAX_CODE_LENGTH Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.AbstractCaverphone.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.AbstractCaverphone.html",
    "title": "Class AbstractCaverphone | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractCaverphone Encodes a string into a Caverphone value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: This class is immutable and thread-safe. See Wikipedia - Caverphone Inheritance System.Object AbstractCaverphone Caverphone1 Caverphone2 Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public abstract class AbstractCaverphone : IStringEncoder Constructors | Improve this Doc View Source AbstractCaverphone() Creates an instance of the Caverphone encoder Declaration public AbstractCaverphone() Methods | Improve this Doc View Source Encode(String) Declaration public abstract string Encode(string source) Parameters Type Name Description System.String source Returns Type Description System.String | Improve this Doc View Source IsEncodeEqual(String, String) Tests if the encodings of two strings are equal. This method might be promoted to a new AbstractStringEncoder superclass. Declaration public virtual bool IsEncodeEqual(string str1, string str2) Parameters Type Name Description System.String str1 First of two strings to compare. System.String str2 Second of two strings to compare. Returns Type Description System.Boolean true if the encodings of these strings are identical, false otherwise. Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.BeiderMorseEncoder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.BeiderMorseEncoder.html",
    "title": "Class BeiderMorseEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BeiderMorseEncoder Encodes strings into their Beider-Morse phonetic encoding. Inheritance System.Object BeiderMorseEncoder Implements IStringEncoder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class BeiderMorseEncoder : IStringEncoder Remarks Beider-Morse phonetic encodings are optimised for family names. However, they may be useful for a wide range of words. This encoder is intentionally mutable to allow dynamic configuration through bean properties. As such, it is mutable, and may not be thread-safe. If you require a guaranteed thread-safe encoding then use PhoneticEngine directly. Encoding overview Beider-Morse phonetic encodings is a multi-step process. Firstly, a table of rules is consulted to guess what language the word comes from. For example, if it ends in \" ault \" then it infers that the word is French. Next, the word is translated into a phonetic representation using a language-specific phonetics table. Some runs of letters can be pronounced in multiple ways, and a single run of letters may be potentially broken up into phonemes at different places, so this stage results in a set of possible language-specific phonetic representations. Lastly, this language-specific phonetic representation is processed by a table of rules that re-writes it phonetically taking into account systematic pronunciation differences between languages, to move it towards a pan-indo-european phonetic representation. Again, sometimes there are multiple ways this could be done and sometimes things that can be pronounced in several ways in the source language have only one way to represent them in this average phonetic language, so the result is again a set of phonetic spellings. Some names are treated as having multiple parts. This can be due to two things. Firstly, they may be hyphenated. In this case, each individual hyphenated word is encoded, and then these are combined end-to-end for the final encoding. Secondly, some names have standard prefixes, for example, \" Mac/Mc \" in Scottish (English) names. As sometimes it is ambiguous whether the prefix is intended or is an accident of the spelling, the word is encoded once with the prefix and once without it. The resulting encoding contains one and then the other result. Encoding format Individual phonetic spellings of an input word are represented in upper- and lower-case roman characters. Where there are multiple possible phonetic representations, these are joined with a pipe ( | ) character. If multiple hyphenated words where found, or if the word may contain a name prefix, each encoded word is placed in elipses and these blocks are then joined with hyphens. For example, \" d'ortley \" has a possible prefix. The form without prefix encodes to ortlaj|ortlej , while the form with prefix encodes to dortlaj|dortlej . Thus, the full, combined encoding is (ortlaj|ortlej)-(dortlaj|dortlej) . The encoded forms are often quite a bit longer than the input strings. This is because a single input may have many potential phonetic interpretations. For example, Renault encodes to rYnDlt|rYnalt|rYnult|rinDlt|rinalt|rinult . The APPROX rules will tend to produce larger encodings as they consider a wider range of possible, approximate phonetic interpretations of the original word. Down-stream applications may wish to further process the encoding for indexing or lookup purposes, for example, by splitting on pipe ( | ) and indexing under each of these alternatives. since 1.6 Properties | Improve this Doc View Source IsConcat Gets or Sets how multiple possible phonetic encodings are combined. true if multiple encodings are to be combined with a '|', false if just the first one is to be considered. Declaration public virtual bool IsConcat { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NameType Gets or Sets the name type currently in operation. Use GENERIC unless you specifically want phonetic encodings optimized for Ashkenazi or Sephardic Jewish family names. Declaration public virtual NameType NameType { get; set; } Property Value Type Description NameType | Improve this Doc View Source RuleType Gets or Sets the rule type to apply. This will widen or narrow the range of phonetic encodings considered. APPROX or EXACT for approximate or exact phonetic matches. Declaration public virtual RuleType RuleType { get; set; } Property Value Type Description RuleType Methods | Improve this Doc View Source Encode(String) Declaration public virtual string Encode(string source) Parameters Type Name Description System.String source Returns Type Description System.String | Improve this Doc View Source SetMaxPhonemes(Int32) Sets the number of maximum of phonemes that shall be considered by the engine. since 1.7 Declaration public virtual void SetMaxPhonemes(int maxPhonemes) Parameters Type Name Description System.Int32 maxPhonemes the maximum number of phonemes returned by the engine Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharTokenizer.html",
    "title": "Class CharTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharTokenizer An abstract base class for simple, character-oriented tokenizers. You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. A new CharTokenizer API has been introduced with Lucene 3.1. This API moved from UTF-16 code units to UTF-32 codepoints to eventually add support for supplementary characters . The old char based API has been deprecated and should be replaced with the int based methods IsTokenChar(Int32) and Normalize(Int32) . As of Lucene 3.1 each CharTokenizer - constructor expects a LuceneVersion argument. Based on the given LuceneVersion either the new API or a backwards compatibility layer is used at runtime. For LuceneVersion < 3.1 the backwards compatibility layer ensures correct behavior even for indexes build with previous versions of Lucene. If a LuceneVersion >= 3.1 is used CharTokenizer requires the new API to be implemented by the instantiated class. Yet, the old char based API is not required anymore even if backwards compatibility must be preserved. CharTokenizer subclasses implementing the new API are fully backwards compatible if instantiated with LuceneVersion < 3.1. Note: If you use a subclass of CharTokenizer with LuceneVersion >= 3.1 on an index build with a version < 3.1, created tokens might not be compatible with the terms in your index. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer LetterTokenizer WhitespaceTokenizer IndicTokenizer RussianLetterTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CharTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source CharTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Creates a new CharTokenizer instance Declaration public CharTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader input the input to split up into tokens | Improve this Doc View Source CharTokenizer(LuceneVersion, TextReader) Creates a new CharTokenizer instance Declaration public CharTokenizer(LuceneVersion matchVersion, TextReader input) Parameters Type Name Description LuceneVersion matchVersion Lucene version to match System.IO.TextReader input the input to split up into tokens Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source IsTokenChar(Int32) Returns true iff a codepoint should be included in a token. This tokenizer generates as tokens adjacent sequences of codepoints which satisfy this predicate. Codepoints for which this is false are used to define token boundaries and are not included in tokens. Declaration protected abstract bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean | Improve this Doc View Source Normalize(Int32) Called on each token character to normalize it before it is added to the token. The default implementation does nothing. Subclasses may use this to, e.g., lowercase tokens. Declaration protected virtual int Normalize(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Int32 | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.ClasspathResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.ClasspathResourceLoader.html",
    "title": "Class ClasspathResourceLoader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClasspathResourceLoader Simple IResourceLoader that uses System.Reflection.Assembly.GetManifestResourceStream(System.String) and System.Reflection.Assembly.GetType(System.String) to open resources and System.Type s, respectively. Inheritance System.Object ClasspathResourceLoader Implements IResourceLoader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ClasspathResourceLoader : IResourceLoader Constructors | Improve this Doc View Source ClasspathResourceLoader(Type) Creates an instance using the System.Assembly of the given class to load Resources and classes Resource paths must be absolute. Declaration public ClasspathResourceLoader(Type clazz) Parameters Type Name Description System.Type clazz Methods | Improve this Doc View Source FindType(String) Declaration public Type FindType(string cname) Parameters Type Name Description System.String cname Returns Type Description System.Type | Improve this Doc View Source NewInstance<T>(String) Declaration public T NewInstance<T>(string cname) Parameters Type Name Description System.String cname Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source OpenResource(String) Declaration public Stream OpenResource(string resource) Parameters Type Name Description System.String resource Returns Type Description System.IO.Stream Implements IResourceLoader"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.ElisionFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.ElisionFilter.html",
    "title": "Class ElisionFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ElisionFilter Removes elisions from a TokenStream . For example, \"l'avion\" (the plane) will be tokenized as \"avion\" (plane). Elision in Wikipedia Inheritance System.Object AttributeSource TokenStream TokenFilter ElisionFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ElisionFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ElisionFilter(TokenStream, CharArraySet) Constructs an elision filter with a CharArraySet of stop words Declaration public ElisionFilter(TokenStream input, CharArraySet articles) Parameters Type Name Description TokenStream input the source TokenStream CharArraySet articles a set of stopword articles Methods | Improve this Doc View Source IncrementToken() Increments the TokenStream with a CharTermAttribute without elisioned start Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.ElisionFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.ElisionFilterFactory.html",
    "title": "Class ElisionFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ElisionFilterFactory Factory for ElisionFilter . <fieldType name=\"text_elsn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\" articles=\"stopwordarticles.txt\" ignoreCase=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ElisionFilterFactory Implements IResourceLoaderAware IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ElisionFilterFactory : TokenFilterFactory, IResourceLoaderAware, IMultiTermAwareComponent Constructors | Improve this Doc View Source ElisionFilterFactory(IDictionary<String, String>) Creates a new ElisionFilterFactory Declaration public ElisionFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TFValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TFValueSource.html",
    "title": "Class TFValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TFValueSource Function that returns Tf(Single) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal Inheritance System.Object ValueSource DocFreqValueSource TermFreqValueSource TFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TFValueSource : TermFreqValueSource Constructors | Improve this Doc View Source TFValueSource(String, String, String, BytesRef) Declaration public TFValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides TermFreqValueSource.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides TermFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TotalTermFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.TotalTermFreqValueSource.html",
    "title": "Class TotalTermFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TotalTermFreqValueSource TotalTermFreqValueSource returns the total term freq (sum of term freqs across all documents). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource TotalTermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class TotalTermFreqValueSource : ValueSource Constructors | Improve this Doc View Source TotalTermFreqValueSource(String, String, String, BytesRef) Declaration public TotalTermFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_indexedBytes Declaration protected readonly BytesRef m_indexedBytes Field Value Type Description BytesRef | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String | Improve this Doc View Source m_val Declaration protected readonly string m_val Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.VectorValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.VectorValueSource.html",
    "title": "Class VectorValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VectorValueSource Converts individual ValueSource instances to leverage the FunctionValues *Val functions that work with multiple values, i.e. DoubleVal(Int32, Double[]) Inheritance System.Object ValueSource MultiValueSource VectorValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class VectorValueSource : MultiValueSource Constructors | Improve this Doc View Source VectorValueSource(IList<ValueSource>) Declaration public VectorValueSource(IList<ValueSource> sources) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description System.Collections.Generic.IList < ValueSource > Properties | Improve this Doc View Source Dimension Declaration public override int Dimension { get; } Property Value Type Description System.Int32 Overrides MultiValueSource.Dimension | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String | Improve this Doc View Source Sources Declaration public virtual IList<ValueSource> Sources { get; } Property Value Type Description System.Collections.Generic.IList < ValueSource > Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSourceScorer.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSourceScorer.html",
    "title": "Class ValueSourceScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ValueSourceScorer Scorer which returns the result of SingleVal(Int32) as the score for a document. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ValueSourceScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class ValueSourceScorer : Scorer Constructors | Improve this Doc View Source ValueSourceScorer(IndexReader, FunctionValues) Declaration protected ValueSourceScorer(IndexReader reader, FunctionValues values) Parameters Type Name Description IndexReader reader FunctionValues values Fields | Improve this Doc View Source m_checkDeletes Declaration protected bool m_checkDeletes Field Value Type Description System.Boolean | Improve this Doc View Source m_maxDoc Declaration protected readonly int m_maxDoc Field Value Type Description System.Int32 | Improve this Doc View Source m_reader Declaration protected readonly IndexReader m_reader Field Value Type Description IndexReader | Improve this Doc View Source m_values Declaration protected readonly FunctionValues m_values Field Value Type Description FunctionValues Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source Reader Declaration public virtual IndexReader Reader { get; } Property Value Type Description IndexReader Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source Matches(Int32) Declaration public virtual bool Matches(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source MatchesValue(Int32) Declaration public virtual bool MatchesValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source SetCheckDeletes(Boolean) Declaration public virtual void SetCheckDeletes(bool checkDeletes) Parameters Type Name Description System.Boolean checkDeletes"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThisQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThisQuery.html",
    "title": "Class MoreLikeThisQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MoreLikeThisQuery A simple wrapper for MoreLikeThis for use in scenarios where a Query object is required eg in custom QueryParser extensions. At query.Rewrite() time the reader is used to construct the actual MoreLikeThis object and obtain the real Query object. Inheritance System.Object Query MoreLikeThisQuery Inherited Members Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Mlt Assembly : Lucene.Net.Queries.dll Syntax public class MoreLikeThisQuery : Query Constructors | Improve this Doc View Source MoreLikeThisQuery(String, String[], Analyzer, String) Declaration public MoreLikeThisQuery(string likeText, string[] moreLikeFields, Analyzer analyzer, string fieldName) Parameters Type Name Description System.String likeText System.String [] moreLikeFields fields used for similarity measure Analyzer analyzer System.String fieldName Properties | Improve this Doc View Source Analyzer Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source LikeText Declaration public virtual string LikeText { get; set; } Property Value Type Description System.String | Improve this Doc View Source MaxQueryTerms Declaration public virtual int MaxQueryTerms { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinDocFreq Declaration public virtual int MinDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinTermFrequency Declaration public virtual int MinTermFrequency { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MoreLikeFields Declaration public virtual string[] MoreLikeFields { get; set; } Property Value Type Description System.String [] | Improve this Doc View Source PercentTermsToMatch Declaration public virtual float PercentTermsToMatch { get; set; } Property Value Type Description System.Single | Improve this Doc View Source StopWords Declaration public virtual ISet<string> StopWords { get; set; } Property Value Type Description System.Collections.Generic.ISet < System.String > Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.TermFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.TermFilter.html",
    "title": "Class TermFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermFilter A filter that includes documents that match with a specific term. Inheritance System.Object Filter TermFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class TermFilter : Filter Constructors | Improve this Doc View Source TermFilter(Term) Declaration public TermFilter(Term term) Parameters Type Name Description Term term The term documents need to have in order to be a match for this filter. Properties | Improve this Doc View Source Term Gets the term this filter includes documents with. Declaration public Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.TermsFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.TermsFilter.html",
    "title": "Class TermsFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsFilter Constructs a filter for docs matching any of the terms added to this class. Unlike a RangeFilter this can be used for filtering on multiple terms that are not necessarily in a sequence. An example might be a collection of primary keys from a database query result or perhaps a choice of \"category\" labels picked by the end user. As a filter, this is much faster than the equivalent query (a BooleanQuery with many \"should\" TermQuery s) Inheritance System.Object Filter TermsFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class TermsFilter : Filter Constructors | Improve this Doc View Source TermsFilter(Term[]) Creates a new TermsFilter from the given array. The array can contain duplicate terms and multiple fields. Declaration public TermsFilter(params Term[] terms) Parameters Type Name Description Term [] terms | Improve this Doc View Source TermsFilter(IList<Term>) Creates a new TermsFilter from the given list. The list can contain duplicate terms and multiple fields. Declaration public TermsFilter(IList<Term> terms) Parameters Type Name Description System.Collections.Generic.IList < Term > terms | Improve this Doc View Source TermsFilter(String, BytesRef[]) Creates a new TermsFilter from the given BytesRef array for a single field. Declaration public TermsFilter(string field, params BytesRef[] terms) Parameters Type Name Description System.String field BytesRef [] terms | Improve this Doc View Source TermsFilter(String, IList<BytesRef>) Creates a new TermsFilter from the given BytesRef list for a single field. Declaration public TermsFilter(string field, IList<BytesRef> terms) Parameters Type Name Description System.String field System.Collections.Generic.IList < BytesRef > terms Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermQueryBuilder.html",
    "title": "Class TermQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermQueryBuilder Builder for TermQuery Inheritance System.Object TermQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsFilterBuilder.html",
    "title": "Class TermsFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsFilterBuilder Builder for TermsFilter Inheritance System.Object TermsFilterBuilder Implements IFilterBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermsFilterBuilder : IFilterBuilder Constructors | Improve this Doc View Source TermsFilterBuilder(Analyzer) Declaration public TermsFilterBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetFilter(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.FilterBuilder#process(org.w3c.dom.Element) Declaration public virtual Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter Implements IFilterBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.TermsQueryBuilder.html",
    "title": "Class TermsQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsQueryBuilder Builds a BooleanQuery from all of the terms found in the XML element using the choice of analyzer Inheritance System.Object TermsQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class TermsQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source TermsQueryBuilder(Analyzer) Declaration public TermsQueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.UserInputQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.UserInputQueryBuilder.html",
    "title": "Class UserInputQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UserInputQueryBuilder UserInputQueryBuilder uses 1 of 2 strategies for thread-safe parsing: 1) Synchronizing access to \"Parse\" calls on a previously supplied QueryParser or.. 2) creating a new QueryParser object for each parse request Inheritance System.Object UserInputQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class UserInputQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source UserInputQueryBuilder(QueryParser) This constructor has the disadvantage of not being able to change choice of default field name Declaration public UserInputQueryBuilder(QueryParser parser) Parameters Type Name Description QueryParser parser thread un-safe query parser | Improve this Doc View Source UserInputQueryBuilder(String, Analyzer) Declaration public UserInputQueryBuilder(string defaultField, Analyzer analyzer) Parameters Type Name Description System.String defaultField Analyzer analyzer Methods | Improve this Doc View Source CreateQueryParser(String, Analyzer) Method to create a QueryParser - designed to be overridden Declaration protected virtual QueryParser CreateQueryParser(string fieldName, Analyzer analyzer) Parameters Type Name Description System.String fieldName Analyzer analyzer Returns Type Description QueryParser QueryParser | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedDocValues.html",
    "title": "Class MultiDocValues.MultiSortedDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocValues.MultiSortedDocValues Implements SortedDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BinaryDocValues SortedDocValues MultiDocValues.MultiSortedDocValues Inherited Members SortedDocValues.Get(Int32, BytesRef) SortedDocValues.LookupTerm(BytesRef) SortedDocValues.GetTermsEnum() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiSortedDocValues : SortedDocValues Properties | Improve this Doc View Source DocStarts docbase for each leaf: parallel with Values Declaration public int[] DocStarts { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Mapping ordinal map mapping ords from values to global ord space Declaration public MultiDocValues.OrdinalMap Mapping { get; } Property Value Type Description MultiDocValues.OrdinalMap | Improve this Doc View Source ValueCount Declaration public override int ValueCount { get; } Property Value Type Description System.Int32 Overrides SortedDocValues.ValueCount | Improve this Doc View Source Values leaf values Declaration public SortedDocValues[] Values { get; } Property Value Type Description SortedDocValues [] Methods | Improve this Doc View Source GetOrd(Int32) Declaration public override int GetOrd(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 Overrides SortedDocValues.GetOrd(Int32) | Improve this Doc View Source LookupOrd(Int32, BytesRef) Declaration public override void LookupOrd(int ord, BytesRef result) Parameters Type Name Description System.Int32 ord BytesRef result Overrides SortedDocValues.LookupOrd(Int32, BytesRef) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedSetDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocValues.MultiSortedSetDocValues.html",
    "title": "Class MultiDocValues.MultiSortedSetDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocValues.MultiSortedSetDocValues Implements MultiDocValues.MultiSortedSetDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SortedSetDocValues MultiDocValues.MultiSortedSetDocValues Inherited Members SortedSetDocValues.NO_MORE_ORDS SortedSetDocValues.LookupTerm(BytesRef) SortedSetDocValues.GetTermsEnum() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MultiSortedSetDocValues : SortedSetDocValues Properties | Improve this Doc View Source DocStarts docbase for each leaf: parallel with Values Declaration public int[] DocStarts { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Mapping ordinal map mapping ords from values to global ord space Declaration public MultiDocValues.OrdinalMap Mapping { get; } Property Value Type Description MultiDocValues.OrdinalMap | Improve this Doc View Source ValueCount Declaration public override long ValueCount { get; } Property Value Type Description System.Int64 Overrides SortedSetDocValues.ValueCount | Improve this Doc View Source Values leaf values Declaration public SortedSetDocValues[] Values { get; } Property Value Type Description SortedSetDocValues [] Methods | Improve this Doc View Source LookupOrd(Int64, BytesRef) Declaration public override void LookupOrd(long ord, BytesRef result) Parameters Type Name Description System.Int64 ord BytesRef result Overrides SortedSetDocValues.LookupOrd(Int64, BytesRef) | Improve this Doc View Source NextOrd() Declaration public override long NextOrd() Returns Type Description System.Int64 Overrides SortedSetDocValues.NextOrd() | Improve this Doc View Source SetDocument(Int32) Declaration public override void SetDocument(int docID) Parameters Type Name Description System.Int32 docID Overrides SortedSetDocValues.SetDocument(Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderManager.html",
    "title": "Class ReaderManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReaderManager Utility class to safely share DirectoryReader instances across multiple threads, while periodically reopening. This class ensures each reader is disposed only once all threads have finished using it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ReferenceManager < DirectoryReader > ReaderManager Implements System.IDisposable Inherited Members ReferenceManager<DirectoryReader>.Current ReferenceManager<DirectoryReader>.Acquire() ReferenceManager<DirectoryReader>.Dispose() ReferenceManager<DirectoryReader>.Dispose(Boolean) ReferenceManager<DirectoryReader>.MaybeRefresh() ReferenceManager<DirectoryReader>.MaybeRefreshBlocking() ReferenceManager<DirectoryReader>.AfterMaybeRefresh() ReferenceManager<DirectoryReader>.Release(DirectoryReader) ReferenceManager<DirectoryReader>.AddListener(ReferenceManager.IRefreshListener) ReferenceManager<DirectoryReader>.RemoveListener(ReferenceManager.IRefreshListener) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderManager : ReferenceManager<DirectoryReader>, IDisposable Constructors | Improve this Doc View Source ReaderManager(IndexWriter, Boolean) Creates and returns a new ReaderManager from the given IndexWriter . Declaration public ReaderManager(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer the IndexWriter to open the IndexReader from. System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the IndexSearcher / DirectoryReader . If false , the deletes may or may not be applied, but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . See OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source ReaderManager(Directory) Creates and returns a new ReaderManager from the given Directory . Declaration public ReaderManager(Directory dir) Parameters Type Name Description Directory dir the directory to open the DirectoryReader on. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error Methods | Improve this Doc View Source DecRef(DirectoryReader) Declaration protected override void DecRef(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.DecRef(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source GetRefCount(DirectoryReader) Declaration protected override int GetRefCount(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Returns Type Description System.Int32 Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.GetRefCount(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source RefreshIfNeeded(DirectoryReader) Declaration protected override DirectoryReader RefreshIfNeeded(DirectoryReader referenceToRefresh) Parameters Type Name Description DirectoryReader referenceToRefresh Returns Type Description DirectoryReader Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.RefreshIfNeeded(Lucene.Net.Index.DirectoryReader) | Improve this Doc View Source TryIncRef(DirectoryReader) Declaration protected override bool TryIncRef(DirectoryReader reference) Parameters Type Name Description DirectoryReader reference Returns Type Description System.Boolean Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Index.DirectoryReader>.TryIncRef(Lucene.Net.Index.DirectoryReader) Implements System.IDisposable Extension Methods ReferenceManagerExtensions.GetContext<T>(ReferenceManager<T>) Number.IsNumber(Object) See Also SearcherManager"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.PrepareCommitFailException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.PrepareCommitFailException.html",
    "title": "Class TwoPhaseCommitTool.PrepareCommitFailException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TwoPhaseCommitTool.PrepareCommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to PrepareCommit() . Inheritance System.Object System.Exception System.IO.IOException TwoPhaseCommitTool.PrepareCommitFailException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class PrepareCommitFailException : IOException Constructors | Improve this Doc View Source PrepareCommitFailException(Exception, ITwoPhaseCommit) Sole constructor. Declaration public PrepareCommitFailException(Exception cause, ITwoPhaseCommit obj) Parameters Type Name Description System.Exception cause ITwoPhaseCommit obj Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.UpgradeIndexMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.UpgradeIndexMergePolicy.html",
    "title": "Class UpgradeIndexMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UpgradeIndexMergePolicy This MergePolicy is used for upgrading all existing segments of an index when calling ForceMerge(Int32) . All other methods delegate to the base MergePolicy given to the constructor. This allows for an as-cheap-as possible upgrade of an older index by only upgrading segments that are created by previous Lucene versions. ForceMerge does no longer really merge; it is just used to \"ForceMerge\" older segment versions away. In general one would use IndexUpgrader , but for a fully customizeable upgrade, you can use this like any other MergePolicy and call ForceMerge(Int32) : IndexWriterConfig iwc = new IndexWriterConfig(LuceneVersion.LUCENE_XX, new KeywordAnalyzer()); iwc.MergePolicy = new UpgradeIndexMergePolicy(iwc.MergePolicy); using (IndexWriter w = new IndexWriter(dir, iwc)) { w.ForceMerge(1); } Warning: this merge policy may reorder documents if the index was partially upgraded before calling ForceMerge(Int32) (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a ForceMerge(1) instead. Please note, the delegate MergePolicy may also reorder documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy UpgradeIndexMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_NO_CFS_RATIO MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.Dispose() MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class UpgradeIndexMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source UpgradeIndexMergePolicy(MergePolicy) Wrap the given MergePolicy and intercept ForceMerge(Int32) requests to only upgrade segments written with previous Lucene versions. Declaration public UpgradeIndexMergePolicy(MergePolicy base) Parameters Type Name Description MergePolicy base Fields | Improve this Doc View Source m_base Wrapped MergePolicy . Declaration protected readonly MergePolicy m_base Field Value Type Description MergePolicy Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos segmentInfos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source SetIndexWriter(IndexWriter) Declaration public override void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Overrides MergePolicy.SetIndexWriter(IndexWriter) | Improve this Doc View Source ShouldUpgradeSegment(SegmentCommitInfo) Returns true if the given segment should be upgraded. The default implementation will return !Constants.LUCENE_MAIN_VERSION.Equals(si.Info.Version, StringComparison.Ordinal) , so all segments created with a different version number than this Lucene version will get upgraded. Declaration protected virtual bool ShouldUpgradeSegment(SegmentCommitInfo si) Parameters Type Name Description SegmentCommitInfo si Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Declaration public override bool UseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) Parameters Type Name Description SegmentInfos segments SegmentCommitInfo newSegment Returns Type Description System.Boolean Overrides MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also IndexUpgrader"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.TooManyClausesException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.TooManyClausesException.html",
    "title": "Class BooleanQuery.TooManyClausesException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQuery.TooManyClausesException Thrown when an attempt is made to add more than MaxClauseCount clauses. This typically happens if a PrefixQuery , FuzzyQuery , WildcardQuery , or TermRangeQuery is expanded to many terms during search. Inheritance System.Object System.Exception BooleanQuery.TooManyClausesException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TooManyClausesException : Exception Constructors | Improve this Doc View Source TooManyClausesException() Declaration public TooManyClausesException() Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BooleanQuery.html",
    "title": "Class BooleanQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQuery A Query that matches documents matching boolean combinations of other queries, e.g. TermQuery s, PhraseQuery s or other BooleanQuery s. Collection initializer note: To create and populate a BooleanQuery in a single statement, you can use the following example as a guide: var booleanQuery = new BooleanQuery() { { new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD }, { new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD } }; // or var booleanQuery = new BooleanQuery() { new BooleanClause(new WildcardQuery(new Term(\"field2\", \"foobar\")), Occur.SHOULD), new BooleanClause(new MultiPhraseQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }, Occur.SHOULD) }; Inheritance System.Object Query BooleanQuery Implements System.Collections.Generic.IEnumerable < BooleanClause > System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class BooleanQuery : Query, IEnumerable<BooleanClause>, IEnumerable Constructors | Improve this Doc View Source BooleanQuery() Constructs an empty boolean query. Declaration public BooleanQuery() | Improve this Doc View Source BooleanQuery(Boolean) Constructs an empty boolean query. Coord(Int32, Int32) may be disabled in scoring, as appropriate. For example, this score factor does not make sense for most automatically generated queries, like WildcardQuery and FuzzyQuery . Declaration public BooleanQuery(bool disableCoord) Parameters Type Name Description System.Boolean disableCoord Disables Coord(Int32, Int32) in scoring. Fields | Improve this Doc View Source m_minNrShouldMatch Declaration protected int m_minNrShouldMatch Field Value Type Description System.Int32 Properties | Improve this Doc View Source Clauses Returns the list of clauses in this query. Declaration public virtual IList<BooleanClause> Clauses { get; } Property Value Type Description System.Collections.Generic.IList < BooleanClause > | Improve this Doc View Source CoordDisabled Returns true if Coord(Int32, Int32) is disabled in scoring for this query instance. Declaration public virtual bool CoordDisabled { get; } Property Value Type Description System.Boolean See Also BooleanQuery(Boolean) | Improve this Doc View Source MaxClauseCount Return the maximum number of clauses permitted, 1024 by default. Attempts to add more than the permitted number of clauses cause BooleanQuery.TooManyClausesException to be thrown. Declaration public static int MaxClauseCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinimumNumberShouldMatch Specifies a minimum number of the optional BooleanClause s which must be satisfied. By default no optional clauses are necessary for a match (unless there are no required clauses). If this method is used, then the specified number of clauses is required. Use of this method is totally independent of specifying that any specific clauses are required (or prohibited). This number will only be compared against the number of matching optional clauses. Declaration public virtual int MinimumNumberShouldMatch { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(BooleanClause) Adds a clause to a boolean query. Declaration public virtual void Add(BooleanClause clause) Parameters Type Name Description BooleanClause clause Exceptions Type Condition BooleanQuery.TooManyClausesException If the new number of clauses exceeds the maximum clause number See Also MaxClauseCount | Improve this Doc View Source Add(Query, Occur) Adds a clause to a boolean query. Declaration public virtual void Add(Query query, Occur occur) Parameters Type Name Description Query query Occur occur Exceptions Type Condition BooleanQuery.TooManyClausesException If the new number of clauses exceeds the maximum clause number See Also MaxClauseCount | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetClauses() Returns the set of clauses in this query. Declaration public virtual BooleanClause[] GetClauses() Returns Type Description BooleanClause [] | Improve this Doc View Source GetEnumerator() Returns an iterator on the clauses in this query. It implements the IEnumerable{BooleanClause} interface to make it possible to do: foreach (BooleanClause clause in booleanQuery) {} Declaration public IEnumerator<BooleanClause> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < BooleanClause > | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BoostAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BoostAttribute.html",
    "title": "Class BoostAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostAttribute Implementation class for IBoostAttribute . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Attribute BoostAttribute Implements IBoostAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class BoostAttribute : Attribute, IBoostAttribute, IAttribute Properties | Improve this Doc View Source Boost Gets or Sets the boost in this attribute. Default is 1.0f . Declaration public float Boost { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) Implements IBoostAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishAnalyzer.html",
    "title": "Class EnglishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishAnalyzer Analyzer for English. Inheritance System.Object Analyzer StopwordAnalyzerBase EnglishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EnglishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source EnglishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DefaultStopSet . Declaration public EnglishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source EnglishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public EnglishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source EnglishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public EnglishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , EnglishPossessiveFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and PorterStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishMinimalStemFilter.html",
    "title": "Class EnglishMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishMinimalStemFilter A TokenFilter that applies EnglishMinimalStemmer to stem English words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter EnglishMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EnglishMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source EnglishMinimalStemFilter(TokenStream) Declaration public EnglishMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishMinimalStemFilterFactory.html",
    "title": "Class EnglishMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishMinimalStemFilterFactory Factory for EnglishMinimalStemFilter . <fieldType name=\"text_enminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory EnglishMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source EnglishMinimalStemFilterFactory(IDictionary<String, String>) Creates a new EnglishMinimalStemFilterFactory Declaration public EnglishMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.IInflectionAttribute.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.IInflectionAttribute.html",
    "title": "Interface IInflectionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IInflectionAttribute Attribute for Kuromoji inflection data. Note: in some cases this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IInflectionAttribute : IAttribute Methods | Improve this Doc View Source GetInflectionForm() Declaration string GetInflectionForm() Returns Type Description System.String | Improve this Doc View Source GetInflectionType() Declaration string GetInflectionType() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.InflectionAttribute.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.InflectionAttribute.html",
    "title": "Class InflectionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InflectionAttribute Attribute for Kuromoji inflection data. Inheritance System.Object Attribute InflectionAttribute Implements IInflectionAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class InflectionAttribute : Attribute, IInflectionAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetInflectionForm() Declaration public virtual string GetInflectionForm() Returns Type Description System.String | Improve this Doc View Source GetInflectionType() Declaration public virtual string GetInflectionType() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IInflectionAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.IPartOfSpeechAttribute.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.IPartOfSpeechAttribute.html",
    "title": "Interface IPartOfSpeechAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPartOfSpeechAttribute Attribute for GetPartOfSpeech() . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IPartOfSpeechAttribute : IAttribute Methods | Improve this Doc View Source GetPartOfSpeech() Declaration string GetPartOfSpeech() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.IReadingAttribute.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.IReadingAttribute.html",
    "title": "Interface IReadingAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReadingAttribute Attribute for Kuromoji reading data Note: in some cases this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IReadingAttribute : IAttribute Methods | Improve this Doc View Source GetPronunciation() Declaration string GetPronunciation() Returns Type Description System.String | Improve this Doc View Source GetReading() Declaration string GetReading() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.PartOfSpeechAttribute.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.PartOfSpeechAttribute.html",
    "title": "Class PartOfSpeechAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PartOfSpeechAttribute Attribute for GetPartOfSpeech() . Inheritance System.Object Attribute PartOfSpeechAttribute Implements IPartOfSpeechAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class PartOfSpeechAttribute : Attribute, IPartOfSpeechAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetPartOfSpeech() Declaration public virtual string GetPartOfSpeech() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IPartOfSpeechAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.ReadingAttribute.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.ReadingAttribute.html",
    "title": "Class ReadingAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReadingAttribute Attribute for Kuromoji reading data Inheritance System.Object Attribute ReadingAttribute Implements IReadingAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class ReadingAttribute : Attribute, IReadingAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetPronunciation() Declaration public virtual string GetPronunciation() Returns Type Description System.String | Improve this Doc View Source GetReading() Declaration public virtual string GetReading() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IReadingAttribute IAttribute"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractAllGroupsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractAllGroupsCollector-1.html",
    "title": "Interface IAbstractAllGroupsCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractAllGroupsCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractAllGroupsCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupCount Returns the total number of groups for the executed search. This is a convenience method. The following code snippet has the same effect: GetGroups().Count Declaration int GroupCount { get; } Property Value Type Description System.Int32 The total number of groups for the executed search | Improve this Doc View Source Groups Returns the group values This is an unordered collections of group values. For each group that matched the query there is a BytesRef representing a group value. Declaration IEnumerable<TGroupValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> the group values"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractDistinctValuesCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractDistinctValuesCollector-1.html",
    "title": "Interface IAbstractDistinctValuesCollector<GC> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractDistinctValuesCollector<GC> LUCENENET specific interface used to apply covariance to GC Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractDistinctValuesCollector<out GC> : ICollector Type Parameters Name Description GC Properties | Improve this Doc View Source Groups Returns all unique values for each top N group. Declaration IEnumerable<GC> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <GC> all unique values for each top N group"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractFirstPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractFirstPassGroupingCollector-1.html",
    "title": "Interface IAbstractFirstPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractFirstPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractFirstPassGroupingCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Methods | Improve this Doc View Source GetTopGroups(Int32, Boolean) Returns top groups, starting from offset. This may return null, if no groups were collected, or if the number of unique groups collected is <= offset. Declaration IEnumerable<ISearchGroup<TGroupValue>> GetTopGroups(int groupOffset, bool fillFields) Parameters Type Name Description System.Int32 groupOffset The offset in the collected groups System.Boolean fillFields Whether to fill to SortValues Returns Type Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> top groups, starting from offset Remarks LUCENENET NOTE: We must use System.Collections.Generic.IEnumerable<T> rather than System.Collections.Generic.ICollection<T> here because we need this to be covariant"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractSecondPassGroupingCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IAbstractSecondPassGroupingCollector-1.html",
    "title": "Interface IAbstractSecondPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAbstractSecondPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Inherited Members ICollector.SetScorer(Scorer) ICollector.Collect(Int32) ICollector.SetNextReader(AtomicReaderContext) ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractSecondPassGroupingCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Methods | Improve this Doc View Source GetTopGroups(Int32) Declaration ITopGroups<TGroupValue> GetTopGroups(int withinGroupOffset) Parameters Type Name Description System.Int32 withinGroupOffset Returns Type Description ITopGroups <TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup-1.html",
    "title": "Class SearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchGroup<TGroupValue> Represents a group that is found during the first pass search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SearchGroup<TGroupValue> CollectedSearchGroup<TGroupValue> Implements ISearchGroup <TGroupValue> Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroup<TGroupValue> : ISearchGroup<TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue The value that defines this group Declaration public TGroupValue GroupValue { get; set; } Property Value Type Description TGroupValue | Improve this Doc View Source SortValues The sort values used during sorting. These are the groupSort field values of the highest rank document (by the groupSort) within the group. Can be null if fillFields=false had been passed to GetTopGroups(Int32, Boolean) Declaration public object[] SortValues { get; set; } Property Value Type Description System.Object [] Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements ISearchGroup<TGroupValue>"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector-1.html",
    "title": "Class TermAllGroupHeadsCollector<GH> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermAllGroupHeadsCollector<GH> A base implementation of AbstractAllGroupHeadsCollector<GH> for retrieving the most relevant groups when grouping on a string based group field. More specifically this all concrete implementations of this base implementation use SortedDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector <GH> TermAllGroupHeadsCollector<GH> Implements ICollector Inherited Members AbstractAllGroupHeadsCollector<GH>.m_reversed AbstractAllGroupHeadsCollector<GH>.m_compIDXEnd AbstractAllGroupHeadsCollector<GH>.m_temporalResult AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeads(Int32) AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeads() AbstractAllGroupHeadsCollector<GH>.GroupHeadsCount AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeadAndAddIfNotExist(Int32) AbstractAllGroupHeadsCollector<GH>.CollectedGroupHeads AbstractAllGroupHeadsCollector<GH>.Collect(Int32) AbstractAllGroupHeadsCollector<GH>.AcceptsDocsOutOfOrder AbstractAllGroupHeadsCollector.SetScorer(Scorer) AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public abstract class TermAllGroupHeadsCollector<GH> : AbstractAllGroupHeadsCollector<GH>, ICollector where GH : AbstractAllGroupHeadsCollector_GroupHead Type Parameters Name Description GH Constructors | Improve this Doc View Source TermAllGroupHeadsCollector(String, Int32) Declaration protected TermAllGroupHeadsCollector(string groupField, int numberOfSorts) Parameters Type Name Description System.String groupField System.Int32 numberOfSorts Implements ICollector"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupsCollector.html",
    "title": "Class TermAllGroupsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: an int hash set (SentinelIntSet) is used to detect if a group is already added to the total count. For each segment the int set is cleared and filled with previous counted groups that occur in the new segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector < BytesRef > TermAllGroupsCollector Implements IAbstractAllGroupsCollector < BytesRef > ICollector Inherited Members AbstractAllGroupsCollector<BytesRef>.GroupCount AbstractAllGroupsCollector<BytesRef>.SetScorer(Scorer) AbstractAllGroupsCollector<BytesRef>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermAllGroupsCollector : AbstractAllGroupsCollector<BytesRef>, IAbstractAllGroupsCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermAllGroupsCollector(String) Constructs a AbstractAllGroupsCollector<TGroupValue> . This sets the initial allocation size for the internal int set and group list to 128. Declaration public TermAllGroupsCollector(string groupField) Parameters Type Name Description System.String groupField The field to group by | Improve this Doc View Source TermAllGroupsCollector(String, Int32) Expert: Constructs a AbstractAllGroupsCollector<TGroupValue> Declaration public TermAllGroupsCollector(string groupField, int initialSize) Parameters Type Name Description System.String groupField The field to group by System.Int32 initialSize The initial allocation size of the internal int set and group list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<BytesRef> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < BytesRef > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractAllGroupsCollector<TGroupValue> ICollector"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilterFactory.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.ICUCollationKeyFilterFactory.html",
    "title": "Class ICUCollationKeyFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollationKeyFilterFactory Factory for ICUCollationKeyFilter . Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ICUCollationKeyFilterFactory Implements IMultiTermAwareComponent IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Collation Assembly : Lucene.Net.ICU.dll Syntax [Obsolete(\"Use ICUCollationKeyAnalyzer instead.\")] public class ICUCollationKeyFilterFactory : TokenFilterFactory, IMultiTermAwareComponent, IResourceLoaderAware Remarks This factory can be created in two ways: Based upon a system collator associated with a Locale. Based upon a tailored ruleset. Using a System collator: locale: RFC 3066 locale ID (mandatory) strength: 'primary','secondary','tertiary', 'quaternary', or 'identical' (optional) decomposition: 'no', or 'canonical' (optional) Using a Tailored ruleset: custom: UTF-8 text file containing rules supported by RuleBasedCollator (mandatory) strength: 'primary','secondary','tertiary', 'quaternary', or 'identical' (optional) decomposition: 'no' or 'canonical' (optional) Expert options: alternate: 'shifted' or 'non-ignorable'. Can be used to ignore punctuation/whitespace. caseLevel: 'true' or 'false'. Useful with strength=primary to ignore accents but not case. caseFirst: 'lower' or 'upper'. Useful to control which is sorted first when case is not ignored. numeric: 'true' or 'false'. Digits are sorted according to numeric value, e.g. foobar-9 sorts before foobar-10 Constructors | Improve this Doc View Source ICUCollationKeyFilterFactory(IDictionary<String, String>) Declaration public ICUCollationKeyFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IMultiTermAwareComponent IResourceLoaderAware See Also ICU4N.Text.Collator ICU4N.Text.RuleBasedCollator"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.ICUCollatedTermAttribute.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.ICUCollatedTermAttribute.html",
    "title": "Class ICUCollatedTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUCollatedTermAttribute Extension of CharTermAttribute that encodes the term text as a binary Unicode collation key instead of as UTF-8 bytes. Inheritance System.Object Attribute CharTermAttribute ICUCollatedTermAttribute Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute IAttribute Inherited Members CharTermAttribute.CopyBuffer(Char[], Int32, Int32) CharTermAttribute.Buffer CharTermAttribute.ResizeBuffer(Int32) CharTermAttribute.Length CharTermAttribute.SetLength(Int32) CharTermAttribute.SetEmpty() CharTermAttribute.BytesRef CharTermAttribute.Item[Int32] CharTermAttribute.SubSequence(Int32, Int32) CharTermAttribute.Append(String, Int32, Int32) CharTermAttribute.Append(Char) CharTermAttribute.Append(Char[]) CharTermAttribute.Append(Char[], Int32, Int32) CharTermAttribute.Append(String) CharTermAttribute.Append(StringBuilder) CharTermAttribute.Append(StringBuilder, Int32, Int32) CharTermAttribute.Append(ICharTermAttribute) CharTermAttribute.Append(ICharSequence) CharTermAttribute.Append(ICharSequence, Int32, Int32) CharTermAttribute.GetHashCode() CharTermAttribute.Clear() CharTermAttribute.Clone() CharTermAttribute.Equals(Object) CharTermAttribute.ToString() CharTermAttribute.ReflectWith(IAttributeReflector) CharTermAttribute.CopyTo(IAttribute) Attribute.ReflectAsString(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Collation.TokenAttributes Assembly : Lucene.Net.ICU.dll Syntax public class ICUCollatedTermAttribute : CharTermAttribute, ICharTermAttribute, ICharSequence, ITermToBytesRefAttribute, IAttribute Constructors | Improve this Doc View Source ICUCollatedTermAttribute(Collator) Create a new ICUCollatedTermAttribute Declaration public ICUCollatedTermAttribute(Collator collator) Parameters Type Name Description ICU4N.Text.Collator collator Collation key generator. Methods | Improve this Doc View Source FillBytesRef() Declaration public override void FillBytesRef() Overrides CharTermAttribute.FillBytesRef() Implements ICharTermAttribute ICharSequence ITermToBytesRefAttribute IAttribute"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.DefaultPassageFormatter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.DefaultPassageFormatter.html",
    "title": "Class DefaultPassageFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultPassageFormatter Creates a formatted snippet from the top passages. The default implementation marks the query terms as bold, and places ellipses between unconnected passages. Inheritance System.Object PassageFormatter DefaultPassageFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class DefaultPassageFormatter : PassageFormatter Constructors | Improve this Doc View Source DefaultPassageFormatter() Creates a new DefaultPassageFormatter with the default tags. Declaration public DefaultPassageFormatter() | Improve this Doc View Source DefaultPassageFormatter(String, String, String, Boolean) Creates a new DefaultPassageFormatter with custom tags. Declaration public DefaultPassageFormatter(string preTag, string postTag, string ellipsis, bool escape) Parameters Type Name Description System.String preTag text which should appear before a highlighted term. System.String postTag text which should appear after a highlighted term. System.String ellipsis text which should be used to connect two unconnected passages. System.Boolean escape true if text should be html-escaped Fields | Improve this Doc View Source m_ellipsis text that will appear between two unconnected passages Declaration protected readonly string m_ellipsis Field Value Type Description System.String | Improve this Doc View Source m_escape true if we should escape for html Declaration protected readonly bool m_escape Field Value Type Description System.Boolean | Improve this Doc View Source m_postTag text that will appear after highlighted terms Declaration protected readonly string m_postTag Field Value Type Description System.String | Improve this Doc View Source m_preTag text that will appear before highlighted terms Declaration protected readonly string m_preTag Field Value Type Description System.String Methods | Improve this Doc View Source Append(StringBuilder, String, Int32, Int32) Appends original text to the response. Declaration protected virtual void Append(StringBuilder dest, string content, int start, int end) Parameters Type Name Description System.Text.StringBuilder dest resulting text, possibly transformed or encoded System.String content original text content System.Int32 start index of the first character in content System.Int32 end index of the character following the last character in content | Improve this Doc View Source Format(Passage[], String) Declaration public override object Format(Passage[] passages, string content) Parameters Type Name Description Passage [] passages System.String content Returns Type Description System.Object Overrides PassageFormatter.Format(Passage[], String)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.WholeBreakIterator.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.WholeBreakIterator.html",
    "title": "Class WholeBreakIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WholeBreakIterator Just produces one single fragment for the entire text Inheritance System.Object ICU4N.Text.BreakIterator WholeBreakIterator Inherited Members ICU4N.Text.BreakIterator.Done ICU4N.Text.BreakIterator.WordNone ICU4N.Text.BreakIterator.WordNoneLimit ICU4N.Text.BreakIterator.WordNumber ICU4N.Text.BreakIterator.WordNumberLimit ICU4N.Text.BreakIterator.WordLetter ICU4N.Text.BreakIterator.WordLetterLimit ICU4N.Text.BreakIterator.WordKana ICU4N.Text.BreakIterator.WordKanaLimit ICU4N.Text.BreakIterator.WordIdeo ICU4N.Text.BreakIterator.WordIdeoLimit ICU4N.Text.BreakIterator.Clone() ICU4N.Text.BreakIterator.GetRuleStatusVec(System.Int32[]) ICU4N.Text.BreakIterator.SetText(System.String) ICU4N.Text.BreakIterator.SetText(System.Text.StringBuilder) ICU4N.Text.BreakIterator.SetText(System.Char[]) ICU4N.Text.BreakIterator.GetWordInstance() ICU4N.Text.BreakIterator.GetWordInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetWordInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.GetLineInstance() ICU4N.Text.BreakIterator.GetLineInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetLineInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.GetCharacterInstance() ICU4N.Text.BreakIterator.GetCharacterInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetCharacterInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.GetSentenceInstance() ICU4N.Text.BreakIterator.GetSentenceInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetSentenceInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.GetTitleInstance() ICU4N.Text.BreakIterator.GetTitleInstance(System.Globalization.CultureInfo) ICU4N.Text.BreakIterator.GetTitleInstance(ICU4N.Util.ULocale) ICU4N.Text.BreakIterator.RegisterInstance(ICU4N.Text.BreakIterator, System.Globalization.CultureInfo, System.Int32) ICU4N.Text.BreakIterator.RegisterInstance(ICU4N.Text.BreakIterator, ICU4N.Util.ULocale, System.Int32) ICU4N.Text.BreakIterator.Unregister(System.Object) ICU4N.Text.BreakIterator.GetAvailableCultures() ICU4N.Text.BreakIterator.GetAvailableULocales() ICU4N.Text.BreakIterator.GetLocale(ICU4N.Util.ULocale.Type) ICU4N.Text.BreakIterator.RuleStatus System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public sealed class WholeBreakIterator : BreakIterator Properties | Improve this Doc View Source Current Declaration public override int Current { get; } Property Value Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Current | Improve this Doc View Source Text Declaration public override CharacterIterator Text { get; } Property Value Type Description ICU4N.Support.Text.CharacterIterator Overrides ICU4N.Text.BreakIterator.Text Methods | Improve this Doc View Source First() Declaration public override int First() Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.First() | Improve this Doc View Source Following(Int32) Declaration public override int Following(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Following(System.Int32) | Improve this Doc View Source IsBoundary(Int32) Declaration public override bool IsBoundary(int offset) Parameters Type Name Description System.Int32 offset Returns Type Description System.Boolean Overrides ICU4N.Text.BreakIterator.IsBoundary(System.Int32) | Improve this Doc View Source Last() Declaration public override int Last() Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Last() | Improve this Doc View Source Next() Declaration public override int Next() Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Next() | Improve this Doc View Source Next(Int32) Declaration public override int Next(int n) Parameters Type Name Description System.Int32 n Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Next(System.Int32) | Improve this Doc View Source Preceding(Int32) Declaration public override int Preceding(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Preceding(System.Int32) | Improve this Doc View Source Previous() Declaration public override int Previous() Returns Type Description System.Int32 Overrides ICU4N.Text.BreakIterator.Previous() | Improve this Doc View Source SetText(CharacterIterator) Declaration public override void SetText(CharacterIterator newText) Parameters Type Name Description ICU4N.Support.Text.CharacterIterator newText Overrides ICU4N.Text.BreakIterator.SetText(ICU4N.Support.Text.CharacterIterator)"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.BreakIteratorBoundaryScanner.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.BreakIteratorBoundaryScanner.html",
    "title": "Class BreakIteratorBoundaryScanner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BreakIteratorBoundaryScanner A IBoundaryScanner implementation that uses ICU4N.Text.BreakIterator to find boundaries in the text. Inheritance System.Object BreakIteratorBoundaryScanner Implements IBoundaryScanner Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.VectorHighlight Assembly : Lucene.Net.ICU.dll Syntax public class BreakIteratorBoundaryScanner : IBoundaryScanner Constructors | Improve this Doc View Source BreakIteratorBoundaryScanner(BreakIterator) Declaration public BreakIteratorBoundaryScanner(BreakIterator bi) Parameters Type Name Description ICU4N.Text.BreakIterator bi Methods | Improve this Doc View Source FindEndOffset(StringBuilder, Int32) Declaration public virtual int FindEndOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 start Returns Type Description System.Int32 | Improve this Doc View Source FindStartOffset(StringBuilder, Int32) Declaration public virtual int FindStartOffset(StringBuilder buffer, int start) Parameters Type Name Description System.Text.StringBuilder buffer System.Int32 start Returns Type Description System.Int32 Implements IBoundaryScanner See Also ICU4N.Text.BreakIterator"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.FixedBitSetCachingWrapperFilter.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.FixedBitSetCachingWrapperFilter.html",
    "title": "Class FixedBitSetCachingWrapperFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedBitSetCachingWrapperFilter A CachingWrapperFilter that caches sets using a FixedBitSet , as required for joins. Inheritance System.Object Filter CachingWrapperFilter FixedBitSetCachingWrapperFilter Inherited Members CachingWrapperFilter.Filter CachingWrapperFilter.CacheImpl(DocIdSetIterator, AtomicReader) CachingWrapperFilter.GetDocIdSet(AtomicReaderContext, IBits) CachingWrapperFilter.ToString() CachingWrapperFilter.Equals(Object) CachingWrapperFilter.GetHashCode() CachingWrapperFilter.EMPTY_DOCIDSET CachingWrapperFilter.GetSizeInBytes() Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class FixedBitSetCachingWrapperFilter : CachingWrapperFilter Constructors | Improve this Doc View Source FixedBitSetCachingWrapperFilter(Filter) Sole constructor, see CachingWrapperFilter(Filter) . Declaration public FixedBitSetCachingWrapperFilter(Filter filter) Parameters Type Name Description Filter filter Methods | Improve this Doc View Source DocIdSetToCache(DocIdSet, AtomicReader) Declaration protected override DocIdSet DocIdSetToCache(DocIdSet docIdSet, AtomicReader reader) Parameters Type Name Description DocIdSet docIdSet AtomicReader reader Returns Type Description DocIdSet Overrides CachingWrapperFilter.DocIdSetToCache(DocIdSet, AtomicReader)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToChildBlockJoinQuery.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToChildBlockJoinQuery.html",
    "title": "Class ToChildBlockJoinQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToChildBlockJoinQuery Just like ToParentBlockJoinQuery , except this query joins in reverse: you provide a Query matching parent documents and it joins down to child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query ToChildBlockJoinQuery Inherited Members Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToChildBlockJoinQuery : Query Constructors | Improve this Doc View Source ToChildBlockJoinQuery(Query, Filter, Boolean) Create a ToChildBlockJoinQuery . Declaration public ToChildBlockJoinQuery(Query parentQuery, Filter parentsFilter, bool doScores) Parameters Type Name Description Query parentQuery Query that matches parent documents Filter parentsFilter Filter (must produce FixedBitSet per-segment, like FixedBitSetCachingWrapperFilter ) identifying the parent documents. System.Boolean doScores True if parent scores should be calculated. Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.html",
    "title": "Class TimeLimitingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimeLimitingCollector The TimeLimitingCollector is used to timeout search requests that take longer than the maximum allowed search time limit. After this time is exceeded, the search thread is stopped by throwing a TimeLimitingCollector.TimeExceededException . Inheritance System.Object TimeLimitingCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TimeLimitingCollector : ICollector Constructors | Improve this Doc View Source TimeLimitingCollector(ICollector, Counter, Int64) Create a TimeLimitingCollector wrapper over another ICollector with a specified timeout. Declaration public TimeLimitingCollector(ICollector collector, Counter clock, long ticksAllowed) Parameters Type Name Description ICollector collector The wrapped ICollector Counter clock The timer clock System.Int64 ticksAllowed Max time allowed for collecting hits after which TimeLimitingCollector.TimeExceededException is thrown Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GlobalCounter Returns the global TimeLimitingCollector.TimerThread 's Counter Invoking this creates may create a new instance of TimeLimitingCollector.TimerThread iff the global TimeLimitingCollector.TimerThread has never been accessed before. The thread returned from this method is started on creation and will be alive unless you stop the TimeLimitingCollector.TimerThread via StopTimer() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static Counter GlobalCounter { get; } Property Value Type Description Counter the global TimerThreads Counter | Improve this Doc View Source GlobalTimerThread Returns the global TimeLimitingCollector.TimerThread . Invoking this creates may create a new instance of TimeLimitingCollector.TimerThread iff the global TimeLimitingCollector.TimerThread has never been accessed before. The thread returned from this method is started on creation and will be alive unless you stop the TimeLimitingCollector.TimerThread via StopTimer() . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static TimeLimitingCollector.TimerThread GlobalTimerThread { get; } Property Value Type Description TimeLimitingCollector.TimerThread the global TimeLimitingCollector.TimerThread | Improve this Doc View Source IsGreedy Checks if this time limited collector is greedy in collecting the last hit. A non greedy collector, upon a timeout, would throw a TimeLimitingCollector.TimeExceededException without allowing the wrapped collector to collect current doc. A greedy one would first allow the wrapped hit collector to collect current doc and only then throw a TimeLimitingCollector.TimeExceededException . Declaration public virtual bool IsGreedy { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Calls Collect(Int32) on the decorated ICollector unless the allowed time has passed, in which case it throws an exception. Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc Exceptions Type Condition TimeLimitingCollector.TimeExceededException If the time allowed has exceeded. | Improve this Doc View Source SetBaseline() Syntactic sugar for SetBaseline(Int64) using Get() on the clock passed to the constructor. Declaration public virtual void SetBaseline() | Improve this Doc View Source SetBaseline(Int64) Sets the baseline for this collector. By default the collectors baseline is initialized once the first reader is passed to the collector. To include operations executed in prior to the actual document collection set the baseline through this method in your prelude. Example usage: // Counter is in the Lucene.Net.Util namespace Counter clock = Counter.NewCounter(true); long baseline = clock.Get(); // ... prepare search TimeLimitingCollector collector = new TimeLimitingCollector(c, clock, numTicks); collector.SetBaseline(baseline); indexSearcher.Search(query, collector); Declaration public virtual void SetBaseline(long clockTime) Parameters Type Name Description System.Int64 clockTime See Also SetBaseline() | Improve this Doc View Source SetCollector(ICollector) This is so the same timer can be used with a multi-phase search process such as grouping. We don't want to create a new TimeLimitingCollector for each phase because that would reset the timer for each phase. Once time is up subsequent phases need to timeout quickly. Declaration public virtual void SetCollector(ICollector collector) Parameters Type Name Description ICollector collector The actual collector performing search functionality. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.Lock.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.Lock.html",
    "title": "Class Lock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lock An interprocess mutex lock. Typical use might look like: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); Inheritance System.Object Lock Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class Lock : IDisposable Fields | Improve this Doc View Source LOCK_OBTAIN_WAIT_FOREVER Pass this value to Obtain(Int64) to try forever to obtain the lock. Declaration public const long LOCK_OBTAIN_WAIT_FOREVER = -1L Field Value Type Description System.Int64 | Improve this Doc View Source LOCK_POLL_INTERVAL How long Obtain(Int64) waits, in milliseconds, in between attempts to acquire the lock. Declaration public static long LOCK_POLL_INTERVAL Field Value Type Description System.Int64 Properties | Improve this Doc View Source FailureReason If a lock obtain called, this failureReason may be set with the \"root cause\" System.Exception as to why the lock was not obtained. Declaration protected Exception FailureReason { get; set; } Property Value Type Description System.Exception Methods | Improve this Doc View Source Dispose() Releases exclusive access. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Releases exclusive access. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source IsLocked() Returns true if the resource is currently locked. Note that one must still call Obtain() before using the resource. Declaration public abstract bool IsLocked() Returns Type Description System.Boolean | Improve this Doc View Source NewAnonymous<T>(Lock, Int32, Func<T>) Creates a new instance with the ability to specify the DoBody() method through the doBody argument Simple example: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); The result of the operation is the value that is returned from doBody (i.e. () => { return \"the result\"; }). The type of determines the return type of the operation. Declaration public static Lock.With<T> NewAnonymous<T>(Lock lock, int lockWaitTimeout, Func<T> doBody) Parameters Type Name Description Lock lock the Lock instance to use System.Int32 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever System.Func <T> doBody a delegate method that Returns Type Description Lock.With <T> The value that is returned from the doBody delegate method (i.e. () => { return theObject; }) Type Parameters Name Description T | Improve this Doc View Source Obtain() Attempts to obtain exclusive access and immediately return upon success or failure. Use Dispose() to release the lock. Declaration public abstract bool Obtain() Returns Type Description System.Boolean true iff exclusive access is obtained | Improve this Doc View Source Obtain(Int64) Attempts to obtain an exclusive lock within amount of time given. Polls once per LOCK_POLL_INTERVAL (currently 1000) milliseconds until lockWaitTimeout is passed. Declaration public bool Obtain(long lockWaitTimeout) Parameters Type Name Description System.Int64 lockWaitTimeout length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever Returns Type Description System.Boolean true if lock was obtained Exceptions Type Condition LockObtainFailedException if lock wait times out System.ArgumentException if lockWaitTimeout is out of bounds System.IO.IOException if Obtain() throws System.IO.IOException Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also MakeLock ( System.String )"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockObtainFailedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockObtainFailedException.html",
    "title": "Class LockObtainFailedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockObtainFailedException This exception is thrown when the write.lock could not be acquired. This happens when a writer tries to open an index that another writer already has open. Inheritance System.Object System.Exception System.IO.IOException LockObtainFailedException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockObtainFailedException : IOException Constructors | Improve this Doc View Source LockObtainFailedException(String) Declaration public LockObtainFailedException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source LockObtainFailedException(String, Exception) Declaration public LockObtainFailedException(string message, Exception ex) Parameters Type Name Description System.String message System.Exception ex Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object) See Also Obtain(Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockReleaseFailedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockReleaseFailedException.html",
    "title": "Class LockReleaseFailedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockReleaseFailedException This exception is thrown when the write.lock could not be released. Inheritance System.Object System.Exception System.IO.IOException LockReleaseFailedException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockReleaseFailedException : IOException Constructors | Improve this Doc View Source LockReleaseFailedException(String) Declaration public LockReleaseFailedException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object) See Also Dispose()"
  },
  "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.MMapIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MMapDirectory.MMapIndexInput.html",
    "title": "Class MMapDirectory.MMapIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MMapDirectory.MMapIndexInput Inheritance System.Object DataInput IndexInput ByteBufferIndexInput MMapDirectory.MMapIndexInput Implements System.IDisposable Inherited Members ByteBufferIndexInput.ReadByte() ByteBufferIndexInput.ReadBytes(Byte[], Int32, Int32) ByteBufferIndexInput.ReadInt16() ByteBufferIndexInput.ReadInt32() ByteBufferIndexInput.ReadInt64() ByteBufferIndexInput.GetFilePointer() ByteBufferIndexInput.Seek(Int64) ByteBufferIndexInput.Length ByteBufferIndexInput.Clone() ByteBufferIndexInput.Slice(String, Int64, Int64) ByteBufferIndexInput.ToString() IndexInput.Dispose() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadVInt32() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class MMapIndexInput : ByteBufferIndexInput, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override sealed void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides ByteBufferIndexInput.Dispose(Boolean) | Improve this Doc View Source FreeBuffer(ByteBuffer) Try to unmap the buffer, this method silently fails if no support for that in the runtime. On Windows, this leads to the fact, that mmapped files cannot be modified or deleted. Declaration protected override void FreeBuffer(ByteBuffer buffer) Parameters Type Name Description ByteBuffer buffer Overrides ByteBufferIndexInput.FreeBuffer(ByteBuffer) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.FixedSizeCollectionException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.FixedSizeCollectionException.html",
    "title": "Class FixedSizeCollectionException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedSizeCollectionException Inheritance System.Object System.Exception FixedSizeCollectionException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class FixedSizeCollectionException : Exception Constructors | Improve this Doc View Source FixedSizeCollectionException() Create a simple exception with no further explanation. Declaration public FixedSizeCollectionException() | Improve this Doc View Source FixedSizeCollectionException(String) Create the exception with an explanation of the reason. Declaration public FixedSizeCollectionException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.HashDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.HashDictionary-2.html",
    "title": "Class HashDictionary<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HashDictionary<K, V> A generic dictionary class based on a hash set class C5.HashSet`1 . Inheritance System.Object EnumerableBase < KeyValuePair <K, V>> CollectionValueBase < KeyValuePair <K, V>> DictionaryBase <K, V> HashDictionary<K, V> Implements IDictionary <K, V> ICollectionValue < KeyValuePair <K, V>> System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> System.Collections.IEnumerable IShowable System.IFormattable Inherited Members DictionaryBase<K, V>.pairs DictionaryBase<K, V>.CollectionChanged DictionaryBase<K, V>.CollectionCleared DictionaryBase<K, V>.ItemsAdded DictionaryBase<K, V>.ItemsRemoved DictionaryBase<K, V>.ListenableEvents DictionaryBase<K, V>.ActiveEvents DictionaryBase<K, V>.EqualityComparer DictionaryBase<K, V>.Add(K, V) DictionaryBase<K, V>.AddAll<L, W>(IEnumerable<KeyValuePair<L, W>>) DictionaryBase<K, V>.Remove(K) DictionaryBase<K, V>.Remove(K, V) DictionaryBase<K, V>.Clear() DictionaryBase<K, V>.ContainsSpeed DictionaryBase<K, V>.Contains(K) DictionaryBase<K, V>.ContainsAll<H>(IEnumerable<H>) DictionaryBase<K, V>.Find(K, V) DictionaryBase<K, V>.Update(K, V) DictionaryBase<K, V>.Update(K, V, V) DictionaryBase<K, V>.FindOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V, V) DictionaryBase<K, V>.Keys DictionaryBase<K, V>.Values DictionaryBase<K, V>.Func DictionaryBase<K, V>.Item[K] DictionaryBase<K, V>.IsReadOnly DictionaryBase<K, V>.Check() DictionaryBase<K, V>.IsEmpty DictionaryBase<K, V>.Count DictionaryBase<K, V>.CountSpeed DictionaryBase<K, V>.Choose() DictionaryBase<K, V>.GetEnumerator() DictionaryBase<K, V>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ListenableEvents CollectionValueBase<KeyValuePair<K, V>>.ActiveEvents CollectionValueBase<KeyValuePair<K, V>>.CollectionChanged CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionChanged() CollectionValueBase<KeyValuePair<K, V>>.CollectionCleared CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<KeyValuePair<K, V>>.ItemsAdded CollectionValueBase<KeyValuePair<K, V>>.raiseItemsAdded(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemsRemoved CollectionValueBase<KeyValuePair<K, V>>.raiseItemsRemoved(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemInserted CollectionValueBase<KeyValuePair<K, V>>.raiseItemInserted(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemRemovedAt CollectionValueBase<KeyValuePair<K, V>>.raiseItemRemovedAt(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForSetThis(Int32, KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForInsert(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAt(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForAdd(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAll(ICollectionValue<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.IsEmpty CollectionValueBase<KeyValuePair<K, V>>.Count CollectionValueBase<KeyValuePair<K, V>>.CountSpeed CollectionValueBase<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) CollectionValueBase<KeyValuePair<K, V>>.ToArray() CollectionValueBase<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Choose() CollectionValueBase<KeyValuePair<K, V>>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString(String, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString() EnumerableBase<KeyValuePair<K, V>>.GetEnumerator() EnumerableBase<KeyValuePair<K, V>>.countItems(IEnumerable<KeyValuePair<K, V>>) EnumerableBase<KeyValuePair<K, V>>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class HashDictionary<K, V> : DictionaryBase<K, V>, IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, IEnumerable<KeyValuePair<K, V>>, IEnumerable, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source HashDictionary(MemoryType) Create a hash dictionary using a default equalityComparer for the keys. Initial capacity of internal table will be 16 entries and threshold for expansion is 66% fill. Declaration public HashDictionary(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType | Improve this Doc View Source HashDictionary(IEqualityComparer<K>, MemoryType) Create a hash dictionary using a custom equalityComparer for the keys. Initial capacity of internal table will be 16 entries and threshold for expansion is 66% fill. Declaration public HashDictionary(IEqualityComparer<K> keyequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <K> keyequalityComparer The external key equalitySCG.Comparer MemoryType memoryType The memory type of the enumerator used to iterate the collection | Improve this Doc View Source HashDictionary(Int32, Double, IEqualityComparer<K>, MemoryType) Create a hash dictionary using a custom equalityComparer and prescribing the initial size of the dictionary and a non-default threshold for internal table expansion. Declaration public HashDictionary(int capacity, double fill, IEqualityComparer<K> keyequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Int32 capacity The initial capacity. Will be rounded upwards to nearest power of 2, at least 16. System.Double fill The expansion threshold. Must be between 10% and 90%. System.Collections.Generic.IEqualityComparer <K> keyequalityComparer The external key equalitySCG.Comparer MemoryType memoryType The memory type of the enumerator used to iterate the collection Implements IDictionary<K, V> ICollectionValue<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable IShowable System.IFormattable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.HashSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.HashSet-1.html",
    "title": "Class HashSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HashSet<T> A set collection class based on linear hashing Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> HashSet<T> Implements ICollection <T> IExtensible <T> ICollectionValue <T> IShowable System.IFormattable System.Collections.Generic.ICollection <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.countItems(IEnumerable<T>) EnumerableBase<T>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class HashSet<T> : CollectionBase<T>, ICollection<T>, IExtensible<T>, ICollectionValue<T>, IShowable, IFormattable, ICollection<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Constructors | Improve this Doc View Source HashSet() Declaration public HashSet() | Improve this Doc View Source HashSet(MemoryType) Create a hash set with natural item equalityComparer and default fill threshold (66%) and initial table size (16). Declaration public HashSet(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType | Improve this Doc View Source HashSet(IEqualityComparer<T>, MemoryType) Create a hash set with external item equalityComparer and default fill threshold (66%) and initial table size (16). Declaration public HashSet(IEqualityComparer<T> itemequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The external item equalitySCG.Comparer MemoryType memoryType | Improve this Doc View Source HashSet(Int32, IEqualityComparer<T>, MemoryType) Create a hash set with external item equalityComparer and default fill threshold (66%) Declaration public HashSet(int capacity, IEqualityComparer<T> itemequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Int32 capacity Initial table size (rounded to power of 2, at least 16) System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The external item equalitySCG.Comparer MemoryType memoryType | Improve this Doc View Source HashSet(Int32, Double, IEqualityComparer<T>, MemoryType) Create a hash set with external item equalityComparer. Declaration public HashSet(int capacity, double fill, IEqualityComparer<T> itemequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Int32 capacity Initial table size (rounded to power of 2, at least 16) System.Double fill Fill threshold (in range 10% to 90%) System.Collections.Generic.IEqualityComparer <T> itemequalityComparer The external item equalitySCG.Comparer MemoryType memoryType Properties | Improve this Doc View Source AllowsDuplicates Report if this is a set collection. Declaration public virtual bool AllowsDuplicates { get; } Property Value Type Description System.Boolean Always false | Improve this Doc View Source ContainsSpeed The complexity of the Contains operation Declaration public virtual Speed ContainsSpeed { get; } Property Value Type Description Speed Always returns Speed.Constant | Improve this Doc View Source DuplicatesByCounting By convention this is true for any collection with set semantics. Declaration public virtual bool DuplicatesByCounting { get; } Property Value Type Description System.Boolean True if only one representative of a group of equal items is kept in the collection together with the total count. | Improve this Doc View Source Features Show which implementation features was chosen at compilation time Declaration public static HashSet<T>.Feature Features { get; } Property Value Type Description HashSet.Feature <> | Improve this Doc View Source ListenableEvents Declaration public override EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.ListenableEvents Methods | Improve this Doc View Source Add(T) Add an item to this set. Declaration public virtual bool Add(T item) Parameters Type Name Description T item The item to add. Returns Type Description System.Boolean True if item was added (i.e. not found) | Improve this Doc View Source AddAll(IEnumerable<T>) Add the elements from another collection with a more specialized item type to this collection. Since this collection has set semantics, only items not already in the collection will be added. Declaration public virtual void AddAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to add | Improve this Doc View Source BucketCostDistribution() Produce statistics on distribution of bucket sizes. Current implementation is incomplete. Declaration public ISortedDictionary<int, int> BucketCostDistribution() Returns Type Description ISortedDictionary < System.Int32 , System.Int32 > Histogram data. | Improve this Doc View Source Check() Test internal structure of data (invariants) Declaration public virtual bool Check() Returns Type Description System.Boolean True if pass | Improve this Doc View Source Choose() Choose some item of this collection. Declaration public override T Choose() Returns Type Description T Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.Choose() Exceptions Type Condition NoSuchItemException if collection is empty. | Improve this Doc View Source Clear() Remove all items from the set, resetting internal table to initial size. Declaration public virtual void Clear() | Improve this Doc View Source Contains(T) Check if an item is in the set Declaration public virtual bool Contains(T item) Parameters Type Name Description T item The item to look for Returns Type Description System.Boolean True if set contains item | Improve this Doc View Source ContainsAll(IEnumerable<T>) Check if all items in a supplied collection is in this set (ignoring multiplicities). Declaration public virtual bool ContainsAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to look for. Returns Type Description System.Boolean True if all items are found. | Improve this Doc View Source ContainsCount(T) Count the number of times an item is in this set (either 0 or 1). Declaration public virtual int ContainsCount(T item) Parameters Type Name Description T item The item to look for. Returns Type Description System.Int32 1 if item is in set, 0 else | Improve this Doc View Source Find(ref T) Check if an item (collection equal to a given one) is in the set and if so report the actual item object found. Declaration public virtual bool Find(ref T item) Parameters Type Name Description T item On entry, the item to look for. On exit the item found, if any Returns Type Description System.Boolean True if set contains item | Improve this Doc View Source FindOrAdd(ref T) Check if an item (collection equal to a given one) is in the set. If found, report the actual item object in the set, else add the supplied one. Declaration public virtual bool FindOrAdd(ref T item) Parameters Type Name Description T item On entry, the item to look for or add. On exit the actual object found, if any. Returns Type Description System.Boolean True if item was found | Improve this Doc View Source GetEnumerator() Create an enumerator for this set. Declaration public override IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> The enumerator Overrides Lucene.Net.Support.C5.EnumerableBase<T>.GetEnumerator() | Improve this Doc View Source ItemMultiplicities() Declaration public virtual ICollectionValue<KeyValuePair<T, int>> ItemMultiplicities() Returns Type Description ICollectionValue < KeyValuePair <T, System.Int32 >> | Improve this Doc View Source Remove(T) Remove an item from the set Declaration public virtual bool Remove(T item) Parameters Type Name Description T item The item to remove Returns Type Description System.Boolean True if item was (found and) removed | Improve this Doc View Source Remove(T, out T) Remove an item from the set, reporting the actual matching item object. Declaration public virtual bool Remove(T item, out T removeditem) Parameters Type Name Description T item The value to remove. T removeditem The removed value. Returns Type Description System.Boolean True if item was found. | Improve this Doc View Source RemoveAll(IEnumerable<T>) Remove all items in a supplied collection from this set. Declaration public virtual void RemoveAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to remove. | Improve this Doc View Source RemoveAllCopies(T) Remove all (at most 1) copies of item from this set. Declaration public virtual void RemoveAllCopies(T item) Parameters Type Name Description T item The item to remove | Improve this Doc View Source RetainAll(IEnumerable<T>) Remove all items not in a supplied collection from this set. Declaration public virtual void RetainAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to retain | Improve this Doc View Source ToArray() Create an array containing all items in this set (in enumeration order). Declaration public override T[] ToArray() Returns Type Description T[] The array Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.ToArray() | Improve this Doc View Source UniqueItems() Declaration public virtual ICollectionValue<T> UniqueItems() Returns Type Description ICollectionValue <T> | Improve this Doc View Source Update(T) Check if an item (collection equal to a given one) is in the set and if so replace the item object in the set with the supplied one. Declaration public virtual bool Update(T item) Parameters Type Name Description T item The item object to update with Returns Type Description System.Boolean True if item was found (and updated) | Improve this Doc View Source Update(T, out T) Check if an item (collection equal to a given one) is in the set and if so replace the item object in the set with the supplied one. Declaration public virtual bool Update(T item, out T olditem) Parameters Type Name Description T item The item object to update with T olditem Returns Type Description System.Boolean True if item was found (and updated) | Improve this Doc View Source UpdateOrAdd(T) Check if an item (collection equal to a supplied one) is in the set and if so replace the item object in the set with the supplied one; else add the supplied one. Declaration public virtual bool UpdateOrAdd(T item) Parameters Type Name Description T item The item to look for and update or add Returns Type Description System.Boolean True if item was updated | Improve this Doc View Source UpdateOrAdd(T, out T) Check if an item (collection equal to a supplied one) is in the set and if so replace the item object in the set with the supplied one; else add the supplied one. Declaration public virtual bool UpdateOrAdd(T item, out T olditem) Parameters Type Name Description T item The item to look for and update or add T olditem Returns Type Description System.Boolean True if item was updated Explicit Interface Implementations | Improve this Doc View Source ICollection<T>.Add(T) Add an item to this set. Declaration void ICollection<T>.Add(T item) Parameters Type Name Description T item The item to add. Implements ICollection<T> IExtensible<T> ICollectionValue<T> IShowable System.IFormattable System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ICollection-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ICollection-1.html",
    "title": "Interface ICollection<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICollection<T> The simplest interface of a main stream generic collection with lookup, insertion and removal operations. Inherited Members IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(IEnumerable<T>) IExtensible<T>.Check() ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ICollection<T> : IExtensible<T>, ICollectionValue<T>, IShowable, IFormattable, ICollection<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source ContainsSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). See C5.Speed for the set of symbols. Declaration Speed ContainsSpeed { get; } Property Value Type Description Speed A characterization of the speed of lookup operations ( Contains() etc.) of the implementation of this collection. | Improve this Doc View Source Count Declaration int Count { get; } Property Value Type Description System.Int32 The number of items in this collection | Improve this Doc View Source IsReadOnly If true any call of an updating operation will throw an ReadOnlyCollectionException Declaration bool IsReadOnly { get; } Property Value Type Description System.Boolean True if this collection is read-only. Methods | Improve this Doc View Source Add(T) Add an item to this collection if possible. If this collection has set semantics, the item will be added if not already in the collection. If bag semantics, the item will always be added. Declaration bool Add(T item) Parameters Type Name Description T item The item to add. Returns Type Description System.Boolean True if item was added. | Improve this Doc View Source Clear() Remove all items from this collection. Declaration void Clear() | Improve this Doc View Source Contains(T) Check if this collection contains (an item equivalent to according to the itemequalityComparer) a particular value. Declaration bool Contains(T item) Parameters Type Name Description T item The value to check for. Returns Type Description System.Boolean True if the items is in this collection. | Improve this Doc View Source ContainsAll(IEnumerable<T>) Check whether this collection contains all the values in another collection. If this collection has bag semantics ( AllowsDuplicates==true ) the check is made with respect to multiplicities, else multiplicities are not taken into account. Declaration bool ContainsAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The Returns Type Description System.Boolean True if all values in items is in this collection. | Improve this Doc View Source ContainsCount(T) Count the number of items of the collection equal to a particular value. Returns 0 if and only if the value is not in the collection. Declaration int ContainsCount(T item) Parameters Type Name Description T item The value to count. Returns Type Description System.Int32 The number of copies found. | Improve this Doc View Source CopyTo(T[], Int32) Copy the items of this collection to a contiguous part of an array. Declaration void CopyTo(T[] array, int index) Parameters Type Name Description T[] array The array to copy to System.Int32 index The index at which to copy the first item | Improve this Doc View Source Find(ref T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, return in the ref argument (a binary copy of) the actual value found. Declaration bool Find(ref T item) Parameters Type Name Description T item The value to look for. Returns Type Description System.Boolean True if the items is in this collection. | Improve this Doc View Source FindOrAdd(ref T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, return in the ref argument (a binary copy of) the actual value found. Else, add the item to the collection. Declaration bool FindOrAdd(ref T item) Parameters Type Name Description T item The value to look for. Returns Type Description System.Boolean True if the item was found (hence not added). | Improve this Doc View Source GetUnsequencedHashCode() The unordered collection hashcode is defined as the sum of h(hashcode(item)) over the items of the collection, where the function h is a function from int to int of the form t -> (a0*t+b0)^(a1*t+b1)^(a2*t+b2) , where the ax and bx are the same for all collection classes. The current implementation uses fixed values for the ax and bx, specified as constants in the code. Declaration int GetUnsequencedHashCode() Returns Type Description System.Int32 The unordered hashcode of this collection. | Improve this Doc View Source ItemMultiplicities() Declaration ICollectionValue<KeyValuePair<T, int>> ItemMultiplicities() Returns Type Description ICollectionValue < KeyValuePair <T, System.Int32 >> | Improve this Doc View Source Remove(T) Remove a particular item from this collection. If the collection has bag semantics only one copy equivalent to the supplied item is removed. Declaration bool Remove(T item) Parameters Type Name Description T item The value to remove. Returns Type Description System.Boolean True if the item was found (and removed). | Improve this Doc View Source Remove(T, out T) Remove a particular item from this collection if found. If the collection has bag semantics only one copy equivalent to the supplied item is removed, which one is implementation dependent. If an item was removed, report a binary copy of the actual item removed in the argument. Declaration bool Remove(T item, out T removeditem) Parameters Type Name Description T item The value to remove. T removeditem The value removed if any. Returns Type Description System.Boolean True if the item was found (and removed). | Improve this Doc View Source RemoveAll(IEnumerable<T>) Remove all items in another collection from this one. If this collection has bag semantics, take multiplicities into account. Declaration void RemoveAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to remove. | Improve this Doc View Source RemoveAllCopies(T) Remove all items equivalent to a given value. Declaration void RemoveAllCopies(T item) Parameters Type Name Description T item The value to remove. | Improve this Doc View Source RetainAll(IEnumerable<T>) Remove all items not in some other collection from this one. If this collection has bag semantics, take multiplicities into account. Declaration void RetainAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to retain. | Improve this Doc View Source UniqueItems() Declaration ICollectionValue<T> UniqueItems() Returns Type Description ICollectionValue <T> | Improve this Doc View Source UnsequencedEquals(ICollection<T>) Compare the contents of this collection to another one without regards to the sequence order. The comparison will use this collection's itemequalityComparer to compare individual items. Declaration bool UnsequencedEquals(ICollection<T> otherCollection) Parameters Type Name Description ICollection <T> otherCollection The collection to compare to. Returns Type Description System.Boolean True if this collection and that contains the same items. | Improve this Doc View Source Update(T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection with a (binary copy of) the supplied value. If the collection has bag semantics, it depends on the value of DuplicatesByCounting if this updates all equivalent copies in the collection or just one. Declaration bool Update(T item) Parameters Type Name Description T item Value to update. Returns Type Description System.Boolean True if the item was found and hence updated. | Improve this Doc View Source Update(T, out T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection with a (binary copy of) the supplied value. If the collection has bag semantics, it depends on the value of DuplicatesByCounting if this updates all equivalent copies in the collection or just one. Declaration bool Update(T item, out T olditem) Parameters Type Name Description T item Value to update. T olditem On output the olditem, if found. Returns Type Description System.Boolean True if the item was found and hence updated. | Improve this Doc View Source UpdateOrAdd(T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection to with a binary copy of the supplied value; else add the value to the collection. Declaration bool UpdateOrAdd(T item) Parameters Type Name Description T item Value to add or update. Returns Type Description System.Boolean True if the item was found and updated (hence not added). | Improve this Doc View Source UpdateOrAdd(T, out T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection to with a binary copy of the supplied value; else add the value to the collection. Declaration bool UpdateOrAdd(T item, out T olditem) Parameters Type Name Description T item Value to add or update. T olditem On output the olditem, if found. Returns Type Description System.Boolean True if the item was found and updated (hence not added). Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ICollectionValue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ICollectionValue-1.html",
    "title": "Interface ICollectionValue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICollectionValue<T> A generic collection that may be enumerated and can answer efficiently how many items it contains. Like IEnumerable<T> , this interface does not prescribe any operations to initialize or update the collection. The main usage for this interface is to be the return type of query operations on generic collection. Inherited Members System.Collections.Generic.IEnumerable<T>.GetEnumerator() IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface ICollectionValue<T> : IEnumerable<T>, IEnumerable, IShowable, IFormattable Type Parameters Name Description T Properties | Improve this Doc View Source ActiveEvents A flag bitmap of the events currently subscribed to by this collection. Declaration EventTypeEnum ActiveEvents { get; } Property Value Type Description EventTypeEnum | Improve this Doc View Source Count Declaration int Count { get; } Property Value Type Description System.Int32 The number of items in this collection | Improve this Doc View Source CountSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). Declaration Speed CountSpeed { get; } Property Value Type Description Speed A characterization of the speed of the Count property in this collection. | Improve this Doc View Source IsEmpty Declaration bool IsEmpty { get; } Property Value Type Description System.Boolean True if this collection is empty. | Improve this Doc View Source ListenableEvents A flag bitmap of the events subscribable to by this collection. Declaration EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Methods | Improve this Doc View Source All(Func<T, Boolean>) Check if all items in this collection satisfies a specific predicate. Declaration bool All(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate Returns Type Description System.Boolean True if all items satisfies the predicate | Improve this Doc View Source Apply(Action<T>) Apply a delegate to all items of this collection. Declaration void Apply(Action<T> action) Parameters Type Name Description System.Action <T> action The delegate to apply | Improve this Doc View Source Choose() Choose some item of this collection. Implementations must assure that the item returned may be efficiently removed. Implementors may decide to implement this method in a way such that repeated calls do not necessarily give the same result, i.e. so that the result of the following test is undetermined: coll.Choose() == coll.Choose() Declaration T Choose() Returns Type Description T Exceptions Type Condition NoSuchItemException if collection is empty. | Improve this Doc View Source CopyTo(T[], Int32) Copy the items of this collection to a contiguous part of an array. Declaration void CopyTo(T[] array, int index) Parameters Type Name Description T[] array The array to copy to System.Int32 index The index at which to copy the first item | Improve this Doc View Source Exists(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection. Declaration bool Exists(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate Returns Type Description System.Boolean True is such an item exists | Improve this Doc View Source Filter(Func<T, Boolean>) Create an enumerable, enumerating the items of this collection that satisfies a certain condition. Declaration IEnumerable<T> Filter(Func<T, bool> filter) Parameters Type Name Description System.Func <T, System.Boolean > filter The T->bool filter delegate defining the condition Returns Type Description System.Collections.Generic.IEnumerable <T> The filtered enumerable | Improve this Doc View Source Find(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration bool Find(Func<T, bool> predicate, out T item) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists | Improve this Doc View Source ToArray() Create an array with the items of this collection (in the same order as an enumerator would output them). Declaration T[] ToArray() Returns Type Description T[] The array Events | Improve this Doc View Source CollectionChanged The change event. Will be raised for every change operation on the collection. Declaration event CollectionChangedHandler<T> CollectionChanged Event Type Type Description CollectionChangedHandler <T> | Improve this Doc View Source CollectionCleared The change event. Will be raised for every clear operation on the collection. Declaration event CollectionClearedHandler<T> CollectionCleared Event Type Type Description CollectionClearedHandler <T> | Improve this Doc View Source ItemInserted The item inserted event. Will be raised for every individual insertion to the collection. Declaration event ItemInsertedHandler<T> ItemInserted Event Type Type Description ItemInsertedHandler <T> | Improve this Doc View Source ItemRemovedAt The item removed at event. Will be raised for every individual removal at from the collection. Declaration event ItemRemovedAtHandler<T> ItemRemovedAt Event Type Type Description ItemRemovedAtHandler <T> | Improve this Doc View Source ItemsAdded The item added event. Will be raised for every individual addition to the collection. Declaration event ItemsAddedHandler<T> ItemsAdded Event Type Type Description ItemsAddedHandler <T> | Improve this Doc View Source ItemsRemoved The item removed event. Will be raised for every individual removal from the collection. Declaration event ItemsRemovedHandler<T> ItemsRemoved Event Type Type Description ItemsRemovedHandler <T> Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.SortedDictionaryBase-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.SortedDictionaryBase-2.html",
    "title": "Class SortedDictionaryBase<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedDictionaryBase<K, V> A base class for implementing a sorted dictionary based on a sorted set collection implementation. See the source code for C5.TreeDictionary`2 for an example Inheritance System.Object EnumerableBase < KeyValuePair <K, V>> CollectionValueBase < KeyValuePair <K, V>> DictionaryBase <K, V> SortedDictionaryBase<K, V> TreeDictionary<K, V> Implements ISortedDictionary <K, V> IDictionary <K, V> ICollectionValue < KeyValuePair <K, V>> System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> System.Collections.IEnumerable IShowable System.IFormattable Inherited Members DictionaryBase<K, V>.pairs DictionaryBase<K, V>.CollectionChanged DictionaryBase<K, V>.CollectionCleared DictionaryBase<K, V>.ItemsAdded DictionaryBase<K, V>.ItemsRemoved DictionaryBase<K, V>.ListenableEvents DictionaryBase<K, V>.ActiveEvents DictionaryBase<K, V>.EqualityComparer DictionaryBase<K, V>.Add(K, V) DictionaryBase<K, V>.AddAll<L, W>(IEnumerable<KeyValuePair<L, W>>) DictionaryBase<K, V>.Remove(K) DictionaryBase<K, V>.Remove(K, V) DictionaryBase<K, V>.Clear() DictionaryBase<K, V>.ContainsSpeed DictionaryBase<K, V>.Contains(K) DictionaryBase<K, V>.ContainsAll<H>(IEnumerable<H>) DictionaryBase<K, V>.Find(K, V) DictionaryBase<K, V>.Update(K, V) DictionaryBase<K, V>.Update(K, V, V) DictionaryBase<K, V>.FindOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V, V) DictionaryBase<K, V>.Keys DictionaryBase<K, V>.Values DictionaryBase<K, V>.Func DictionaryBase<K, V>.Item[K] DictionaryBase<K, V>.IsReadOnly DictionaryBase<K, V>.Check() DictionaryBase<K, V>.IsEmpty DictionaryBase<K, V>.Count DictionaryBase<K, V>.CountSpeed DictionaryBase<K, V>.Choose() DictionaryBase<K, V>.GetEnumerator() DictionaryBase<K, V>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ListenableEvents CollectionValueBase<KeyValuePair<K, V>>.ActiveEvents CollectionValueBase<KeyValuePair<K, V>>.CollectionChanged CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionChanged() CollectionValueBase<KeyValuePair<K, V>>.CollectionCleared CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<KeyValuePair<K, V>>.ItemsAdded CollectionValueBase<KeyValuePair<K, V>>.raiseItemsAdded(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemsRemoved CollectionValueBase<KeyValuePair<K, V>>.raiseItemsRemoved(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemInserted CollectionValueBase<KeyValuePair<K, V>>.raiseItemInserted(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemRemovedAt CollectionValueBase<KeyValuePair<K, V>>.raiseItemRemovedAt(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForSetThis(Int32, KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForInsert(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAt(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForAdd(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAll(ICollectionValue<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.IsEmpty CollectionValueBase<KeyValuePair<K, V>>.Count CollectionValueBase<KeyValuePair<K, V>>.CountSpeed CollectionValueBase<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) CollectionValueBase<KeyValuePair<K, V>>.ToArray() CollectionValueBase<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Choose() CollectionValueBase<KeyValuePair<K, V>>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString(String, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString() EnumerableBase<KeyValuePair<K, V>>.GetEnumerator() EnumerableBase<KeyValuePair<K, V>>.countItems(IEnumerable<KeyValuePair<K, V>>) EnumerableBase<KeyValuePair<K, V>>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class SortedDictionaryBase<K, V> : DictionaryBase<K, V>, ISortedDictionary<K, V>, IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, IEnumerable<KeyValuePair<K, V>>, IEnumerable, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source SortedDictionaryBase(IComparer<K>, IEqualityComparer<K>, MemoryType) Declaration protected SortedDictionaryBase(IComparer<K> keycomparer, IEqualityComparer<K> keyequalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IComparer <K> keycomparer System.Collections.Generic.IEqualityComparer <K> keyequalityComparer MemoryType memoryType The memory type of the enumerator used to iterate the collection. Fields | Improve this Doc View Source sortedpairs Declaration protected ISorted<KeyValuePair<K, V>> sortedpairs Field Value Type Description ISorted < KeyValuePair <K, V>> Properties | Improve this Doc View Source Comparer The key comparer used by this dictionary. Declaration public IComparer<K> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <K> | Improve this Doc View Source Keys Declaration public ISorted<K> Keys { get; } Property Value Type Description ISorted <K> Methods | Improve this Doc View Source AddSorted(IEnumerable<KeyValuePair<K, V>>) Declaration public void AddSorted(IEnumerable<KeyValuePair<K, V>> items) Parameters Type Name Description System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> items | Improve this Doc View Source Cut(IComparable<K>, out KeyValuePair<K, V>, out Boolean, out KeyValuePair<K, V>, out Boolean) Declaration public bool Cut(IComparable<K> cutter, out KeyValuePair<K, V> lowEntry, out bool lowIsValid, out KeyValuePair<K, V> highEntry, out bool highIsValid) Parameters Type Name Description System.IComparable <K> cutter KeyValuePair <K, V> lowEntry System.Boolean lowIsValid KeyValuePair <K, V> highEntry System.Boolean highIsValid Returns Type Description System.Boolean | Improve this Doc View Source DeleteMax() Declaration public KeyValuePair<K, V> DeleteMax() Returns Type Description KeyValuePair <K, V> | Improve this Doc View Source DeleteMin() Declaration public KeyValuePair<K, V> DeleteMin() Returns Type Description KeyValuePair <K, V> | Improve this Doc View Source FindMax() Declaration public KeyValuePair<K, V> FindMax() Returns Type Description KeyValuePair <K, V> | Improve this Doc View Source FindMin() Declaration public KeyValuePair<K, V> FindMin() Returns Type Description KeyValuePair <K, V> | Improve this Doc View Source Predecessor(K) Get the entry in the dictionary whose key is the predecessor of the specified key. Declaration public KeyValuePair<K, V> Predecessor(K key) Parameters Type Name Description K key The key Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException | Improve this Doc View Source RangeAll() Declaration public IDirectedCollectionValue<KeyValuePair<K, V>> RangeAll() Returns Type Description IDirectedCollectionValue < KeyValuePair <K, V>> | Improve this Doc View Source RangeFrom(K) Declaration public IDirectedEnumerable<KeyValuePair<K, V>> RangeFrom(K bot) Parameters Type Name Description K bot Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> | Improve this Doc View Source RangeFromTo(K, K) Declaration public IDirectedEnumerable<KeyValuePair<K, V>> RangeFromTo(K bot, K top) Parameters Type Name Description K bot K top Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> | Improve this Doc View Source RangeTo(K) Declaration public IDirectedEnumerable<KeyValuePair<K, V>> RangeTo(K top) Parameters Type Name Description K top Returns Type Description IDirectedEnumerable < KeyValuePair <K, V>> | Improve this Doc View Source RemoveRangeFrom(K) Declaration public void RemoveRangeFrom(K lowKey) Parameters Type Name Description K lowKey | Improve this Doc View Source RemoveRangeFromTo(K, K) Declaration public void RemoveRangeFromTo(K lowKey, K highKey) Parameters Type Name Description K lowKey K highKey | Improve this Doc View Source RemoveRangeTo(K) Declaration public void RemoveRangeTo(K highKey) Parameters Type Name Description K highKey | Improve this Doc View Source Show(StringBuilder, ref Int32, IFormatProvider) Declaration public override bool Show(StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest System.IFormatProvider formatProvider Returns Type Description System.Boolean Overrides Lucene.Net.Support.C5.DictionaryBase<K, V>.Show(System.Text.StringBuilder, System.Int32, System.IFormatProvider) | Improve this Doc View Source Successor(K) Get the entry in the dictionary whose key is the successor of the specified key. Declaration public KeyValuePair<K, V> Successor(K key) Parameters Type Name Description K key The key Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException | Improve this Doc View Source TryPredecessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the predecessor of the specified key. Declaration public bool TryPredecessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The predecessor, if any Returns Type Description System.Boolean True if key has a predecessor | Improve this Doc View Source TrySuccessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the successor of the specified key. Declaration public bool TrySuccessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The successor, if any Returns Type Description System.Boolean True if the key has a successor | Improve this Doc View Source TryWeakPredecessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the weak predecessor of the specified key. Declaration public bool TryWeakPredecessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The predecessor, if any Returns Type Description System.Boolean True if key has a weak predecessor | Improve this Doc View Source TryWeakSuccessor(K, out KeyValuePair<K, V>) Find the entry in the dictionary whose key is the weak successor of the specified key. Declaration public bool TryWeakSuccessor(K key, out KeyValuePair<K, V> res) Parameters Type Name Description K key The key KeyValuePair <K, V> res The weak successor, if any Returns Type Description System.Boolean True if the key has a weak successor | Improve this Doc View Source WeakPredecessor(K) Get the entry in the dictionary whose key is the weak predecessor of the specified key. Declaration public KeyValuePair<K, V> WeakPredecessor(K key) Parameters Type Name Description K key The key Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException | Improve this Doc View Source WeakSuccessor(K) Get the entry in the dictionary whose key is the weak successor of the specified key. Declaration public KeyValuePair<K, V> WeakSuccessor(K key) Parameters Type Name Description K key The key Returns Type Description KeyValuePair <K, V> The entry Exceptions Type Condition NoSuchItemException Implements ISortedDictionary<K, V> IDictionary<K, V> ICollectionValue<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable IShowable System.IFormattable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.BlockTermsWriter.html",
    "title": "Class BlockTermsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockTermsWriter Writes terms dict, block-encoding (column stride) each term's metadata for each set of terms between two index terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTermsWriter Implements System.IDisposable Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class BlockTermsWriter : FieldsConsumer, IDisposable Constructors | Improve this Doc View Source BlockTermsWriter(TermsIndexWriterBase, SegmentWriteState, PostingsWriterBase) Declaration public BlockTermsWriter(TermsIndexWriterBase termsIndexWriter, SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description TermsIndexWriterBase termsIndexWriter SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput | Improve this Doc View Source TERMS_EXTENSION Extension of terms file Declaration public static readonly string TERMS_EXTENSION Field Value Type Description System.String | Improve this Doc View Source VERSION_APPEND_ONLY Declaration public static readonly int VERSION_APPEND_ONLY Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CHECKSUM Declaration public static readonly int VERSION_CHECKSUM Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_META_ARRAY Declaration public static readonly int VERSION_META_ARRAY Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexReader.html",
    "title": "Class FixedGapTermsIndexReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedGapTermsIndexReader TermsIndexReaderBase for simple every Nth terms indexes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase FixedGapTermsIndexReader Implements System.IDisposable Inherited Members TermsIndexReaderBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class FixedGapTermsIndexReader : TermsIndexReaderBase, IDisposable Constructors | Improve this Doc View Source FixedGapTermsIndexReader(Directory, FieldInfos, String, Int32, IComparer<BytesRef>, String, IOContext) Declaration public FixedGapTermsIndexReader(Directory dir, FieldInfos fieldInfos, string segment, int indexDivisor, IComparer<BytesRef> termComp, string segmentSuffix, IOContext context) Parameters Type Name Description Directory dir FieldInfos fieldInfos System.String segment System.Int32 indexDivisor System.Collections.Generic.IComparer < BytesRef > termComp System.String segmentSuffix IOContext context Properties | Improve this Doc View Source Divisor Declaration public override int Divisor { get; } Property Value Type Description System.Int32 Overrides TermsIndexReaderBase.Divisor | Improve this Doc View Source SupportsOrd Declaration public override bool SupportsOrd { get; } Property Value Type Description System.Boolean Overrides TermsIndexReaderBase.SupportsOrd Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexReaderBase.Dispose(Boolean) | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public override TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum Overrides TermsIndexReaderBase.GetFieldEnum(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermsIndexReaderBase.RamBytesUsed() Implements System.IDisposable See Also FixedGapTermsIndexWriter"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.FixedGapTermsIndexWriter.html",
    "title": "Class FixedGapTermsIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedGapTermsIndexWriter Selects every Nth term as and index term, and hold term bytes (mostly) fully expanded in memory. This terms index supports seeking by ord. See VariableGapTermsIndexWriter for a more memory efficient terms index that does not support seeking by ord. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexWriterBase FixedGapTermsIndexWriter Implements System.IDisposable Inherited Members TermsIndexWriterBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class FixedGapTermsIndexWriter : TermsIndexWriterBase, IDisposable Constructors | Improve this Doc View Source FixedGapTermsIndexWriter(SegmentWriteState) Declaration public FixedGapTermsIndexWriter(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public override TermsIndexWriterBase.FieldWriter AddField(FieldInfo field, long termsFilePointer) Parameters Type Name Description FieldInfo field System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter Overrides TermsIndexWriterBase.AddField(FieldInfo, Int64) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexWriterBase.Dispose(Boolean) | Improve this Doc View Source IndexedTermPrefixLength(BytesRef, BytesRef) NOTE: if your codec does not sort in unicode code point order, you must override this method, to simply return indexedTerm.Length . Declaration protected virtual int IndexedTermPrefixLength(BytesRef priorTerm, BytesRef indexedTerm) Parameters Type Name Description BytesRef priorTerm BytesRef indexedTerm Returns Type Description System.Int32 Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.html",
    "title": "Class TermsIndexReaderBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsIndexReaderBase BlockTermsReader interacts with an instance of this class to manage its terms index. The writer must accept indexed terms (many pairs of BytesRef text + long fileOffset), and then this reader must be able to retrieve the nearest index term to a provided term text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase FixedGapTermsIndexReader VariableGapTermsIndexReader Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class TermsIndexReaderBase : IDisposable Properties | Improve this Doc View Source Divisor Declaration public abstract int Divisor { get; } Property Value Type Description System.Int32 | Improve this Doc View Source SupportsOrd Declaration public abstract bool SupportsOrd { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public abstract TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.IDisposable"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.AllScorer.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.AllScorer.html",
    "title": "Class FunctionQuery.AllScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionQuery.AllScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer FunctionQuery.AllScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax protected class AllScorer : Scorer Constructors | Improve this Doc View Source AllScorer(FunctionQuery, AtomicReaderContext, IBits, FunctionQuery.FunctionWeight, Single) Declaration public AllScorer(FunctionQuery outerInstance, AtomicReaderContext context, IBits acceptDocs, FunctionQuery.FunctionWeight w, float qWeight) Parameters Type Name Description FunctionQuery outerInstance AtomicReaderContext context IBits acceptDocs FunctionQuery.FunctionWeight w System.Single qWeight Exceptions Type Condition System.IO.IOException Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source Explain(Int32) Declaration public virtual Explanation Explain(int d) Parameters Type Name Description System.Int32 d Returns Type Description Explanation | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.FunctionWeight.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.FunctionWeight.html",
    "title": "Class FunctionQuery.FunctionWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionQuery.FunctionWeight Inheritance System.Object Weight FunctionQuery.FunctionWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax protected class FunctionWeight : Weight Constructors | Improve this Doc View Source FunctionWeight(FunctionQuery, IndexSearcher) Declaration public FunctionWeight(FunctionQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description FunctionQuery outerInstance IndexSearcher searcher Fields | Improve this Doc View Source m_context Declaration protected readonly IDictionary m_context Field Value Type Description System.Collections.IDictionary | Improve this Doc View Source m_queryNorm Declaration protected float m_queryNorm Field Value Type Description System.Single | Improve this Doc View Source m_queryWeight Declaration protected float m_queryWeight Field Value Type Description System.Single | Improve this Doc View Source m_searcher Declaration protected readonly IndexSearcher m_searcher Field Value Type Description IndexSearcher Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext ctx, int doc) Parameters Type Name Description AtomicReaderContext ctx System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext ctx, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext ctx IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionQuery.html",
    "title": "Class FunctionQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionQuery Returns a score for each document based on a ValueSource , often some function of the value of a field. Note: This API is experimental and may change in non backward-compatible ways in the future Inheritance System.Object Query FunctionQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public class FunctionQuery : Query Constructors | Improve this Doc View Source FunctionQuery(ValueSource) Declaration public FunctionQuery(ValueSource func) Parameters Type Name Description ValueSource func defines the function to be used for scoring Properties | Improve this Doc View Source ValueSource Declaration public virtual ValueSource ValueSource { get; } Property Value Type Description ValueSource The associated ValueSource Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BoolFunction.html",
    "title": "Class BoolFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoolFunction Abstract parent class for those ValueSource implementations which apply boolean logic to their values Inheritance System.Object ValueSource BoolFunction IfFunction MultiBoolFunction SimpleBoolFunction Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class BoolFunction : ValueSource"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ByteFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ByteFieldSource.html",
    "title": "Class ByteFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteFieldSource Obtains System.Int32 field values from the FieldCache using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. * Inheritance System.Object ValueSource FieldCacheSource ByteFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax [Obsolete] public class ByteFieldSource : FieldCacheSource Constructors | Improve this Doc View Source ByteFieldSource(String) Declaration public ByteFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source ByteFieldSource(String, FieldCache.IByteParser) Declaration public ByteFieldSource(string field, FieldCache.IByteParser parser) Parameters Type Name Description System.String field FieldCache.IByteParser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BytesRefFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.BytesRefFieldSource.html",
    "title": "Class BytesRefFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefFieldSource An implementation for retrieving FunctionValues instances for System.String based fields. Inheritance System.Object ValueSource FieldCacheSource BytesRefFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field FieldCacheSource.GetDescription() FieldCacheSource.Equals(Object) FieldCacheSource.GetHashCode() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class BytesRefFieldSource : FieldCacheSource Constructors | Improve this Doc View Source BytesRefFieldSource(String) Declaration public BytesRefFieldSource(string field) Parameters Type Name Description System.String field Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstNumberSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstNumberSource.html",
    "title": "Class ConstNumberSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstNumberSource ConstNumberSource is the base class for all constant numbers Inheritance System.Object ValueSource ConstNumberSource ConstValueSource DoubleConstValueSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.Equals(Object) ValueSource.GetHashCode() ValueSource.GetDescription() ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class ConstNumberSource : ValueSource Properties | Improve this Doc View Source Bool Declaration public abstract bool Bool { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Double Declaration public abstract double Double { get; } Property Value Type Description System.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public abstract int Int32 { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public abstract long Int64 { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public abstract float Single { get; } Property Value Type Description System.Single"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.ConstValueSource.html",
    "title": "Class ConstValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConstValueSource ConstValueSource returns a constant for all documents Inheritance System.Object ValueSource ConstNumberSource ConstValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class ConstValueSource : ConstNumberSource Constructors | Improve this Doc View Source ConstValueSource(Single) Declaration public ConstValueSource(float constant) Parameters Type Name Description System.Single constant Properties | Improve this Doc View Source Bool Declaration public override bool Bool { get; } Property Value Type Description System.Boolean Overrides ConstNumberSource.Bool | Improve this Doc View Source Double Declaration public override double Double { get; } Property Value Type Description System.Double Overrides ConstNumberSource.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public override int Int32 { get; } Property Value Type Description System.Int32 Overrides ConstNumberSource.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public override long Int64 { get; } Property Value Type Description System.Int64 Overrides ConstNumberSource.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public override float Single { get; } Property Value Type Description System.Single Overrides ConstNumberSource.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DefFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DefFunction.html",
    "title": "Class DefFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefFunction ValueSource implementation which only returns the values from the provided ValueSource s which are available for a particular docId. Consequently, when combined with a ConstValueSource , this function serves as a way to return a default value when the values for a field are unavailable. Inheritance System.Object ValueSource MultiFunction DefFunction Inherited Members MultiFunction.m_sources MultiFunction.GetDescription() MultiFunction.GetDescription(String, IList<ValueSource>) MultiFunction.ValsArr(IList<ValueSource>, IDictionary, AtomicReaderContext) MultiFunction.ToString(String, FunctionValues[], Int32) MultiFunction.CreateWeight(IDictionary, IndexSearcher) MultiFunction.GetHashCode() MultiFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DefFunction : MultiFunction Constructors | Improve this Doc View Source DefFunction(IList<ValueSource>) Declaration public DefFunction(IList<ValueSource> sources) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiFunction.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary fcontext, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary fcontext AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DivSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DivSingleFunction.html",
    "title": "Class DivSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DivSingleFunction Function to divide \"a\" by \"b\" NOTE: This was DivFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction DivSingleFunction Inherited Members DualSingleFunction.m_a DualSingleFunction.m_b DualSingleFunction.GetDescription() DualSingleFunction.GetValues(IDictionary, AtomicReaderContext) DualSingleFunction.CreateWeight(IDictionary, IndexSearcher) DualSingleFunction.GetHashCode() DualSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DivSingleFunction : DualSingleFunction Constructors | Improve this Doc View Source DivSingleFunction(ValueSource, ValueSource) Declaration public DivSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the numerator. ValueSource b the denominator. Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides DualSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single Overrides DualSingleFunction.Func(Int32, FunctionValues, FunctionValues)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DocFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DocFreqValueSource.html",
    "title": "Class DocFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocFreqValueSource DocFreqValueSource returns the number of documents containing the term. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ValueSource DocFreqValueSource IDFValueSource TermFreqValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DocFreqValueSource : ValueSource Constructors | Improve this Doc View Source DocFreqValueSource(String, String, String, BytesRef) Declaration public DocFreqValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Fields | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_indexedBytes Declaration protected readonly BytesRef m_indexedBytes Field Value Type Description BytesRef | Improve this Doc View Source m_indexedField Declaration protected readonly string m_indexedField Field Value Type Description System.String | Improve this Doc View Source m_val Declaration protected readonly string m_val Field Value Type Description System.String Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleConstValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleConstValueSource.html",
    "title": "Class DoubleConstValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleConstValueSource Function that returns a constant double value for every document. Inheritance System.Object ValueSource ConstNumberSource DoubleConstValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DoubleConstValueSource : ConstNumberSource Constructors | Improve this Doc View Source DoubleConstValueSource(Double) Declaration public DoubleConstValueSource(double constant) Parameters Type Name Description System.Double constant Properties | Improve this Doc View Source Bool Declaration public override bool Bool { get; } Property Value Type Description System.Boolean Overrides ConstNumberSource.Bool | Improve this Doc View Source Double Declaration public override double Double { get; } Property Value Type Description System.Double Overrides ConstNumberSource.Double | Improve this Doc View Source Int32 NOTE: This was getInt() in Lucene Declaration public override int Int32 { get; } Property Value Type Description System.Int32 Overrides ConstNumberSource.Int32 | Improve this Doc View Source Int64 NOTE: This was getLong() in Lucene Declaration public override long Int64 { get; } Property Value Type Description System.Int64 Overrides ConstNumberSource.Int64 | Improve this Doc View Source Single NOTE: This was getFloat() in Lucene Declaration public override float Single { get; } Property Value Type Description System.Single Overrides ConstNumberSource.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource.html",
    "title": "Class DoubleFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleFieldSource Obtains System.Double field values from GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and makes those values available as other numeric types, casting as needed. Inheritance System.Object ValueSource FieldCacheSource DoubleFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class DoubleFieldSource : FieldCacheSource Constructors | Improve this Doc View Source DoubleFieldSource(String) Declaration public DoubleFieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source DoubleFieldSource(String, FieldCache.IDoubleParser) Declaration public DoubleFieldSource(string field, FieldCache.IDoubleParser parser) Parameters Type Name Description System.String field FieldCache.IDoubleParser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.IDoubleParser m_parser Field Value Type Description FieldCache.IDoubleParser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object System.Exception TokenMgrError Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean EOFSeen System.Int32 lexState System.Int32 errorLine System.Int32 errorColumn System.String errorAfter System.Char curChar System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Detailed error message Remarks You can customize the lexical error message by modifying this method."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.AndQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.AndQuery.html",
    "title": "Class AndQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AndQuery Factory for conjunctions Inheritance System.Object SrndQuery ComposedQuery AndQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class AndQuery : ComposedQuery Constructors | Improve this Doc View Source AndQuery(IList<SrndQuery>, Boolean, String) Declaration public AndQuery(IList<SrndQuery> queries, bool inf, string opName) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean inf System.String opName Methods | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.ComposedQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.ComposedQuery.html",
    "title": "Class ComposedQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ComposedQuery Base class for composite queries (such as AND/OR/NOT) Inheritance System.Object SrndQuery ComposedQuery AndQuery DistanceQuery NotQuery OrQuery Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ComposedQuery : SrndQuery Constructors | Improve this Doc View Source ComposedQuery(IList<SrndQuery>, Boolean, String) Declaration public ComposedQuery(IList<SrndQuery> qs, bool operatorInfix, string opName) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > qs System.Boolean operatorInfix System.String opName Fields | Improve this Doc View Source m_opName Declaration protected string m_opName Field Value Type Description System.String | Improve this Doc View Source m_queries Declaration protected IList<SrndQuery> m_queries Field Value Type Description System.Collections.Generic.IList < SrndQuery > Properties | Improve this Doc View Source BracketClose Declaration protected virtual string BracketClose { get; } Property Value Type Description System.String | Improve this Doc View Source BracketOpen Declaration protected virtual string BracketOpen { get; } Property Value Type Description System.String | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public override bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean Overrides SrndQuery.IsFieldsSubQueryAcceptable | Improve this Doc View Source IsOperatorInfix Declaration public virtual bool IsOperatorInfix { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NrSubQueries Declaration public virtual int NrSubQueries { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OperatorName Declaration public virtual string OperatorName { get; } Property Value Type Description System.String | Improve this Doc View Source PrefixSeparator Declaration protected virtual string PrefixSeparator { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetSubQueriesEnumerator() Declaration public virtual IEnumerator<SrndQuery> GetSubQueriesEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < SrndQuery > | Improve this Doc View Source GetSubQuery(Int32) Declaration public virtual SrndQuery GetSubQuery(int qn) Parameters Type Name Description System.Int32 qn Returns Type Description SrndQuery | Improve this Doc View Source InfixToString(StringBuilder) Declaration protected virtual void InfixToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r | Improve this Doc View Source MakeLuceneSubQueriesField(String, BasicQueryFactory) Declaration public virtual IList<Query> MakeLuceneSubQueriesField(string fn, BasicQueryFactory qf) Parameters Type Name Description System.String fn BasicQueryFactory qf Returns Type Description System.Collections.Generic.IList < Query > | Improve this Doc View Source PrefixToString(StringBuilder) Declaration protected virtual void PrefixToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r | Improve this Doc View Source Recompose(IList<SrndQuery>) Declaration protected virtual void Recompose(IList<SrndQuery> queries) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.DistanceQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.DistanceQuery.html",
    "title": "Class DistanceQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistanceQuery Factory for NEAR queries Inheritance System.Object SrndQuery ComposedQuery DistanceQuery Implements IDistanceSubQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class DistanceQuery : ComposedQuery, IDistanceSubQuery Constructors | Improve this Doc View Source DistanceQuery(IList<SrndQuery>, Boolean, Int32, String, Boolean) Declaration public DistanceQuery(IList<SrndQuery> queries, bool infix, int opDistance, string opName, bool ordered) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix System.Int32 opDistance System.String opName System.Boolean ordered Properties | Improve this Doc View Source OpDistance Declaration public virtual int OpDistance { get; } Property Value Type Description System.Int32 | Improve this Doc View Source QueriesOrdered Declaration public virtual bool QueriesOrdered { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source GetSpanNearQuery(IndexReader, String, Single, BasicQueryFactory) Declaration public virtual Query GetSpanNearQuery(IndexReader reader, string fieldName, float boost, BasicQueryFactory qf) Parameters Type Name Description IndexReader reader System.String fieldName System.Single boost BasicQueryFactory qf Returns Type Description Query | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Implements IDistanceSubQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.FieldsQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.FieldsQuery.html",
    "title": "Class FieldsQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldsQuery Forms an OR query of the provided query across multiple fields. Inheritance System.Object SrndQuery FieldsQuery Inherited Members SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldsQuery : SrndQuery Constructors | Improve this Doc View Source FieldsQuery(SrndQuery, IList<String>, Char) Declaration public FieldsQuery(SrndQuery q, IList<string> fieldNames, char fieldOp) Parameters Type Name Description SrndQuery q System.Collections.Generic.IList < System.String > fieldNames System.Char fieldOp | Improve this Doc View Source FieldsQuery(SrndQuery, String, Char) Declaration public FieldsQuery(SrndQuery q, string fieldName, char fieldOp) Parameters Type Name Description SrndQuery q System.String fieldName System.Char fieldOp Properties | Improve this Doc View Source FieldNames Declaration public virtual IList<string> FieldNames { get; } Property Value Type Description System.Collections.Generic.IList < System.String > | Improve this Doc View Source FieldOperator Declaration public virtual char FieldOperator { get; } Property Value Type Description System.Char | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public override bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean Overrides SrndQuery.IsFieldsSubQueryAcceptable Methods | Improve this Doc View Source FieldNamesToString(StringBuilder) Declaration protected virtual void FieldNamesToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) | Improve this Doc View Source MakeLuceneQueryNoBoost(BasicQueryFactory) Declaration public virtual Query MakeLuceneQueryNoBoost(BasicQueryFactory qf) Parameters Type Name Description BasicQueryFactory qf Returns Type Description Query | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SrndQuery.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.NotQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.NotQuery.html",
    "title": "Class NotQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NotQuery Factory for prohibited clauses Inheritance System.Object SrndQuery ComposedQuery NotQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class NotQuery : ComposedQuery Constructors | Improve this Doc View Source NotQuery(IList<SrndQuery>, String) Declaration public NotQuery(IList<SrndQuery> queries, string opName) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.String opName Methods | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.OrQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.OrQuery.html",
    "title": "Class OrQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrQuery Factory for disjunctions Inheritance System.Object SrndQuery ComposedQuery OrQuery Implements IDistanceSubQuery Inherited Members ComposedQuery.Recompose(IList<SrndQuery>) ComposedQuery.m_opName ComposedQuery.OperatorName ComposedQuery.m_queries ComposedQuery.GetSubQueriesEnumerator() ComposedQuery.NrSubQueries ComposedQuery.GetSubQuery(Int32) ComposedQuery.IsOperatorInfix ComposedQuery.MakeLuceneSubQueriesField(String, BasicQueryFactory) ComposedQuery.ToString() ComposedQuery.PrefixSeparator ComposedQuery.BracketOpen ComposedQuery.BracketClose ComposedQuery.InfixToString(StringBuilder) ComposedQuery.PrefixToString(StringBuilder) ComposedQuery.IsFieldsSubQueryAcceptable SrndQuery.IsWeighted SrndQuery.Weight SrndQuery.WeightString SrndQuery.WeightOperator SrndQuery.WeightToString(StringBuilder) SrndQuery.MakeLuceneQueryField(String, BasicQueryFactory) SrndQuery.Clone() SrndQuery.GetHashCode() SrndQuery.Equals(Object) SrndQuery.TheEmptyLcnQuery System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class OrQuery : ComposedQuery, IDistanceSubQuery Constructors | Improve this Doc View Source OrQuery(IList<SrndQuery>, Boolean, String) Declaration public OrQuery(IList<SrndQuery> queries, bool infix, string opName) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix System.String opName Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration public virtual void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() Declaration public virtual string DistanceSubQueryNotAllowed() Returns Type Description System.String | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public override Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query Overrides SrndQuery.MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Implements IDistanceSubQuery"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.ItalianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.ItalianLightStemFilterFactory.html",
    "title": "Class ItalianLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItalianLightStemFilterFactory Factory for ItalianLightStemFilter . <fieldType name=\"text_itlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ItalianLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ItalianLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ItalianLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ItalianLightStemFilterFactory(IDictionary<String, String>) Creates a new ItalianLightStemFilterFactory Declaration public ItalianLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.BinaryDictionary.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.BinaryDictionary.html",
    "title": "Class BinaryDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDictionary Base class for a binary-encoded in-memory dictionary. Inheritance System.Object BinaryDictionary TokenInfoDictionary UnknownDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public abstract class BinaryDictionary : IDictionary Constructors | Improve this Doc View Source BinaryDictionary() Declaration protected BinaryDictionary() Fields | Improve this Doc View Source DICT_FILENAME_SUFFIX Declaration public static readonly string DICT_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source DICT_HEADER Declaration public static readonly string DICT_HEADER Field Value Type Description System.String | Improve this Doc View Source HAS_BASEFORM flag that the entry has baseform data. otherwise its not inflected (same as surface form) Declaration public static readonly int HAS_BASEFORM Field Value Type Description System.Int32 | Improve this Doc View Source HAS_PRONUNCIATION flag that the entry has pronunciation data. otherwise pronunciation is the reading Declaration public static readonly int HAS_PRONUNCIATION Field Value Type Description System.Int32 | Improve this Doc View Source HAS_READING flag that the entry has reading data. otherwise reading is surface form converted to katakana Declaration public static readonly int HAS_READING Field Value Type Description System.Int32 | Improve this Doc View Source POSDICT_FILENAME_SUFFIX Declaration public static readonly string POSDICT_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source POSDICT_HEADER Declaration public static readonly string POSDICT_HEADER Field Value Type Description System.String | Improve this Doc View Source TARGETMAP_FILENAME_SUFFIX Declaration public static readonly string TARGETMAP_FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source TARGETMAP_HEADER Declaration public static readonly string TARGETMAP_HEADER Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Declaration public virtual string GetBaseForm(int wordId, char[] surfaceForm, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surfaceForm System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetInflectionForm(Int32) Declaration public virtual string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetInflectionType(Int32) Declaration public virtual string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetLeftId(Int32) Declaration public virtual int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetPartOfSpeech(Int32) Declaration public virtual string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Declaration public virtual string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public virtual string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetResource(String) Declaration protected Stream GetResource(string suffix) Parameters Type Name Description System.String suffix Returns Type Description System.IO.Stream | Improve this Doc View Source GetRightId(Int32) Declaration public virtual int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetTypeResource(Type, String) Declaration public static Stream GetTypeResource(Type clazz, string suffix) Parameters Type Name Description System.Type clazz System.String suffix Returns Type Description System.IO.Stream | Improve this Doc View Source GetWordCost(Int32) Declaration public virtual int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source LookupWordIds(Int32, Int32sRef) Declaration public virtual void LookupWordIds(int sourceId, Int32sRef ref) Parameters Type Name Description System.Int32 sourceId Int32sRef ref Implements IDictionary"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.TokenInfoDictionary.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.TokenInfoDictionary.html",
    "title": "Class TokenInfoDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionary Binary dictionary implementation for a known-word dictionary model: Words are encoded into an FST mapping to a list of wordIDs. Inheritance System.Object BinaryDictionary TokenInfoDictionary Implements IDictionary Inherited Members BinaryDictionary.DICT_FILENAME_SUFFIX BinaryDictionary.TARGETMAP_FILENAME_SUFFIX BinaryDictionary.POSDICT_FILENAME_SUFFIX BinaryDictionary.DICT_HEADER BinaryDictionary.TARGETMAP_HEADER BinaryDictionary.POSDICT_HEADER BinaryDictionary.VERSION BinaryDictionary.GetResource(String) BinaryDictionary.GetTypeResource(Type, String) BinaryDictionary.LookupWordIds(Int32, Int32sRef) BinaryDictionary.GetLeftId(Int32) BinaryDictionary.GetRightId(Int32) BinaryDictionary.GetWordCost(Int32) BinaryDictionary.GetBaseForm(Int32, Char[], Int32, Int32) BinaryDictionary.GetReading(Int32, Char[], Int32, Int32) BinaryDictionary.GetPartOfSpeech(Int32) BinaryDictionary.GetPronunciation(Int32, Char[], Int32, Int32) BinaryDictionary.GetInflectionType(Int32) BinaryDictionary.GetInflectionForm(Int32) BinaryDictionary.HAS_BASEFORM BinaryDictionary.HAS_READING BinaryDictionary.HAS_PRONUNCIATION System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class TokenInfoDictionary : BinaryDictionary, IDictionary Fields | Improve this Doc View Source FST_FILENAME_SUFFIX Declaration public static readonly string FST_FILENAME_SUFFIX Field Value Type Description System.String Properties | Improve this Doc View Source FST Declaration public TokenInfoFST FST { get; } Property Value Type Description TokenInfoFST Methods | Improve this Doc View Source GetInstance() Declaration public static TokenInfoDictionary GetInstance() Returns Type Description TokenInfoDictionary Implements IDictionary"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.UnknownDictionary.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.UnknownDictionary.html",
    "title": "Class UnknownDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnknownDictionary Dictionary for unknown-word handling. Inheritance System.Object BinaryDictionary UnknownDictionary Implements IDictionary Inherited Members BinaryDictionary.DICT_FILENAME_SUFFIX BinaryDictionary.TARGETMAP_FILENAME_SUFFIX BinaryDictionary.POSDICT_FILENAME_SUFFIX BinaryDictionary.DICT_HEADER BinaryDictionary.TARGETMAP_HEADER BinaryDictionary.POSDICT_HEADER BinaryDictionary.VERSION BinaryDictionary.GetResource(String) BinaryDictionary.GetTypeResource(Type, String) BinaryDictionary.LookupWordIds(Int32, Int32sRef) BinaryDictionary.GetLeftId(Int32) BinaryDictionary.GetRightId(Int32) BinaryDictionary.GetWordCost(Int32) BinaryDictionary.GetBaseForm(Int32, Char[], Int32, Int32) BinaryDictionary.GetPartOfSpeech(Int32) BinaryDictionary.GetPronunciation(Int32, Char[], Int32, Int32) BinaryDictionary.HAS_BASEFORM BinaryDictionary.HAS_READING BinaryDictionary.HAS_PRONUNCIATION System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class UnknownDictionary : BinaryDictionary, IDictionary Properties | Improve this Doc View Source CharacterDefinition Declaration public virtual CharacterDefinition CharacterDefinition { get; } Property Value Type Description CharacterDefinition Methods | Improve this Doc View Source GetInflectionForm(Int32) Declaration public override string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String Overrides BinaryDictionary.GetInflectionForm(Int32) | Improve this Doc View Source GetInflectionType(Int32) Declaration public override string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String Overrides BinaryDictionary.GetInflectionType(Int32) | Improve this Doc View Source GetInstance() Declaration public static UnknownDictionary GetInstance() Returns Type Description UnknownDictionary | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public override string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Overrides BinaryDictionary.GetReading(Int32, Char[], Int32, Int32) | Improve this Doc View Source Lookup(Char[], Int32, Int32) Declaration public virtual int Lookup(char[] text, int offset, int len) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 len Returns Type Description System.Int32 Implements IDictionary"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.UserDictionary.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.UserDictionary.html",
    "title": "Class UserDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UserDictionary Class for building a User Dictionary. This class allows for custom segmentation of phrases. Inheritance System.Object UserDictionary Implements IDictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class UserDictionary : IDictionary Constructors | Improve this Doc View Source UserDictionary(TextReader) Declaration public UserDictionary(TextReader reader) Parameters Type Name Description System.IO.TextReader reader Fields | Improve this Doc View Source LEFT_ID Declaration public static readonly int LEFT_ID Field Value Type Description System.Int32 | Improve this Doc View Source RIGHT_ID Declaration public static readonly int RIGHT_ID Field Value Type Description System.Int32 | Improve this Doc View Source WORD_COST Declaration public static readonly int WORD_COST Field Value Type Description System.Int32 Properties | Improve this Doc View Source FST Declaration public TokenInfoFST FST { get; } Property Value Type Description TokenInfoFST Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Declaration public string GetBaseForm(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetInflectionForm(Int32) Declaration public string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetInflectionType(Int32) Declaration public string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetLeftId(Int32) Declaration public int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetPartOfSpeech(Int32) Declaration public string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.String | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Declaration public string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Declaration public string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String | Improve this Doc View Source GetRightId(Int32) Declaration public int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source GetWordCost(Int32) Declaration public int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Returns Type Description System.Int32 | Improve this Doc View Source Lookup(Char[], Int32, Int32) Lookup words in text. Declaration public int[][] Lookup(char[] chars, int off, int len) Parameters Type Name Description System.Char [] chars Text. System.Int32 off Offset into text. System.Int32 len Length of text. Returns Type Description System.Int32 [][] Array of {wordId, position, length}. | Improve this Doc View Source LookupSegmentation(Int32) Declaration public int[] LookupSegmentation(int phraseID) Parameters Type Name Description System.Int32 phraseID Returns Type Description System.Int32 [] Implements IDictionary"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseAnalyzer.html",
    "title": "Class JapaneseAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseAnalyzer Analyzer for Japanese that uses morphological analysis. Inheritance System.Object Analyzer StopwordAnalyzerBase JapaneseAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source JapaneseAnalyzer(LuceneVersion) Declaration public JapaneseAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source JapaneseAnalyzer(LuceneVersion, UserDictionary, JapaneseTokenizerMode, CharArraySet, ISet<String>) Declaration public JapaneseAnalyzer(LuceneVersion matchVersion, UserDictionary userDict, JapaneseTokenizerMode mode, CharArraySet stopwords, ISet<string> stoptags) Parameters Type Name Description LuceneVersion matchVersion UserDictionary userDict JapaneseTokenizerMode mode CharArraySet stopwords System.Collections.Generic.ISet < System.String > stoptags Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source GetDefaultStopSet() Declaration public static CharArraySet GetDefaultStopSet() Returns Type Description CharArraySet | Improve this Doc View Source GetDefaultStopTags() Declaration public static ISet<string> GetDefaultStopTags() Returns Type Description System.Collections.Generic.ISet < System.String > Implements System.IDisposable See Also JapaneseTokenizer"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseBaseFormFilter.html",
    "title": "Class JapaneseBaseFormFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseBaseFormFilter Replaces term text with the IBaseFormAttribute . This acts as a lemmatizer for verbs and adjectives. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseBaseFormFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseBaseFormFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source JapaneseBaseFormFilter(TokenStream) Declaration public JapaneseBaseFormFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramFilterFactory.html",
    "title": "Class EdgeNGramFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EdgeNGramFilterFactory Creates new instances of EdgeNGramTokenFilter . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.EdgeNGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory EdgeNGramFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EdgeNGramFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source EdgeNGramFilterFactory(IDictionary<String, String>) Creates a new EdgeNGramFilterFactory Declaration public EdgeNGramFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.html",
    "title": "Class EdgeNGramTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EdgeNGramTokenFilter Tokenizes the given token into n-grams of given size(s). This TokenFilter create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this filter does not support BACK (you can use ReverseStringFilter up-front and afterward to get the same behavior), handles supplementary characters correctly and does not update offsets anymore. Inheritance System.Object AttributeSource TokenStream TokenFilter EdgeNGramTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class EdgeNGramTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source EdgeNGramTokenFilter(LuceneVersion, TokenStream, EdgeNGramTokenFilter.Side, Int32, Int32) Creates EdgeNGramTokenFilter that can generate n-grams in the sizes of the given range Declaration [Obsolete] public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, EdgeNGramTokenFilter.Side side, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized EdgeNGramTokenFilter.Side side the EdgeNGramTokenFilter.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenFilter(LuceneVersion, TokenStream, Int32, Int32) Creates EdgeNGramTokenFilter that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenFilter(LuceneVersion, TokenStream, String, Int32, Int32) Creates EdgeNGramTokenFilter that can generate n-grams in the sizes of the given range Declaration [Obsolete] public EdgeNGramTokenFilter(LuceneVersion version, TokenStream input, string sideLabel, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion TokenStream input TokenStream holding the input to be tokenized System.String sideLabel the name of the EdgeNGramTokenFilter.Side from which to chop off an n-gram System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_GRAM_SIZE Declaration public const int DEFAULT_MAX_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_SIDE Declaration public const EdgeNGramTokenFilter.Side DEFAULT_SIDE = EdgeNGramTokenFilter.Side.FRONT Field Value Type Description EdgeNGramTokenFilter.Side Methods | Improve this Doc View Source GetSide(String) Get the appropriate EdgeNGramTokenFilter.Side from a string Declaration public static EdgeNGramTokenFilter.Side GetSide(string sideName) Parameters Type Name Description System.String sideName Returns Type Description EdgeNGramTokenFilter.Side | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramTokenizer.html",
    "title": "Class EdgeNGramTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EdgeNGramTokenizer Tokenizes the input from an edge into n-grams of given size(s). This Tokenizer create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this tokenizer can handle maxGram larger than 1024 chars, but beware that this will result in increased memory usage doesn't trim the input, sets position increments equal to 1 instead of 1 for the first token and 0 for all other ones doesn't support backward n-grams anymore. supports IsTokenChar(Int32) pre-tokenization, correctly handles supplementary characters. Although highly discouraged, it is still possible to use the old behavior through Lucene43EdgeNGramTokenizer . Inheritance System.Object AttributeSource TokenStream Tokenizer NGramTokenizer EdgeNGramTokenizer Implements System.IDisposable Inherited Members NGramTokenizer.DEFAULT_MIN_NGRAM_SIZE NGramTokenizer.DEFAULT_MAX_NGRAM_SIZE NGramTokenizer.IncrementToken() NGramTokenizer.IsTokenChar(Int32) NGramTokenizer.End() NGramTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EdgeNGramTokenizer : NGramTokenizer, IDisposable Constructors | Improve this Doc View Source EdgeNGramTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader, Int32, Int32) Creates EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenizer(LuceneVersion version, AttributeSource.AttributeFactory factory, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion AttributeSource.AttributeFactory factory AttributeSource.AttributeFactory to use System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate | Improve this Doc View Source EdgeNGramTokenizer(LuceneVersion, TextReader, Int32, Int32) Creates EdgeNGramTokenizer that can generate n-grams in the sizes of the given range Declaration public EdgeNGramTokenizer(LuceneVersion version, TextReader input, int minGram, int maxGram) Parameters Type Name Description LuceneVersion version the Lucene match version - See LuceneVersion System.IO.TextReader input System.IO.TextReader holding the input to be tokenized System.Int32 minGram the smallest n-gram to generate System.Int32 maxGram the largest n-gram to generate Fields | Improve this Doc View Source DEFAULT_MAX_GRAM_SIZE Declaration public const int DEFAULT_MAX_GRAM_SIZE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_GRAM_SIZE Declaration public const int DEFAULT_MIN_GRAM_SIZE = 1 Field Value Type Description System.Int32 Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramTokenizerFactory.html",
    "title": "Class EdgeNGramTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EdgeNGramTokenizerFactory Creates new instances of EdgeNGramTokenizer . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.EdgeNGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory EdgeNGramTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EdgeNGramTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source EdgeNGramTokenizerFactory(IDictionary<String, String>) Creates a new EdgeNGramTokenizerFactory Declaration public EdgeNGramTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianNormalizationFilter.html",
    "title": "Class PersianNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianNormalizationFilter A TokenFilter that applies PersianNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter PersianNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PersianNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PersianNormalizationFilter(TokenStream) Declaration public PersianNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianNormalizationFilterFactory.html",
    "title": "Class PersianNormalizationFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianNormalizationFilterFactory Factory for PersianNormalizationFilter . <fieldType name=\"text_fanormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.PersianNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PersianNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source PersianNormalizationFilterFactory(IDictionary<String, String>) Creates a new PersianNormalizationFilterFactory Declaration public PersianNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldDocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldDocValuesFormat.html",
    "title": "Class PerFieldDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerFieldDocValuesFormat Enables per field docvalues support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. See DefaultDocValuesFormatFactory for information about how to implement your own DocValuesFormat . Files written by each docvalues format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.dat filenames would look like _1_Lucene40_0.dat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat PerFieldDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.PerField Assembly : Lucene.Net.dll Syntax [DocValuesFormatName(\"PerFieldDV40\")] public abstract class PerFieldDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source PerFieldDocValuesFormat() Sole constructor. Declaration public PerFieldDocValuesFormat() Fields | Improve this Doc View Source PER_FIELD_FORMAT_KEY FieldInfo attribute name used to store the format name for each field. Declaration public static readonly string PER_FIELD_FORMAT_KEY Field Value Type Description System.String | Improve this Doc View Source PER_FIELD_SUFFIX_KEY FieldInfo attribute name used to store the segment suffix name for each field. Declaration public static readonly string PER_FIELD_SUFFIX_KEY Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override sealed DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override sealed DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the doc values format that should be used for writing new segments of field . The field to format mapping is written to the index, so this method is only invoked when writing, not when reading. Declaration public abstract DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat Extension Methods Number.IsNumber(Object) See Also IDocValuesFormatFactory DefaultDocValuesFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldPostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.PerFieldPostingsFormat.html",
    "title": "Class PerFieldPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerFieldPostingsFormat Enables per field postings support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. See DefaultPostingsFormatFactory for information about how to implement your own PostingsFormat . Files written by each posting format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.prx filenames would look like _1_Lucene40_0.prx . @lucene.experimental Inheritance System.Object PostingsFormat PerFieldPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.PerField Assembly : Lucene.Net.dll Syntax [PostingsFormatName(\"PerField40\")] public abstract class PerFieldPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source PerFieldPostingsFormat() Sole constructor. Declaration public PerFieldPostingsFormat() Fields | Improve this Doc View Source PER_FIELD_FORMAT_KEY FieldInfo attribute name used to store the format name for each field. Declaration public static readonly string PER_FIELD_FORMAT_KEY Field Value Type Description System.String | Improve this Doc View Source PER_FIELD_SUFFIX_KEY FieldInfo attribute name used to store the segment suffix name for each field. Declaration public static readonly string PER_FIELD_SUFFIX_KEY Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override sealed FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override sealed FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The field to format mapping is written to the index, so this method is only invoked when writing, not when reading. Declaration public abstract PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat Extension Methods Number.IsNumber(Object) See Also IPostingsFormatFactory DefaultPostingsFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.StoredFieldsWriter.html",
    "title": "Class StoredFieldsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredFieldsWriter Codec API for writing stored fields: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. WriteField(FieldInfo, IIndexableField) is called for each field in the document. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter CompressingStoredFieldsWriter Lucene40StoredFieldsWriter Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldsWriter : IDisposable Constructors | Improve this Doc View Source StoredFieldsWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldsWriter() Methods | Improve this Doc View Source Abort() Aborts writing entirely, implementation should remove any partially-written files, etc. Declaration public abstract void Abort() | Improve this Doc View Source AddDocument<T1>(IEnumerable<T1>, FieldInfos) Sugar method for StartDocument(Int32) + WriteField(FieldInfo, IIndexableField) for every stored field in the document. Declaration protected void AddDocument<T1>(IEnumerable<T1> doc, FieldInfos fieldInfos) where T1 : IIndexableField Parameters Type Name Description System.Collections.Generic.IEnumerable <T1> doc FieldInfos fieldInfos Type Parameters Name Description T1 | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Finish(FieldInfos, Int32) Called before Dispose() , passing in the number of documents that were written. Note that this is intentionally redundant (equivalent to the number of calls to StartDocument(Int32) , but a Codec should check that this is the case to detect the bug described in LUCENE-1282. Declaration public abstract void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs | Improve this Doc View Source FinishDocument() Called when a document and all its fields have been added. Declaration public virtual void FinishDocument() | Improve this Doc View Source Merge(MergeState) Merges in the stored fields from the readers in mergeState . The default implementation skips over deleted documents, and uses StartDocument(Int32) , WriteField(FieldInfo, IIndexableField) , and Finish(FieldInfos, Int32) , returning the number of documents that were written. Implementations can override this method for more sophisticated merging (bulk-byte copying, etc). Declaration public virtual int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 | Improve this Doc View Source StartDocument(Int32) Called before writing the stored fields of the document. WriteField(FieldInfo, IIndexableField) will be called numStoredFields times. Note that this is called even if the document has no stored fields, in this case numStoredFields will be zero. Declaration public abstract void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Writes a single stored field. Declaration public abstract void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Byte.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Byte.html",
    "title": "Class Field.Byte | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Byte Inheritance System.Object Field.Number Field.Byte Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Byte : Field.Number Constructors | Improve this Doc View Source Byte(Byte) Declaration public Byte(byte value) Parameters Type Name Description System.Byte value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Double.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Double.html",
    "title": "Class Field.Double | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Double Inheritance System.Object Field.Number Field.Double Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Double : Field.Number Constructors | Improve this Doc View Source Double(Double) Declaration public Double(double value) Parameters Type Name Description System.Double value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int16.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int16.html",
    "title": "Class Field.Int16 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Int16 Inheritance System.Object Field.Number Field.Int16 Inherited Members Field.Number.GetByteValue() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Int16 : Field.Number Constructors | Improve this Doc View Source Int16(Int16) Declaration public Int16(short value) Parameters Type Name Description System.Int16 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt16Value() Declaration public override short GetInt16Value() Returns Type Description System.Int16 Overrides Field.Number.GetInt16Value() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SingleField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SingleField.html",
    "title": "Class SingleField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleField Field that indexes System.Single values for efficient range filtering and sorting. Here's an example usage: document.Add(new SingleField(name, 6.0F, Field.Store.NO)); For optimal performance, re-use the SingleField and Document instance for more than one document: FloatField field = new SingleField(name, 0.0F, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetSingleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , DoubleField . To perform range querying or filtering against a SingleField , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a SingleField , use the normal numeric sort types, eg SINGLE . SingleField values can also be loaded directly from IFieldCache . You may add the same field name as an SingleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued SingleField . A SingleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was FloatField in Lucene @since 2.9 Inheritance System.Object Field SingleField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class SingleField : Field, IIndexableField Constructors | Improve this Doc View Source SingleField(String, Single, Field.Store) Creates a stored or un-stored SingleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public SingleField(string name, float value, Field.Store stored) Parameters Type Name Description System.String name field name System.Single value 32-bit System.Single value Field.Store stored YES if the content should also be stored Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source SingleField(String, Single, FieldType) Expert: allows you to customize the FieldType . Declaration public SingleField(string name, float value, FieldType type) Parameters Type Name Description System.String name field name System.Single value 32-bit System.Single value FieldType type customized field type: must have NumericType of SINGLE . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a SINGLE NumericType Fields | Improve this Doc View Source TYPE_NOT_STORED Type for a SingleField that is not stored: normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_NOT_STORED Field Value Type Description FieldType | Improve this Doc View Source TYPE_STORED Type for a stored SingleField : normalization factors, frequencies, and positions are omitted. Declaration public static readonly FieldType TYPE_STORED Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedBytesDocValuesField.html",
    "title": "Class SortedBytesDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedBytesDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedDocValuesField SortedBytesDocValuesField Implements IIndexableField Inherited Members SortedDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use SortedDocValuesField instead.\")] public class SortedBytesDocValuesField : SortedDocValuesField, IIndexableField Constructors | Improve this Doc View Source SortedBytesDocValuesField(String, BytesRef) Create a new fixed or variable-length sorted DocValues field. Declaration public SortedBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source SortedBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length sorted DocValues field. Declaration public SortedBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for sorted bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for sorted bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also SortedDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedDocValuesField.html",
    "title": "Class SortedDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedDocValuesField SortedBytesDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class SortedDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source SortedDocValuesField(String, BytesRef) Create a new sorted DocValues field. Declaration public SortedDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE Type for sorted bytes DocValues Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SortedSetDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SortedSetDocValuesField.html",
    "title": "Class SortedSetDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesField Field that stores a set of per-document BytesRef values, indexed for faceting,grouping,joining. Here's an example usage: document.Add(new SortedSetDocValuesField(name, new BytesRef(\"hello\"))); document.Add(new SortedSetDocValuesField(name, new BytesRef(\"world\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field SortedSetDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class SortedSetDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source SortedSetDocValuesField(String, BytesRef) Create a new sorted DocValues field. Declaration public SortedSetDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE Type for sorted bytes DocValues Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.EveryNTermSelector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.EveryNTermSelector Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNTermSelector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public sealed class EveryNTermSelector : VariableGapTermsIndexWriter.IndexTermSelector Remarks Same policy as FixedGapTermsIndexWriter Constructors | Improve this Doc View Source EveryNTermSelector(Int32) Declaration public EveryNTermSelector(int interval) Parameters Type Name Description System.Int32 interval Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Declaration public override bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean Overrides VariableGapTermsIndexWriter.IndexTermSelector.IsIndexTerm(BytesRef, TermStats) | Improve this Doc View Source NewField(FieldInfo) Declaration public override void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Overrides VariableGapTermsIndexWriter.IndexTermSelector.NewField(FieldInfo)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.html",
    "title": "Class VariableGapTermsIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter Selects index terms according to provided pluggable VariableGapTermsIndexWriter.IndexTermSelector , and stores them in a prefix trie that's loaded entirely in RAM stored as an FST<T> . This terms index only supports unsigned byte term sort order (unicode codepoint order when the bytes are UTF8). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexWriterBase VariableGapTermsIndexWriter Implements System.IDisposable Inherited Members TermsIndexWriterBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class VariableGapTermsIndexWriter : TermsIndexWriterBase, IDisposable Constructors | Improve this Doc View Source VariableGapTermsIndexWriter(SegmentWriteState, VariableGapTermsIndexWriter.IndexTermSelector) Declaration public VariableGapTermsIndexWriter(SegmentWriteState state, VariableGapTermsIndexWriter.IndexTermSelector policy) Parameters Type Name Description SegmentWriteState state VariableGapTermsIndexWriter.IndexTermSelector policy Fields | Improve this Doc View Source m_output Declaration protected IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public override TermsIndexWriterBase.FieldWriter AddField(FieldInfo field, long termsFilePointer) Parameters Type Name Description FieldInfo field System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter Overrides TermsIndexWriterBase.AddField(FieldInfo, Int64) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexWriterBase.Dispose(Boolean) | Improve this Doc View Source IndexedTermPrefixLength(BytesRef, BytesRef) Declaration protected virtual int IndexedTermPrefixLength(BytesRef priorTerm, BytesRef indexedTerm) Parameters Type Name Description BytesRef priorTerm BytesRef indexedTerm Returns Type Description System.Int32 Remarks NOTE: If your codec does not sort in unicode code point order, you must override this method to simply return indexedTerm.Length . Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilteringPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilteringPostingsFormat.html",
    "title": "Class BloomFilteringPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BloomFilteringPostingsFormat A PostingsFormat useful for low doc-frequency fields such as primary keys. Bloom filters are maintained in a \".blm\" file which offers \"fast-fail\" for reads in segments known to have no record of the key. A choice of delegate PostingsFormat is used to record all other Postings data. A choice of BloomFilterFactory can be passed to tailor Bloom Filter settings on a per-field basis. The default configuration is DefaultBloomFilterFactory which allocates a ~8mb bitset and hashes values using MurmurHash2 . This should be suitable for most purposes. The format of the blm file is as follows: BloomFilter (.blm) --> Header, DelegatePostingsFormatName, NumFilteredFields, Filter NumFilteredFields , Footer Filter --> FieldNumber, FuzzySet FuzzySet -->See Serialize(DataOutput) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DelegatePostingsFormatName --> String ( WriteString(String) ) The name of a ServiceProvider registered PostingsFormat NumFilteredFields --> Uint32 ( WriteInt32(Int32) ) FieldNumber --> Uint32 ( WriteInt32(Int32) ) The number of the field in this segment Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat BloomFilteringPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"BloomFilter\")] public sealed class BloomFilteringPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source BloomFilteringPostingsFormat() Used only by core Lucene at read-time via Service Provider instantiation - do not use at Write-time in application code. Declaration public BloomFilteringPostingsFormat() | Improve this Doc View Source BloomFilteringPostingsFormat(PostingsFormat) Creates Bloom filters for a selection of fields created in the index. This is recorded as a set of Bitsets held as a segment summary in an additional \"blm\" file. This PostingsFormat delegates to a choice of delegate PostingsFormat for encoding all other postings data. This choice of constructor defaults to the DefaultBloomFilterFactory for configuring per-field BloomFilters. Declaration public BloomFilteringPostingsFormat(PostingsFormat delegatePostingsFormat) Parameters Type Name Description PostingsFormat delegatePostingsFormat The PostingsFormat that records all the non-bloom filter data i.e. postings info. | Improve this Doc View Source BloomFilteringPostingsFormat(PostingsFormat, BloomFilterFactory) Creates Bloom filters for a selection of fields created in the index. This is recorded as a set of Bitsets held as a segment summary in an additional \"blm\" file. This PostingsFormat delegates to a choice of delegate PostingsFormat for encoding all other postings data. Declaration public BloomFilteringPostingsFormat(PostingsFormat delegatePostingsFormat, BloomFilterFactory bloomFilterFactory) Parameters Type Name Description PostingsFormat delegatePostingsFormat The PostingsFormat that records all the non-bloom filter data i.e. postings info. BloomFilterFactory bloomFilterFactory The BloomFilterFactory responsible for sizing BloomFilters appropriately. Fields | Improve this Doc View Source VERSION_CHECKSUM Declaration public static readonly int VERSION_CHECKSUM Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static readonly int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static readonly int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.DefaultBloomFilterFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.DefaultBloomFilterFactory.html",
    "title": "Class DefaultBloomFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultBloomFilterFactory Default policy is to allocate a bitset with 10% saturation given a unique term per document. Bits are set via MurmurHash2 hashing function. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BloomFilterFactory DefaultBloomFilterFactory Inherited Members BloomFilterFactory.Downsize(FieldInfo, FuzzySet) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public class DefaultBloomFilterFactory : BloomFilterFactory Methods | Improve this Doc View Source GetSetForField(SegmentWriteState, FieldInfo) Declaration public override FuzzySet GetSetForField(SegmentWriteState state, FieldInfo info) Parameters Type Name Description SegmentWriteState state FieldInfo info Returns Type Description FuzzySet Overrides BloomFilterFactory.GetSetForField(SegmentWriteState, FieldInfo) | Improve this Doc View Source IsSaturated(FuzzySet, FieldInfo) Declaration public override bool IsSaturated(FuzzySet bloomFilter, FieldInfo fieldInfo) Parameters Type Name Description FuzzySet bloomFilter FieldInfo fieldInfo Returns Type Description System.Boolean Overrides BloomFilterFactory.IsSaturated(FuzzySet, FieldInfo)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.html",
    "title": "Class FacetsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsCollector Collects hits for subsequent faceting. Once you've run a search and collect hits into this, instantiate one of the ICollector subclasses to do the facet counting. Use the Search utility methods (such as Search(IndexSearcher, Query, Int32, ICollector) ) to perform an \"ordinary\" search but also collect into a Facets . Inheritance System.Object FacetsCollector RandomSamplingFacetsCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetsCollector : ICollector Constructors | Improve this Doc View Source FacetsCollector() Default constructor Declaration public FacetsCollector() | Improve this Doc View Source FacetsCollector(Boolean) Create this; if keepScores is true then a float[] is allocated to hold score of all hits. Declaration public FacetsCollector(bool keepScores) Parameters Type Name Description System.Boolean keepScores Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source KeepScores True if scores were saved. Declaration public bool KeepScores { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CreateDocs(Int32) Creates a FacetsCollector.Docs to record hits. The default uses FixedBitSet to record hits and you can override to e.g. record the docs in your own DocIdSet . Declaration protected virtual FacetsCollector.Docs CreateDocs(int maxDoc) Parameters Type Name Description System.Int32 maxDoc Returns Type Description FacetsCollector.Docs | Improve this Doc View Source GetMatchingDocs() Returns the documents matched by the query, one FacetsCollector.MatchingDocs per visited segment. Declaration public virtual IList<FacetsCollector.MatchingDocs> GetMatchingDocs() Returns Type Description System.Collections.Generic.IList < FacetsCollector.MatchingDocs > | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public static TopDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q Filter filter System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, Sort, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public static TopFieldDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q Filter filter System.Int32 n Sort sort ICollector fc Returns Type Description TopFieldDocs | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public static TopFieldDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore ICollector fc Returns Type Description TopFieldDocs | Improve this Doc View Source Search(IndexSearcher, Query, Int32, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public static TopDocs Search(IndexSearcher searcher, Query q, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher Query q System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, Sort sort, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n Sort sort ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Int32, ICollector) Utility method, to search and also collect all hits into the provided ICollector . Declaration public virtual TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, int n, ICollector fc) Parameters Type Name Description IndexSearcher searcher ScoreDoc after Query q System.Int32 n ICollector fc Returns Type Description TopDocs | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.MultiFacets.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.MultiFacets.html",
    "title": "Class MultiFacets | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFacets Maps specified dims to provided Facets impls; else, uses the default Facets impl. Inheritance System.Object Facets MultiFacets Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class MultiFacets : Facets Constructors | Improve this Doc View Source MultiFacets(IDictionary<String, Facets>, Facets) Create this, with the specified default Facets for fields not included in dimToFacets . Declaration public MultiFacets(IDictionary<string, Facets> dimToFacets, Facets defaultFacets = null) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , Facets > dimToFacets Facets defaultFacets Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder-1.html",
    "title": "Class QueryTreeBuilder<TQuery> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTreeBuilder<TQuery> This class should be used when there is a builder for each type of node. The type of node may be defined in 2 different ways: - by the field name, when the node implements the IFieldableNode interface - by its class, it keeps checking the class and all the interfaces and classes this class implements/extends until it finds a builder for that class/interface This class always check if there is a builder for the field name before it checks for the node class. So, field name builders have precedence over class builders. When a builder is found for a node, it's called and the node is passed to the builder. If the returned built object is not null , it's tagged on the node using the tag QUERY_TREE_BUILDER_TAGID . The children are usually built before the parent node. However, if a builder associated to a node is an instance of QueryTreeBuilder<TQuery> , the node is delegated to this builder and it's responsible to build the node and its children. IQueryBuilder<TQuery> Inheritance System.Object QueryTreeBuilder QueryTreeBuilder<TQuery> StandardQueryTreeBuilder Implements IQueryBuilder <TQuery> Inherited Members QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryTreeBuilder<TQuery> : QueryTreeBuilder, IQueryBuilder<TQuery> Type Parameters Name Description TQuery Constructors | Improve this Doc View Source QueryTreeBuilder() QueryTreeBuilder<TQuery> constructor. Declaration public QueryTreeBuilder() Methods | Improve this Doc View Source Build(IQueryNode) Builds some kind of object from a query tree. Each node in the query tree is built using an specific builder associated to it. Declaration public virtual TQuery Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode the query tree root node Returns Type Description TQuery the built object Exceptions Type Condition QueryNodeException if some node builder throws a QueryNodeException or if there is a node which had no builder associated to it | Improve this Doc View Source SetBuilder(String, IQueryBuilder<TQuery>) Associates a field name with a builder. Declaration public virtual void SetBuilder(string fieldName, IQueryBuilder<TQuery> builder) Parameters Type Name Description System.String fieldName the field name IQueryBuilder <TQuery> builder the builder to be associated | Improve this Doc View Source SetBuilder(Type, IQueryBuilder<TQuery>) Associates a System.Type (that implements IQueryNode ) with a builder Declaration public virtual void SetBuilder(Type queryNodeClass, IQueryBuilder<TQuery> builder) Parameters Type Name Description System.Type queryNodeClass The type (a class that implements IQueryNode ) IQueryBuilder <TQuery> builder the builder to be associated Implements IQueryBuilder<TQuery>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey-1.html",
    "title": "Class ConfigurationKey<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConfigurationKey<T> An instance of this class represents a key that is used to retrieve a value from AbstractQueryConfig . It also holds the value's type, which is defined in the generic argument. Inheritance System.Object ConfigurationKey ConfigurationKey<T> Inherited Members ConfigurationKey.NewInstance<T>() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class ConfigurationKey<T> : ConfigurationKey Type Parameters Name Description T the value's type See Also AbstractQueryConfig"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.FieldConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.FieldConfig.html",
    "title": "Class FieldConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldConfig This class represents a field configuration. Inheritance System.Object AbstractQueryConfig FieldConfig Inherited Members AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public class FieldConfig : AbstractQueryConfig Constructors | Improve this Doc View Source FieldConfig(String) Constructs a FieldConfig Declaration public FieldConfig(string fieldName) Parameters Type Name Description System.String fieldName the field name, it cannot be null Exceptions Type Condition System.ArgumentException if the field name is null Properties | Improve this Doc View Source Field Gets the field name this configuration represents. Declaration public virtual string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html",
    "title": "Class QueryConfigHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryConfigHandler This class can be used to hold any query configuration and no field configuration. For field configuration, it creates an empty FieldConfig object and delegate it to field config listeners, these are responsible for setting up all the field configuration. QueryConfigHandler should be extended by classes that intends to provide configuration to IQueryNodeProcessor objects. The class that extends QueryConfigHandler should also provide FieldConfig objects for each collection field. Inheritance System.Object AbstractQueryConfig QueryConfigHandler StandardQueryConfigHandler Inherited Members AbstractQueryConfig.Get<T>(ConfigurationKey<T>) AbstractQueryConfig.Has<T>(ConfigurationKey<T>) AbstractQueryConfig.Set<T>(ConfigurationKey<T>, T) AbstractQueryConfig.Unset<T>(ConfigurationKey<T>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryConfigHandler : AbstractQueryConfig Methods | Improve this Doc View Source AddFieldConfigListener(IFieldConfigListener) Adds a listener. The added listeners are called in the order they are added. Declaration public virtual void AddFieldConfigListener(IFieldConfigListener listener) Parameters Type Name Description IFieldConfigListener listener the listener to be added | Improve this Doc View Source GetFieldConfig(String) Returns an implementation of FieldConfig for a specific field name. If the implemented QueryConfigHandler does not know a specific field name, it may return null , indicating there is no configuration for that field. Declaration public virtual FieldConfig GetFieldConfig(string fieldName) Parameters Type Name Description System.String fieldName the field name Returns Type Description FieldConfig A FieldConfig object containing the field name configuration or null , if the implemented QueryConfigHandler has no configuration for that field See Also FieldConfig IFieldConfigListener QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.QueryParserMessages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.QueryParserMessages.html",
    "title": "Class QueryParserMessages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserMessages Flexible Query Parser message bundle class Inheritance System.Object NLS QueryParserMessages Inherited Members NLS.GetResourceManagerFactory() NLS.SetResourceManagerFactory(IResourceManagerFactory) NLS.GetLocalizedMessage(String) NLS.GetLocalizedMessage(String, CultureInfo) NLS.GetLocalizedMessage(String, CultureInfo, Object[]) NLS.GetLocalizedMessage(String, Object[]) NLS.InitializeMessages(String, Type) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserMessages : NLS Fields | Improve this Doc View Source COULD_NOT_PARSE_NUMBER Declaration public static string COULD_NOT_PARSE_NUMBER Field Value Type Description System.String | Improve this Doc View Source EMPTY_MESSAGE Declaration public static string EMPTY_MESSAGE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX Declaration public static string INVALID_SYNTAX Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_CANNOT_PARSE Declaration public static string INVALID_SYNTAX_CANNOT_PARSE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_CHARACTER Declaration public static string INVALID_SYNTAX_ESCAPE_CHARACTER Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_NONE_HEX_UNICODE Declaration public static string INVALID_SYNTAX_ESCAPE_NONE_HEX_UNICODE Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION Declaration public static string INVALID_SYNTAX_ESCAPE_UNICODE_TRUNCATION Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_FUZZY_EDITS Declaration public static string INVALID_SYNTAX_FUZZY_EDITS Field Value Type Description System.String | Improve this Doc View Source INVALID_SYNTAX_FUZZY_LIMITS Declaration public static string INVALID_SYNTAX_FUZZY_LIMITS Field Value Type Description System.String | Improve this Doc View Source LEADING_WILDCARD_NOT_ALLOWED Declaration public static string LEADING_WILDCARD_NOT_ALLOWED Field Value Type Description System.String | Improve this Doc View Source LUCENE_QUERY_CONVERSION_ERROR Declaration public static string LUCENE_QUERY_CONVERSION_ERROR Field Value Type Description System.String | Improve this Doc View Source NODE_ACTION_NOT_SUPPORTED Declaration public static string NODE_ACTION_NOT_SUPPORTED Field Value Type Description System.String | Improve this Doc View Source NUMBER_CLASS_NOT_SUPPORTED_BY_NUMERIC_RANGE_QUERY Declaration public static string NUMBER_CLASS_NOT_SUPPORTED_BY_NUMERIC_RANGE_QUERY Field Value Type Description System.String | Improve this Doc View Source NUMERIC_CANNOT_BE_EMPTY Declaration public static string NUMERIC_CANNOT_BE_EMPTY Field Value Type Description System.String | Improve this Doc View Source PARAMETER_VALUE_NOT_SUPPORTED Declaration public static string PARAMETER_VALUE_NOT_SUPPORTED Field Value Type Description System.String | Improve this Doc View Source TOO_MANY_BOOLEAN_CLAUSES Declaration public static string TOO_MANY_BOOLEAN_CLAUSES Field Value Type Description System.String | Improve this Doc View Source UNSUPPORTED_NUMERIC_DATA_TYPE Declaration public static string UNSUPPORTED_NUMERIC_DATA_TYPE Field Value Type Description System.String | Improve this Doc View Source WILDCARD_NOT_SUPPORTED Declaration public static string WILDCARD_NOT_SUPPORTED Field Value Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.html",
    "title": "Class CompositeReaderContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompositeReaderContext IndexReaderContext for CompositeReader instance. Inheritance System.Object IndexReaderContext CompositeReaderContext Inherited Members IndexReaderContext.Parent IndexReaderContext.IsTopLevel IndexReaderContext.DocBaseInParent IndexReaderContext.OrdInParent System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class CompositeReaderContext : IndexReaderContext Properties | Improve this Doc View Source Children Declaration public override IList<IndexReaderContext> Children { get; } Property Value Type Description System.Collections.Generic.IList < IndexReaderContext > Overrides IndexReaderContext.Children | Improve this Doc View Source Leaves Declaration public override IList<AtomicReaderContext> Leaves { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReaderContext > Overrides IndexReaderContext.Leaves | Improve this Doc View Source Reader Declaration public override IndexReader Reader { get; } Property Value Type Description IndexReader Overrides IndexReaderContext.Reader Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterDocsEnum.html",
    "title": "Class FilterAtomicReader.FilterDocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterDocsEnum Base class for filtering DocsEnum implementations. Inheritance System.Object DocIdSetIterator DocsEnum FilterAtomicReader.FilterDocsEnum Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterDocsEnum : DocsEnum Constructors | Improve this Doc View Source FilterDocsEnum(DocsEnum) Create a new FilterAtomicReader.FilterDocsEnum Declaration public FilterDocsEnum(DocsEnum input) Parameters Type Name Description DocsEnum input the underlying DocsEnum instance. Fields | Improve this Doc View Source m_input The underlying DocsEnum instance. Declaration protected DocsEnum m_input Field Value Type Description DocsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides DocsEnum.Attributes | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterFields.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterFields.html",
    "title": "Class FilterAtomicReader.FilterFields | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterFields Base class for filtering Fields implementations. Inheritance System.Object Fields FilterAtomicReader.FilterFields Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable Inherited Members Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterFields : Fields, IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source FilterFields(Fields) Creates a new FilterAtomicReader.FilterFields . Declaration public FilterFields(Fields input) Parameters Type Name Description Fields input the underlying Fields instance. Fields | Improve this Doc View Source m_input The underlying Fields instance. Declaration protected readonly Fields m_input Field Value Type Description Fields Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTerms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTerms.html",
    "title": "Class FilterAtomicReader.FilterTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterTerms Base class for filtering Terms implementations. NOTE : If the order of terms and documents is not changed, and if these terms are going to be intersected with automata, you could consider overriding Intersect(CompiledAutomaton, BytesRef) for better performance. Inheritance System.Object Terms FilterAtomicReader.FilterTerms Inherited Members Terms.Intersect(CompiledAutomaton, BytesRef) Terms.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterTerms : Terms Constructors | Improve this Doc View Source FilterTerms(Terms) Creates a new FilterAtomicReader.FilterTerms Declaration public FilterTerms(Terms input) Parameters Type Name Description Terms input the underlying Terms instance. Fields | Improve this Doc View Source m_input The underlying Terms instance. Declaration protected readonly Terms m_input Field Value Type Description Terms Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides Terms.Comparer | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Terms.Count | Improve this Doc View Source DocCount Declaration public override int DocCount { get; } Property Value Type Description System.Int32 Overrides Terms.DocCount | Improve this Doc View Source HasFreqs Declaration public override bool HasFreqs { get; } Property Value Type Description System.Boolean Overrides Terms.HasFreqs | Improve this Doc View Source HasOffsets Declaration public override bool HasOffsets { get; } Property Value Type Description System.Boolean Overrides Terms.HasOffsets | Improve this Doc View Source HasPayloads Declaration public override bool HasPayloads { get; } Property Value Type Description System.Boolean Overrides Terms.HasPayloads | Improve this Doc View Source HasPositions Declaration public override bool HasPositions { get; } Property Value Type Description System.Boolean Overrides Terms.HasPositions | Improve this Doc View Source SumDocFreq Declaration public override long SumDocFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumDocFreq | Improve this Doc View Source SumTotalTermFreq Declaration public override long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Overrides Terms.SumTotalTermFreq Methods | Improve this Doc View Source GetIterator(TermsEnum) Declaration public override TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum Overrides Terms.GetIterator(TermsEnum) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterAtomicReader.FilterTermsEnum.html",
    "title": "Class FilterAtomicReader.FilterTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterAtomicReader.FilterTermsEnum Base class for filtering TermsEnum implementations. Inheritance System.Object TermsEnum FilterAtomicReader.FilterTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.SeekExact(BytesRef) TermsEnum.SeekExact(BytesRef, TermState) TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.GetTermState() TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class FilterTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FilterTermsEnum(TermsEnum) Creates a new FilterAtomicReader.FilterTermsEnum Declaration public FilterTermsEnum(TermsEnum input) Parameters Type Name Description TermsEnum input the underlying TermsEnum instance. Fields | Improve this Doc View Source m_input The underlying TermsEnum instance. Declaration protected readonly TermsEnum m_input Field Value Type Description TermsEnum Properties | Improve this Doc View Source Attributes Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides TermsEnum.Attributes | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source SeekCeil(BytesRef) Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) | Improve this Doc View Source SeekExact(Int64) Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) Implements IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooOldException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexFormatTooOldException.html",
    "title": "Class IndexFormatTooOldException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexFormatTooOldException This exception is thrown when Lucene detects an index that is too old for this Lucene version Inheritance System.Object System.Exception System.IO.IOException CorruptIndexException IndexFormatTooOldException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class IndexFormatTooOldException : CorruptIndexException Constructors | Improve this Doc View Source IndexFormatTooOldException(DataInput, Int32, Int32, Int32) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(DataInput input, int version, int minVersion, int maxVersion) Parameters Type Name Description DataInput input the open file that's too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooOldException(DataInput, String) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(DataInput input, string version) Parameters Type Name Description DataInput input the open file that's too old System.String version the version of the file that was too old | Improve this Doc View Source IndexFormatTooOldException(String, Int32, Int32, Int32) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(string resourceDesc, int version, int minVersion, int maxVersion) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.Int32 version the version of the file that was too old System.Int32 minVersion the minimum version accepted System.Int32 maxVersion the maxium version accepted | Improve this Doc View Source IndexFormatTooOldException(String, String) Creates an IndexFormatTooOldException . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexFormatTooOldException(string resourceDesc, string version) Parameters Type Name Description System.String resourceDesc describes the file that was too old System.String version the version of the file that was too old Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexNotFoundException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexNotFoundException.html",
    "title": "Class IndexNotFoundException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexNotFoundException Signals that no index was found in the System.IO.Directory . Possibly because the directory is empty, however can also indicate an index corruption. Inheritance System.Object System.Exception System.IO.IOException System.IO.FileNotFoundException IndexNotFoundException Inherited Members System.IO.FileNotFoundException.ToString() System.IO.FileNotFoundException.FileName System.IO.FileNotFoundException.Message System.Exception.GetBaseException() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexNotFoundException : FileNotFoundException Constructors | Improve this Doc View Source IndexNotFoundException(String) Creates IndexNotFoundException with the description message. Declaration public IndexNotFoundException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.html",
    "title": "Class MultiDocsAndPositionsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MultiDocsAndPositionsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source MultiDocsAndPositionsEnum(MultiTermsEnum, Int32) Sole constructor. Declaration public MultiDocsAndPositionsEnum(MultiTermsEnum parent, int subReaderCount) Parameters Type Name Description MultiTermsEnum parent System.Int32 subReaderCount Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsAndPositionsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsAndPositionsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source CanReuse(MultiTermsEnum) Returns true if this instance can be reused by the provided MultiTermsEnum . Declaration public bool CanReuse(MultiTermsEnum parent) Parameters Type Name Description MultiTermsEnum parent Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition() | Improve this Doc View Source Reset(MultiDocsAndPositionsEnum.EnumWithSlice[], Int32) Re-use and reset this instance on the provided slices. Declaration public MultiDocsAndPositionsEnum Reset(MultiDocsAndPositionsEnum.EnumWithSlice[] subs, int numSubs) Parameters Type Name Description MultiDocsAndPositionsEnum.EnumWithSlice [] subs System.Int32 numSubs Returns Type Description MultiDocsAndPositionsEnum | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.ParallelCompositeReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ParallelCompositeReader.html",
    "title": "Class ParallelCompositeReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParallelCompositeReader A CompositeReader which reads multiple, parallel indexes. Each index added must have the same number of documents, and exactly the same hierarchical subreader structure, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . A good strategy to create suitable indexes with IndexWriter is to use LogDocMergePolicy , as this one does not reorder documents during merging (like TieredMergePolicy ) and triggers merges by number of documents per segment. If you use different MergePolicy s it might happen that the segment structure of your index is no longer predictable. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < IndexReader > ParallelCompositeReader Implements System.IDisposable Inherited Members BaseCompositeReader<IndexReader>.GetTermVectors(Int32) BaseCompositeReader<IndexReader>.NumDocs BaseCompositeReader<IndexReader>.MaxDoc BaseCompositeReader<IndexReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<IndexReader>.DocFreq(Term) BaseCompositeReader<IndexReader>.TotalTermFreq(Term) BaseCompositeReader<IndexReader>.GetSumDocFreq(String) BaseCompositeReader<IndexReader>.GetDocCount(String) BaseCompositeReader<IndexReader>.GetSumTotalTermFreq(String) BaseCompositeReader<IndexReader>.ReaderIndex(Int32) BaseCompositeReader<IndexReader>.ReaderBase(Int32) BaseCompositeReader<IndexReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class ParallelCompositeReader : BaseCompositeReader<IndexReader>, IDisposable Constructors | Improve this Doc View Source ParallelCompositeReader(CompositeReader[]) Create a ParallelCompositeReader based on the provided readers; auto-disposes the given readers on Dispose() . Declaration public ParallelCompositeReader(params CompositeReader[] readers) Parameters Type Name Description CompositeReader [] readers | Improve this Doc View Source ParallelCompositeReader(Boolean, CompositeReader[]) Create a ParallelCompositeReader based on the provided readers . Declaration public ParallelCompositeReader(bool closeSubReaders, params CompositeReader[] readers) Parameters Type Name Description System.Boolean closeSubReaders CompositeReader [] readers | Improve this Doc View Source ParallelCompositeReader(Boolean, CompositeReader[], CompositeReader[]) Expert: create a ParallelCompositeReader based on the provided readers and storedFieldReaders ; when a document is loaded, only storedFieldReaders will be used. Declaration public ParallelCompositeReader(bool closeSubReaders, CompositeReader[] readers, CompositeReader[] storedFieldReaders) Parameters Type Name Description System.Boolean closeSubReaders CompositeReader [] readers CompositeReader [] storedFieldReaders Methods | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.PersistentSnapshotDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.PersistentSnapshotDeletionPolicy.html",
    "title": "Class PersistentSnapshotDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersistentSnapshotDeletionPolicy A SnapshotDeletionPolicy which adds a persistence layer so that snapshots can be maintained across the life of an application. The snapshots are persisted in a Directory and are committed as soon as Snapshot() or Release(IndexCommit) is called. NOTE: Sharing PersistentSnapshotDeletionPolicy s that write to the same directory across IndexWriter s will corrupt snapshots. You should make sure every IndexWriter has its own PersistentSnapshotDeletionPolicy and that they all write to a different Directory . It is OK to use the same Directory that holds the index. This class adds a Release(Int64) method to release commits from a previous snapshot's Generation . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexDeletionPolicy SnapshotDeletionPolicy PersistentSnapshotDeletionPolicy Inherited Members SnapshotDeletionPolicy.m_refCounts SnapshotDeletionPolicy.m_indexCommits SnapshotDeletionPolicy.m_lastCommit SnapshotDeletionPolicy.OnCommit<T>(IList<T>) SnapshotDeletionPolicy.OnInit<T>(IList<T>) SnapshotDeletionPolicy.ReleaseGen(Int64) SnapshotDeletionPolicy.IncRef(IndexCommit) SnapshotDeletionPolicy.GetSnapshots() SnapshotDeletionPolicy.SnapshotCount SnapshotDeletionPolicy.GetIndexCommit(Int64) SnapshotDeletionPolicy.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class PersistentSnapshotDeletionPolicy : SnapshotDeletionPolicy Constructors | Improve this Doc View Source PersistentSnapshotDeletionPolicy(IndexDeletionPolicy, Directory) PersistentSnapshotDeletionPolicy wraps another IndexDeletionPolicy to enable flexible snapshotting, passing CREATE_OR_APPEND by default. Declaration public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir) Parameters Type Name Description IndexDeletionPolicy primary the IndexDeletionPolicy that is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released via Release(IndexCommit) . Directory dir the Directory which will be used to persist the snapshots information. | Improve this Doc View Source PersistentSnapshotDeletionPolicy(IndexDeletionPolicy, Directory, OpenMode) PersistentSnapshotDeletionPolicy wraps another IndexDeletionPolicy to enable flexible snapshotting. Declaration public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir, OpenMode mode) Parameters Type Name Description IndexDeletionPolicy primary the IndexDeletionPolicy that is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released via Release(IndexCommit) . Directory dir the Directory which will be used to persist the snapshots information. OpenMode mode specifies whether a new index should be created, deleting all existing snapshots information (immediately), or open an existing index, initializing the class with the snapshots information. Fields | Improve this Doc View Source SNAPSHOTS_PREFIX Prefix used for the save file. Declaration public static readonly string SNAPSHOTS_PREFIX Field Value Type Description System.String Properties | Improve this Doc View Source LastSaveFile Returns the file name the snapshots are currently saved to, or null if no snapshots have been saved. Declaration public virtual string LastSaveFile { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Release(IndexCommit) Deletes a snapshotted commit. Once this method returns, the snapshot information is persisted in the directory. Declaration public override void Release(IndexCommit commit) Parameters Type Name Description IndexCommit commit Overrides SnapshotDeletionPolicy.Release(IndexCommit) See Also Release ( IndexCommit ) | Improve this Doc View Source Release(Int64) Deletes a snapshotted commit by generation. Once this method returns, the snapshot information is persisted in the directory. Declaration public virtual void Release(long gen) Parameters Type Name Description System.Int64 gen See Also Generation Release ( IndexCommit ) | Improve this Doc View Source Snapshot() Snapshots the last commit. Once this method returns, the snapshot information is persisted in the directory. Declaration public override IndexCommit Snapshot() Returns Type Description IndexCommit Overrides SnapshotDeletionPolicy.Snapshot() See Also Snapshot () Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.Int64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.Int64Buffer.html",
    "title": "Class Int64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64Buffer A buffer of longs. A long buffer can be created in either of the following ways: Allocate(Int32) a new long array and create a buffer based on it Wrap(Int64[]) an existing long array to create a new buffer Inheritance System.Object Buffer Int64Buffer Implements System.IComparable < Int64Buffer > Inherited Members Buffer.Capacity Buffer.Clear() Buffer.Flip() Buffer.HasRemaining Buffer.IsReadOnly Buffer.Limit Buffer.SetLimit(Int32) Buffer.Mark() Buffer.Position Buffer.SetPosition(Int32) Buffer.Remaining Buffer.Reset() Buffer.Rewind() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public abstract class Int64Buffer : Buffer, IComparable<Int64Buffer> Properties | Improve this Doc View Source Array Declaration public long[] Array { get; } Property Value Type Description System.Int64 [] | Improve this Doc View Source ArrayOffset Declaration public int ArrayOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasArray Declaration public bool HasArray { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsDirect Declaration public abstract bool IsDirect { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Order Declaration public abstract ByteOrder Order { get; } Property Value Type Description ByteOrder | Improve this Doc View Source ProtectedArray Declaration protected abstract long[] ProtectedArray { get; } Property Value Type Description System.Int64 [] | Improve this Doc View Source ProtectedArrayOffset Declaration protected abstract int ProtectedArrayOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ProtectedHasArray Declaration protected abstract bool ProtectedHasArray { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Allocate(Int32) Creates a long buffer based on a newly allocated long array. Declaration public static Int64Buffer Allocate(int capacity) Parameters Type Name Description System.Int32 capacity the capacity of the new buffer. Returns Type Description Int64Buffer the created long buffer. Exceptions Type Condition System.ArgumentException if capacity is less than zero. | Improve this Doc View Source AsReadOnlyBuffer() Declaration public abstract Int64Buffer AsReadOnlyBuffer() Returns Type Description Int64Buffer | Improve this Doc View Source Compact() Declaration public abstract Int64Buffer Compact() Returns Type Description Int64Buffer | Improve this Doc View Source CompareTo(Int64Buffer) Declaration public int CompareTo(Int64Buffer otherBuffer) Parameters Type Name Description Int64Buffer otherBuffer Returns Type Description System.Int32 | Improve this Doc View Source Duplicate() Declaration public abstract Int64Buffer Duplicate() Returns Type Description Int64Buffer | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Get() Declaration public abstract long Get() Returns Type Description System.Int64 | Improve this Doc View Source Get(Int32) Declaration public abstract long Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int64 | Improve this Doc View Source Get(Int64[]) Declaration public virtual Int64Buffer Get(long[] dest) Parameters Type Name Description System.Int64 [] dest Returns Type Description Int64Buffer | Improve this Doc View Source Get(Int64[], Int32, Int32) Declaration public virtual Int64Buffer Get(long[] dest, int off, int len) Parameters Type Name Description System.Int64 [] dest System.Int32 off System.Int32 len Returns Type Description Int64Buffer | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Put(Int64Buffer) Declaration public virtual Int64Buffer Put(Int64Buffer src) Parameters Type Name Description Int64Buffer src Returns Type Description Int64Buffer | Improve this Doc View Source Put(Int32, Int64) Declaration public abstract Int64Buffer Put(int index, long l) Parameters Type Name Description System.Int32 index System.Int64 l Returns Type Description Int64Buffer | Improve this Doc View Source Put(Int64) Declaration public abstract Int64Buffer Put(long l) Parameters Type Name Description System.Int64 l Returns Type Description Int64Buffer | Improve this Doc View Source Put(Int64[]) Declaration public Int64Buffer Put(long[] src) Parameters Type Name Description System.Int64 [] src Returns Type Description Int64Buffer | Improve this Doc View Source Put(Int64[], Int32, Int32) Declaration public virtual Int64Buffer Put(long[] src, int off, int len) Parameters Type Name Description System.Int64 [] src System.Int32 off System.Int32 len Returns Type Description Int64Buffer | Improve this Doc View Source Slice() Declaration public abstract Int64Buffer Slice() Returns Type Description Int64Buffer | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Wrap(Int64[]) Creates a new long buffer by wrapping the given long array. Calling this method has the same effect as Wrap(array, 0, array.Length) . Declaration public static Int64Buffer Wrap(long[] array) Parameters Type Name Description System.Int64 [] array the long array which the new buffer will be based on. Returns Type Description Int64Buffer the created long buffer. | Improve this Doc View Source Wrap(Int64[], Int32, Int32) Declaration public static Int64Buffer Wrap(long[] array, int start, int len) Parameters Type Name Description System.Int64 [] array System.Int32 start System.Int32 len Returns Type Description Int64Buffer Implements System.IComparable<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.InvalidMarkException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.InvalidMarkException.html",
    "title": "Class InvalidMarkException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InvalidMarkException Inheritance System.Object System.Exception InvalidMarkException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public sealed class InvalidMarkException : Exception Constructors | Improve this Doc View Source InvalidMarkException() Declaration public InvalidMarkException() Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.ReadOnlyBufferException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.ReadOnlyBufferException.html",
    "title": "Class ReadOnlyBufferException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReadOnlyBufferException Inheritance System.Object System.Exception ReadOnlyBufferException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public sealed class ReadOnlyBufferException : Exception Constructors | Improve this Doc View Source ReadOnlyBufferException() Declaration public ReadOnlyBufferException() Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.SafeTextWriterWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.SafeTextWriterWrapper.html",
    "title": "Class SafeTextWriterWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SafeTextWriterWrapper Decorates a System.IO.TextWriter instance and makes no assumptions about whether System.IDisposable.Dispose() has been called on the inner instance or not. Acts like a circuit breaker - the first System.ObjectDisposedException caught turns it off and the rest of the calls are ignored after that point until Reset() is called. The primary purpose is for using a System.IO.TextWriter instance within a non-disposable parent object. Since the creator of the System.IO.TextWriter ultimately is responsible for disposing it, our non-disposable object has no way of knowing whether it is safe to use the System.IO.TextWriter . Wraping the System.IO.TextWriter within a SafeTextWriterWrapper ensures the non-disposable object can continue to make calls to the System.IO.TextWriter without raising exceptions (it is presumed that the System.IO.TextWriter functionality is optional). Inheritance System.Object System.IO.TextWriter SafeTextWriterWrapper Implements System.IDisposable Inherited Members System.IO.TextWriter.CoreNewLine System.IO.TextWriter.Null System.IO.TextWriter.Dispose() System.IO.TextWriter.WriteAsync(System.Char[]) System.IO.TextWriter.WriteLineAsync(System.Char[]) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class SafeTextWriterWrapper : TextWriter, IDisposable Constructors | Improve this Doc View Source SafeTextWriterWrapper(TextWriter) Declaration public SafeTextWriterWrapper(TextWriter textWriter) Parameters Type Name Description System.IO.TextWriter textWriter Properties | Improve this Doc View Source Encoding Declaration public override Encoding Encoding { get; } Property Value Type Description System.Text.Encoding Overrides System.IO.TextWriter.Encoding | Improve this Doc View Source FormatProvider Declaration public override IFormatProvider FormatProvider { get; } Property Value Type Description System.IFormatProvider Overrides System.IO.TextWriter.FormatProvider | Improve this Doc View Source NewLine Declaration public override string NewLine { get; set; } Property Value Type Description System.String Overrides System.IO.TextWriter.NewLine Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.TextWriter.Dispose(System.Boolean) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides System.IO.TextWriter.Flush() | Improve this Doc View Source FlushAsync() Declaration public override Task FlushAsync() Returns Type Description System.Threading.Tasks.Task Overrides System.IO.TextWriter.FlushAsync() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Reset() Declaration public virtual void Reset() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Write(Boolean) Declaration public override void Write(bool value) Parameters Type Name Description System.Boolean value Overrides System.IO.TextWriter.Write(System.Boolean) | Improve this Doc View Source Write(Char) Declaration public override void Write(char value) Parameters Type Name Description System.Char value Overrides System.IO.TextWriter.Write(System.Char) | Improve this Doc View Source Write(Char[]) Declaration public override void Write(char[] buffer) Parameters Type Name Description System.Char [] buffer Overrides System.IO.TextWriter.Write(System.Char[]) | Improve this Doc View Source Write(Char[], Int32, Int32) Declaration public override void Write(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Overrides System.IO.TextWriter.Write(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source Write(Decimal) Declaration public override void Write(decimal value) Parameters Type Name Description System.Decimal value Overrides System.IO.TextWriter.Write(System.Decimal) | Improve this Doc View Source Write(Double) Declaration public override void Write(double value) Parameters Type Name Description System.Double value Overrides System.IO.TextWriter.Write(System.Double) | Improve this Doc View Source Write(Int32) Declaration public override void Write(int value) Parameters Type Name Description System.Int32 value Overrides System.IO.TextWriter.Write(System.Int32) | Improve this Doc View Source Write(Int64) Declaration public override void Write(long value) Parameters Type Name Description System.Int64 value Overrides System.IO.TextWriter.Write(System.Int64) | Improve this Doc View Source Write(Object) Declaration public override void Write(object value) Parameters Type Name Description System.Object value Overrides System.IO.TextWriter.Write(System.Object) | Improve this Doc View Source Write(Single) Declaration public override void Write(float value) Parameters Type Name Description System.Single value Overrides System.IO.TextWriter.Write(System.Single) | Improve this Doc View Source Write(String) Declaration public override void Write(string value) Parameters Type Name Description System.String value Overrides System.IO.TextWriter.Write(System.String) | Improve this Doc View Source Write(String, Object) Declaration public override void Write(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 Overrides System.IO.TextWriter.Write(System.String, System.Object) | Improve this Doc View Source Write(String, Object, Object) Declaration public override void Write(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 Overrides System.IO.TextWriter.Write(System.String, System.Object, System.Object) | Improve this Doc View Source Write(String, Object, Object, Object) Declaration public override void Write(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 Overrides System.IO.TextWriter.Write(System.String, System.Object, System.Object, System.Object) | Improve this Doc View Source Write(String, Object[]) Declaration public override void Write(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg Overrides System.IO.TextWriter.Write(System.String, System.Object[]) | Improve this Doc View Source Write(UInt32) Declaration [CLSCompliant(false)] public override void Write(uint value) Parameters Type Name Description System.UInt32 value Overrides System.IO.TextWriter.Write(System.UInt32) | Improve this Doc View Source Write(UInt64) Declaration [CLSCompliant(false)] public override void Write(ulong value) Parameters Type Name Description System.UInt64 value Overrides System.IO.TextWriter.Write(System.UInt64) | Improve this Doc View Source WriteAsync(Char) Declaration public override Task WriteAsync(char value) Parameters Type Name Description System.Char value Returns Type Description System.Threading.Tasks.Task Overrides System.IO.TextWriter.WriteAsync(System.Char) | Improve this Doc View Source WriteAsync(Char[], Int32, Int32) Declaration public override Task WriteAsync(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Threading.Tasks.Task Overrides System.IO.TextWriter.WriteAsync(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source WriteAsync(String) Declaration public override Task WriteAsync(string value) Parameters Type Name Description System.String value Returns Type Description System.Threading.Tasks.Task Overrides System.IO.TextWriter.WriteAsync(System.String) | Improve this Doc View Source WriteLine() Declaration public override void WriteLine() Overrides System.IO.TextWriter.WriteLine() | Improve this Doc View Source WriteLine(Boolean) Declaration public override void WriteLine(bool value) Parameters Type Name Description System.Boolean value Overrides System.IO.TextWriter.WriteLine(System.Boolean) | Improve this Doc View Source WriteLine(Char) Declaration public override void WriteLine(char value) Parameters Type Name Description System.Char value Overrides System.IO.TextWriter.WriteLine(System.Char) | Improve this Doc View Source WriteLine(Char[]) Declaration public override void WriteLine(char[] buffer) Parameters Type Name Description System.Char [] buffer Overrides System.IO.TextWriter.WriteLine(System.Char[]) | Improve this Doc View Source WriteLine(Char[], Int32, Int32) Declaration public override void WriteLine(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Overrides System.IO.TextWriter.WriteLine(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source WriteLine(Decimal) Declaration public override void WriteLine(decimal value) Parameters Type Name Description System.Decimal value Overrides System.IO.TextWriter.WriteLine(System.Decimal) | Improve this Doc View Source WriteLine(Double) Declaration public override void WriteLine(double value) Parameters Type Name Description System.Double value Overrides System.IO.TextWriter.WriteLine(System.Double) | Improve this Doc View Source WriteLine(Int32) Declaration public override void WriteLine(int value) Parameters Type Name Description System.Int32 value Overrides System.IO.TextWriter.WriteLine(System.Int32) | Improve this Doc View Source WriteLine(Int64) Declaration public override void WriteLine(long value) Parameters Type Name Description System.Int64 value Overrides System.IO.TextWriter.WriteLine(System.Int64) | Improve this Doc View Source WriteLine(Object) Declaration public override void WriteLine(object value) Parameters Type Name Description System.Object value Overrides System.IO.TextWriter.WriteLine(System.Object) | Improve this Doc View Source WriteLine(Single) Declaration public override void WriteLine(float value) Parameters Type Name Description System.Single value Overrides System.IO.TextWriter.WriteLine(System.Single) | Improve this Doc View Source WriteLine(String) Declaration public override void WriteLine(string value) Parameters Type Name Description System.String value Overrides System.IO.TextWriter.WriteLine(System.String) | Improve this Doc View Source WriteLine(String, Object) Declaration public override void WriteLine(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 Overrides System.IO.TextWriter.WriteLine(System.String, System.Object) | Improve this Doc View Source WriteLine(String, Object, Object) Declaration public override void WriteLine(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 Overrides System.IO.TextWriter.WriteLine(System.String, System.Object, System.Object) | Improve this Doc View Source WriteLine(String, Object, Object, Object) Declaration public override void WriteLine(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 Overrides System.IO.TextWriter.WriteLine(System.String, System.Object, System.Object, System.Object) | Improve this Doc View Source WriteLine(String, Object[]) Declaration public override void WriteLine(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg Overrides System.IO.TextWriter.WriteLine(System.String, System.Object[]) | Improve this Doc View Source WriteLine(UInt32) Declaration [CLSCompliant(false)] public override void WriteLine(uint value) Parameters Type Name Description System.UInt32 value Overrides System.IO.TextWriter.WriteLine(System.UInt32) | Improve this Doc View Source WriteLine(UInt64) Declaration [CLSCompliant(false)] public override void WriteLine(ulong value) Parameters Type Name Description System.UInt64 value Overrides System.IO.TextWriter.WriteLine(System.UInt64) | Improve this Doc View Source WriteLineAsync() Declaration public override Task WriteLineAsync() Returns Type Description System.Threading.Tasks.Task Overrides System.IO.TextWriter.WriteLineAsync() | Improve this Doc View Source WriteLineAsync(Char) Declaration public override Task WriteLineAsync(char value) Parameters Type Name Description System.Char value Returns Type Description System.Threading.Tasks.Task Overrides System.IO.TextWriter.WriteLineAsync(System.Char) | Improve this Doc View Source WriteLineAsync(Char[], Int32, Int32) Declaration public override Task WriteLineAsync(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count Returns Type Description System.Threading.Tasks.Task Overrides System.IO.TextWriter.WriteLineAsync(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source WriteLineAsync(String) Declaration public override Task WriteLineAsync(string value) Parameters Type Name Description System.String value Returns Type Description System.Threading.Tasks.Task Overrides System.IO.TextWriter.WriteLineAsync(System.String) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectTrackingAllocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.DirectTrackingAllocator.html",
    "title": "Class ByteBlockPool.DirectTrackingAllocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBlockPool.DirectTrackingAllocator A simple ByteBlockPool.Allocator that never recycles, but tracks how much total RAM is in use. Inheritance System.Object ByteBlockPool.Allocator ByteBlockPool.DirectTrackingAllocator Inherited Members ByteBlockPool.Allocator.m_blockSize ByteBlockPool.Allocator.RecycleByteBlocks(IList<Byte[]>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class DirectTrackingAllocator : ByteBlockPool.Allocator Constructors | Improve this Doc View Source DirectTrackingAllocator(Counter) Declaration public DirectTrackingAllocator(Counter bytesUsed) Parameters Type Name Description Counter bytesUsed | Improve this Doc View Source DirectTrackingAllocator(Int32, Counter) Declaration public DirectTrackingAllocator(int blockSize, Counter bytesUsed) Parameters Type Name Description System.Int32 blockSize Counter bytesUsed Methods | Improve this Doc View Source GetByteBlock() Declaration public override byte[] GetByteBlock() Returns Type Description System.Byte [] Overrides ByteBlockPool.Allocator.GetByteBlock() | Improve this Doc View Source RecycleByteBlocks(Byte[][], Int32, Int32) Declaration public override void RecycleByteBlocks(byte[][] blocks, int start, int end) Parameters Type Name Description System.Byte [][] blocks System.Int32 start System.Int32 end Overrides ByteBlockPool.Allocator.RecycleByteBlocks(Byte[][], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRef.html",
    "title": "Class BytesRef | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRef Represents byte[] , as a slice (offset + length) into an existing byte[] . The Bytes property should never be null ; use EMPTY_BYTES if necessary. Important note: Unless otherwise noted, Lucene uses this class to represent terms that are encoded as UTF8 bytes in the index. To convert them to a .NET System.String (which is UTF16), use Utf8ToString() . Using code like new String(bytes, offset, length) to do this is wrong , as it does not respect the correct character set and may return wrong results (depending on the platform's defaults)! Inheritance System.Object BytesRef Implements System.IComparable < BytesRef > System.IComparable Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BytesRef : IComparable<BytesRef>, IComparable Constructors | Improve this Doc View Source BytesRef() Create a BytesRef with EMPTY_BYTES Declaration public BytesRef() | Improve this Doc View Source BytesRef(ICharSequence) Initialize the byte[] from the UTF8 bytes for the provided ICharSequence . Declaration public BytesRef(ICharSequence text) Parameters Type Name Description ICharSequence text This must be well-formed unicode text, with no unpaired surrogates. | Improve this Doc View Source BytesRef(Byte[]) This instance will directly reference bytes w/o making a copy. bytes should not be null . Declaration public BytesRef(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source BytesRef(Byte[], Int32, Int32) This instance will directly reference bytes w/o making a copy. bytes should not be null . Declaration public BytesRef(byte[] bytes, int offset, int length) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 length | Improve this Doc View Source BytesRef(Int32) Create a BytesRef pointing to a new array of size capacity . Offset and length will both be zero. Declaration public BytesRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source BytesRef(String) Initialize the byte[] from the UTF8 bytes for the provided System.String . Declaration public BytesRef(string text) Parameters Type Name Description System.String text This must be well-formed unicode text, with no unpaired surrogates. Fields | Improve this Doc View Source EMPTY_BYTES An empty byte array for convenience Declaration public static readonly byte[] EMPTY_BYTES Field Value Type Description System.Byte [] Properties | Improve this Doc View Source Bytes The contents of the BytesRef. Should never be null . Declaration public byte[] Bytes { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Length Length of used bytes. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid byte. Declaration public int Offset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source UTF8SortedAsUnicodeComparer Declaration public static IComparer<BytesRef> UTF8SortedAsUnicodeComparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source UTF8SortedAsUTF16Comparer Declaration [Obsolete(\"this comparer is only a transition mechanism\")] public static IComparer<BytesRef> UTF8SortedAsUTF16Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Append(BytesRef) Appends the bytes from the given BytesRef NOTE: if this would exceed the array size, this method creates a new reference array. Declaration public void Append(BytesRef other) Parameters Type Name Description BytesRef other | Improve this Doc View Source BytesEquals(BytesRef) Expert: Compares the bytes against another BytesRef , returning true if the bytes are equal. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public bool BytesEquals(BytesRef other) Parameters Type Name Description BytesRef other Another BytesRef , should not be null . Returns Type Description System.Boolean | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying bytes are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(BytesRef) | Improve this Doc View Source CompareTo(BytesRef) Unsigned byte order comparison Declaration public int CompareTo(BytesRef other) Parameters Type Name Description BytesRef other Returns Type Description System.Int32 | Improve this Doc View Source CompareTo(Object) Unsigned byte order comparison Declaration public int CompareTo(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 | Improve this Doc View Source CopyBytes(BytesRef) Copies the bytes from the given BytesRef NOTE: if this would exceed the array size, this method creates a new reference array. Declaration public void CopyBytes(BytesRef other) Parameters Type Name Description BytesRef other | Improve this Doc View Source CopyChars(ICharSequence) Copies the UTF8 bytes for this ICharSequence . Declaration public void CopyChars(ICharSequence text) Parameters Type Name Description ICharSequence text Must be well-formed unicode text, with no unpaired surrogates or invalid UTF16 code units. | Improve this Doc View Source CopyChars(String) Copies the UTF8 bytes for this System.String . Declaration public void CopyChars(string text) Parameters Type Name Description System.String text Must be well-formed unicode text, with no unpaired surrogates or invalid UTF16 code units. | Improve this Doc View Source DeepCopyOf(BytesRef) Creates a new BytesRef that points to a copy of the bytes from other . The returned BytesRef will have a length of other.Length and an offset of zero. Declaration public static BytesRef DeepCopyOf(BytesRef other) Parameters Type Name Description BytesRef other Returns Type Description BytesRef | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Calculates the hash code as required by Lucene.Net.Index.TermsHash during indexing. This is currently implemented as MurmurHash3 (32 bit), using the seed from GOOD_FAST_HASH_SEED , but is subject to change from release to release. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws System.InvalidOperationException ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source ToString() Returns hex encoded bytes, eg [0x6c 0x75 0x63 0x65 0x6e 0x65] Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Utf8ToString() Interprets stored bytes as UTF8 bytes, returning the resulting System.String . Declaration public string Utf8ToString() Returns Type Description System.String Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.DirectBytesStartArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.DirectBytesStartArray.html",
    "title": "Class BytesRefHash.DirectBytesStartArray | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefHash.DirectBytesStartArray A simple BytesRefHash.BytesStartArray that tracks memory allocation using a private Counter instance. Inheritance System.Object BytesRefHash.BytesStartArray BytesRefHash.DirectBytesStartArray Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class DirectBytesStartArray : BytesRefHash.BytesStartArray Constructors | Improve this Doc View Source DirectBytesStartArray(Int32) Declaration public DirectBytesStartArray(int initSize) Parameters Type Name Description System.Int32 initSize | Improve this Doc View Source DirectBytesStartArray(Int32, Counter) Declaration public DirectBytesStartArray(int initSize, Counter counter) Parameters Type Name Description System.Int32 initSize Counter counter Fields | Improve this Doc View Source m_initSize Declaration protected readonly int m_initSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source BytesUsed() Declaration public override Counter BytesUsed() Returns Type Description Counter Overrides BytesRefHash.BytesStartArray.BytesUsed() | Improve this Doc View Source Clear() Declaration public override int[] Clear() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Clear() | Improve this Doc View Source Grow() Declaration public override int[] Grow() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Grow() | Improve this Doc View Source Init() Declaration public override int[] Init() Returns Type Description System.Int32 [] Overrides BytesRefHash.BytesStartArray.Init() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.MaxBytesLengthExceededException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.MaxBytesLengthExceededException.html",
    "title": "Class BytesRefHash.MaxBytesLengthExceededException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefHash.MaxBytesLengthExceededException Thrown if a BytesRef exceeds the BytesRefHash limit of BYTE_BLOCK_SIZE -2. Inheritance System.Object System.Exception BytesRefHash.MaxBytesLengthExceededException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MaxBytesLengthExceededException : Exception Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.html",
    "title": "Class BytesRefHash | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefHash BytesRefHash is a special purpose hash-map like data-structure optimized for BytesRef instances. BytesRefHash maintains mappings of byte arrays to ids (Map<BytesRef,int>) storing the hashed bytes efficiently in continuous storage. The mapping to the id is encapsulated inside BytesRefHash and is guaranteed to be increased for each added BytesRef . Note: The maximum capacity BytesRef instance passed to Add(BytesRef) must not be longer than BYTE_BLOCK_SIZE -2. The internal storage is limited to 2GB total byte storage. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object BytesRefHash Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BytesRefHash : IDisposable Constructors | Improve this Doc View Source BytesRefHash() Creates a new BytesRefHash with a ByteBlockPool using a ByteBlockPool.DirectAllocator . Declaration public BytesRefHash() | Improve this Doc View Source BytesRefHash(ByteBlockPool) Creates a new BytesRefHash Declaration public BytesRefHash(ByteBlockPool pool) Parameters Type Name Description ByteBlockPool pool | Improve this Doc View Source BytesRefHash(ByteBlockPool, Int32, BytesRefHash.BytesStartArray) Creates a new BytesRefHash Declaration public BytesRefHash(ByteBlockPool pool, int capacity, BytesRefHash.BytesStartArray bytesStartArray) Parameters Type Name Description ByteBlockPool pool System.Int32 capacity BytesRefHash.BytesStartArray bytesStartArray Fields | Improve this Doc View Source DEFAULT_CAPACITY Declaration public const int DEFAULT_CAPACITY = 16 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Count Returns the number of BytesRef values in this BytesRefHash . NOTE: This was size() in Lucene. Declaration public int Count { get; } Property Value Type Description System.Int32 The number of BytesRef values in this BytesRefHash . Methods | Improve this Doc View Source Add(BytesRef) Adds a new BytesRef Declaration public int Add(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to hash Returns Type Description System.Int32 The id the given bytes are hashed if there was no mapping for the given bytes, otherwise (-(id)-1) . this guarantees that the return value will always be >= 0 if the given bytes haven't been hashed before. Exceptions Type Condition BytesRefHash.MaxBytesLengthExceededException if the given bytes are > 2 + BYTE_BLOCK_SIZE | Improve this Doc View Source AddByPoolOffset(Int32) Adds a \"arbitrary\" int offset instead of a BytesRef term. This is used in the indexer to hold the hash for term vectors, because they do not redundantly store the byte[] term directly and instead reference the byte[] term already stored by the postings BytesRefHash . See Lucene.Net.Index.TermsHashPerField.Add(System.Int32) . Declaration public int AddByPoolOffset(int offset) Parameters Type Name Description System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source ByteStart(Int32) Returns the bytesStart offset into the internally used ByteBlockPool for the given bytesID Declaration public int ByteStart(int bytesID) Parameters Type Name Description System.Int32 bytesID The id to look up Returns Type Description System.Int32 The bytesStart offset into the internally used ByteBlockPool for the given id | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Clear(Boolean) Clears the BytesRef which maps to the given BytesRef Declaration public void Clear(bool resetPool) Parameters Type Name Description System.Boolean resetPool | Improve this Doc View Source Compact() Returns the ids array in arbitrary order. Valid ids start at offset of 0 and end at a limit of Count - 1 Note: this is a destructive operation. Clear() must be called in order to reuse this BytesRefHash instance. Declaration public int[] Compact() Returns Type Description System.Int32 [] | Improve this Doc View Source Dispose() Closes the BytesRefHash and releases all internally used memory Declaration public void Dispose() | Improve this Doc View Source Find(BytesRef) Returns the id of the given BytesRef . Declaration public int Find(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to look for Returns Type Description System.Int32 The id of the given bytes, or -1 if there is no mapping for the given bytes. | Improve this Doc View Source Get(Int32, BytesRef) Populates and returns a BytesRef with the bytes for the given bytesID. Note: the given bytesID must be a positive integer less than the current size ( Count ) Declaration public BytesRef Get(int bytesID, BytesRef ref) Parameters Type Name Description System.Int32 bytesID The id BytesRef ref The BytesRef to populate Returns Type Description BytesRef The given BytesRef instance populated with the bytes for the given bytesID | Improve this Doc View Source Reinit() Reinitializes the BytesRefHash after a previous Clear() call. If Clear() has not been called previously this method has no effect. Declaration public void Reinit() | Improve this Doc View Source Sort(IComparer<BytesRef>) Returns the values array sorted by the referenced byte values. Note: this is a destructive operation. Clear() must be called in order to reuse this BytesRefHash instance. Declaration public int[] Sort(IComparer<BytesRef> comp) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comp The IComparer{BytesRef} used for sorting Returns Type Description System.Int32 [] Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IAttributeReflector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAttributeReflector.html",
    "title": "Interface IAttributeReflector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAttributeReflector This interface is used to reflect contents of AttributeSource or Attribute . Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAttributeReflector Methods | Improve this Doc View Source Reflect(Type, String, Object) This method gets called for every property in an Attribute / AttributeSource passing the System.Type of the IAttribute , a key and the actual value . E.g., an invocation of ReflectWith(IAttributeReflector) would call this method once using typeof(Analysis.TokenAttributes.ICharTermAttribute) as attribute type, \"term\" as key and the actual value as a System.String . Declaration void Reflect(Type type, string key, object value) Parameters Type Name Description System.Type type System.String key System.Object value | Improve this Doc View Source Reflect<T>(String, Object) LUCENENET specific overload to support generics. Declaration void Reflect<T>(string key, object value) where T : IAttribute Parameters Type Name Description System.String key System.Object value Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IMutableBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IMutableBits.html",
    "title": "Interface IMutableBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMutableBits Extension of IBits for live documents. Inherited Members IBits.Get(Int32) IBits.Length Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IMutableBits : IBits Methods | Improve this Doc View Source Clear(Int32) Sets the bit specified by index to false . Declaration void Clear(int index) Parameters Type Name Description System.Int32 index index, should be non-negative and < Length . The result of passing negative or out of bounds values is undefined by this interface, just don't do it! Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSource.html",
    "title": "Class ValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ValueSource Instantiates FunctionValues for a particular reader. Often used when creating a FunctionQuery . Inheritance System.Object ValueSource BoolFunction ConstNumberSource DocFreqValueSource DualSingleFunction FieldCacheSource LinearSingleFunction LiteralValueSource MaxDocValueSource MultiFunction MultiSingleFunction MultiValueSource NormValueSource NumDocsValueSource OrdFieldSource QueryValueSource RangeMapSingleFunction ReciprocalSingleFunction ReverseOrdFieldSource ScaleSingleFunction SingularFunction SumTotalTermFreqValueSource TotalTermFreqValueSource Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Implementations should propagate CreateWeight to sub-ValueSources which can optionally store weight info in the context. The context object will be passed to GetValues() where this info can be retrieved. Declaration public virtual void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher | Improve this Doc View Source Equals(Object) Declaration public abstract override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDescription() description of field, used in Explain() Declaration public abstract string GetDescription() Returns Type Description System.String | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetSortField(Boolean) EXPERIMENTAL: This method is subject to change. Get the SortField for this ValueSource . Uses the GetValues(IDictionary, AtomicReaderContext) to populate the SortField . Declaration public virtual SortField GetSortField(bool reverse) Parameters Type Name Description System.Boolean reverse true if this is a reverse sort. Returns Type Description SortField The SortField for the ValueSource | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Gets the values for this reader and the context that was previously passed to CreateWeight(IDictionary, IndexSearcher) Declaration public abstract FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues | Improve this Doc View Source NewContext(IndexSearcher) Returns a new non-threadsafe context map. Declaration public static IDictionary NewContext(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description System.Collections.IDictionary | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.html",
    "title": "Class FunctionValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionValues Represents field values as different types. Normally created via a ValueSource for a particular field and reader. Inheritance System.Object FunctionValues BoolDocValues DocTermsIndexDocValues DoubleDocValues Int32DocValues Int64DocValues SingleDocValues StrDocValues MultiFunction.Values Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class FunctionValues Properties | Improve this Doc View Source NumOrd Declaration public virtual int NumOrd { get; } Property Value Type Description System.Int32 the number of unique sort ordinals this instance has Methods | Improve this Doc View Source BoolVal(Int32) Declaration public virtual bool BoolVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source BytesVal(Int32, BytesRef) returns the bytes representation of the str val - TODO: should this return the indexed raw bytes not? Declaration public virtual bool BytesVal(int doc, BytesRef target) Parameters Type Name Description System.Int32 doc BytesRef target Returns Type Description System.Boolean | Improve this Doc View Source ByteVal(Int32) Declaration public virtual byte ByteVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Byte | Improve this Doc View Source ByteVal(Int32, Byte[]) Declaration public virtual void ByteVal(int doc, byte[] vals) Parameters Type Name Description System.Int32 doc System.Byte [] vals | Improve this Doc View Source DoubleVal(Int32) Declaration public virtual double DoubleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Double | Improve this Doc View Source DoubleVal(Int32, Double[]) Declaration public virtual void DoubleVal(int doc, double[] vals) Parameters Type Name Description System.Int32 doc System.Double [] vals | Improve this Doc View Source Exists(Int32) Returns true if there is a value for this document Declaration public virtual bool Exists(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Boolean | Improve this Doc View Source Explain(Int32) Declaration public virtual Explanation Explain(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Explanation | Improve this Doc View Source GetRangeScorer(IndexReader, String, String, Boolean, Boolean) Declaration public virtual ValueSourceScorer GetRangeScorer(IndexReader reader, string lowerVal, string upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description IndexReader reader System.String lowerVal System.String upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description ValueSourceScorer | Improve this Doc View Source GetScorer(IndexReader) Declaration public virtual ValueSourceScorer GetScorer(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description ValueSourceScorer | Improve this Doc View Source GetValueFiller() @lucene.experimental Declaration public virtual FunctionValues.ValueFiller GetValueFiller() Returns Type Description FunctionValues.ValueFiller | Improve this Doc View Source Int16Val(Int32) NOTE: This was shortVal() in Lucene Declaration public virtual short Int16Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int16 | Improve this Doc View Source Int16Val(Int32, Int16[]) NOTE: This was shortVal() in Lucene Declaration public virtual void Int16Val(int doc, short[] vals) Parameters Type Name Description System.Int32 doc System.Int16 [] vals | Improve this Doc View Source Int32Val(Int32) NOTE: This was intVal() in Lucene Declaration public virtual int Int32Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int32 | Improve this Doc View Source Int32Val(Int32, Int32[]) NOTE: This was intVal() in Lucene Declaration public virtual void Int32Val(int doc, int[] vals) Parameters Type Name Description System.Int32 doc System.Int32 [] vals | Improve this Doc View Source Int64Val(Int32) NOTE: This was longVal() in Lucene Declaration public virtual long Int64Val(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Int64 | Improve this Doc View Source Int64Val(Int32, Int64[]) NOTE: This was longVal() in Lucene Declaration public virtual void Int64Val(int doc, long[] vals) Parameters Type Name Description System.Int32 doc System.Int64 [] vals | Improve this Doc View Source ObjectVal(Int32) Native System.Object representation of the value Declaration public virtual object ObjectVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Object | Improve this Doc View Source OrdVal(Int32) Declaration public virtual int OrdVal(int doc) Parameters Type Name Description System.Int32 doc The doc to retrieve to sort ordinal for Returns Type Description System.Int32 the sort ordinal for the specified doc TODO: Maybe we can just use intVal for this... | Improve this Doc View Source SingleVal(Int32) NOTE: This was floatVal() in Lucene Declaration public virtual float SingleVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.Single | Improve this Doc View Source SingleVal(Int32, Single[]) NOTE: This was floatVal() in Lucene Declaration public virtual void SingleVal(int doc, float[] vals) Parameters Type Name Description System.Int32 doc System.Single [] vals | Improve this Doc View Source StrVal(Int32) Declaration public virtual string StrVal(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String | Improve this Doc View Source StrVal(Int32, String[]) Declaration public virtual void StrVal(int doc, string[] vals) Parameters Type Name Description System.Int32 doc System.String [] vals | Improve this Doc View Source ToString(Int32) Declaration public abstract string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.ValueFiller.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.FunctionValues.ValueFiller.html",
    "title": "Class FunctionValues.ValueFiller | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FunctionValues.ValueFiller Abstraction of the logic required to fill the value of a specified doc into a reusable MutableValue . Implementations of FunctionValues are encouraged to define their own implementations of FunctionValues.ValueFiller if their value is not a System.Single . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FunctionValues.ValueFiller Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function Assembly : Lucene.Net.Queries.dll Syntax public abstract class ValueFiller Properties | Improve this Doc View Source Value MutableValue will be reused across calls Declaration public abstract MutableValue Value { get; } Property Value Type Description MutableValue Methods | Improve this Doc View Source FillValue(Int32) MutableValue will be reused across calls. Returns true if the value exists. Declaration public abstract void FillValue(int doc) Parameters Type Name Description System.Int32 doc"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.DocValues.html",
    "title": "Namespace Lucene.Net.Queries.Function.DocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function.DocValues Classes BoolDocValues Abstract FunctionValues implementation which supports retrieving System.Boolean values. Implementations can control how the System.Boolean values are loaded through BoolVal(Int32) DocTermsIndexDocValues Serves as base class for FunctionValues based on DocTermsIndex. This is a Lucene.NET INTERNAL API, use at your own risk DocTermsIndexDocValues.DocTermsIndexException Custom System.Exception to be thrown when the DocTermsIndex for a field cannot be generated DoubleDocValues Abstract FunctionValues implementation which supports retrieving System.Double values. Implementations can control how the System.Double values are loaded through DoubleVal(Int32) Int32DocValues Abstract FunctionValues implementation which supports retrieving System.Int32 values. Implementations can control how the System.Int32 values are loaded through Int32Val(Int32) NOTE: This was IntDocValues in Lucene Int64DocValues Abstract FunctionValues implementation which supports retrieving System.Int64 values. Implementations can control how the System.Int64 values are loaded through Int64Val(Int32) NOTE: This was LongDocValues in Lucene SingleDocValues Abstract FunctionValues implementation which supports retrieving System.Single values. Implementations can control how the System.Single values are loaded through SingleVal(Int32) NOTE: This was FloatDocValues in Lucene StrDocValues Abstract FunctionValues implementation which supports retrieving System.String values. Implementations can control how the System.String values are loaded through StrVal(Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.FilterClause.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.FilterClause.html",
    "title": "Class FilterClause | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterClause A Filter that wrapped with an indication of how that filter is used when composed with another filter. (Follows the boolean logic in BooleanClause for composition of queries.) Inheritance System.Object FilterClause Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public sealed class FilterClause Constructors | Improve this Doc View Source FilterClause(Filter, Occur) Create a new FilterClause Declaration public FilterClause(Filter filter, Occur occur) Parameters Type Name Description Filter filter A Filter object containing a BitSet Occur occur A parameter implementation indicating SHOULD, MUST or MUST NOT Properties | Improve this Doc View Source Filter Returns this FilterClause 's filter Declaration public Filter Filter { get; } Property Value Type Description Filter A Filter object | Improve this Doc View Source Occur Returns this FilterClause 's occur parameter Declaration public Occur Occur { get; } Property Value Type Description Occur An Occur object Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreProvider.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.CustomScoreProvider.html",
    "title": "Class CustomScoreProvider | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CustomScoreProvider An instance of this subclass should be returned by GetCustomScoreProvider(AtomicReaderContext) , if you want to modify the custom score calculation of a CustomScoreQuery . Since Lucene 2.9, queries operate on each segment of an index separately, so the protected m_context field can be used to resolve doc IDs, as the supplied doc ID is per-segment and without knowledge of the IndexReader you cannot access the document or IFieldCache . @lucene.experimental @since 2.9.2 Inheritance System.Object CustomScoreProvider Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class CustomScoreProvider Constructors | Improve this Doc View Source CustomScoreProvider(AtomicReaderContext) Creates a new instance of the provider class for the given IndexReader . Declaration public CustomScoreProvider(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Fields | Improve this Doc View Source m_context Declaration protected readonly AtomicReaderContext m_context Field Value Type Description AtomicReaderContext Methods | Improve this Doc View Source CustomExplain(Int32, Explanation, Explanation) Explain the custom score. Whenever overriding CustomScore(Int32, Single, Single) , this method should also be overridden to provide the correct explanation for the part of the custom scoring. Declaration public virtual Explanation CustomExplain(int doc, Explanation subQueryExpl, Explanation valSrcExpl) Parameters Type Name Description System.Int32 doc doc being explained. Explanation subQueryExpl explanation for the sub-query part. Explanation valSrcExpl explanation for the value source part. Returns Type Description Explanation an explanation for the custom score | Improve this Doc View Source CustomExplain(Int32, Explanation, Explanation[]) Explain the custom score. Whenever overriding CustomScore(Int32, Single, Single[]) , this method should also be overridden to provide the correct explanation for the part of the custom scoring. Declaration public virtual Explanation CustomExplain(int doc, Explanation subQueryExpl, Explanation[] valSrcExpls) Parameters Type Name Description System.Int32 doc doc being explained. Explanation subQueryExpl explanation for the sub-query part. Explanation [] valSrcExpls explanation for the value source part. Returns Type Description Explanation an explanation for the custom score | Improve this Doc View Source CustomScore(Int32, Single, Single) Compute a custom score by the subQueryScore and the FunctionQuery score. Subclasses can override this method to modify the custom score. If your custom scoring is different than the default herein you should override at least one of the two CustomScore(Int32, Single, Single) methods. If the number of FunctionQuery s is always < 2 it is sufficient to override this CustomScore(Int32, Single, Single) method, which is simpler. The default computation herein is a multiplication of the two scores: ModifiedScore = subQueryScore * valSrcScore Declaration public virtual float CustomScore(int doc, float subQueryScore, float valSrcScore) Parameters Type Name Description System.Int32 doc id of scored doc. System.Single subQueryScore score of that doc by the subQuery. System.Single valSrcScore score of that doc by the FunctionQuery . Returns Type Description System.Single custom score. | Improve this Doc View Source CustomScore(Int32, Single, Single[]) Compute a custom score by the subQuery score and a number of FunctionQuery scores. Subclasses can override this method to modify the custom score. If your custom scoring is different than the default herein you should override at least one of the two CustomScore(Int32, Single, Single) methods. If the number of FunctionQuery s is always < 2 it is sufficient to override the other CustomScore(Int32, Single, Single) method, which is simpler. The default computation herein is a multiplication of given scores: ModifiedScore = valSrcScore * valSrcScores[0] * valSrcScores[1] * ... Declaration public virtual float CustomScore(int doc, float subQueryScore, float[] valSrcScores) Parameters Type Name Description System.Int32 doc id of scored doc. System.Single subQueryScore score of that doc by the subQuery. System.Single [] valSrcScores scores of that doc by the FunctionQuery . Returns Type Description System.Single custom score."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFormatter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFormatter.html",
    "title": "Interface IFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFormatter Processes terms found in the original text, typically by applying some form of mark-up to highlight terms in HTML search results pages. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFormatter Methods | Improve this Doc View Source HighlightTerm(String, TokenGroup) Declaration string HighlightTerm(string originalText, TokenGroup tokenGroup) Parameters Type Name Description System.String originalText The section of text being considered for markup TokenGroup tokenGroup contains one or several overlapping Tokens along with their scores and positions. Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IEncoder.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IEncoder.html",
    "title": "Interface IEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IEncoder Encodes original text. The IEncoder works with the IFormatter to generate the output. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IEncoder Methods | Improve this Doc View Source EncodeText(String) Declaration string EncodeText(string originalText) Parameters Type Name Description System.String originalText The section of text being output Returns Type Description System.String"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.Highlighter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.Highlighter.html",
    "title": "Class Highlighter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Highlighter Class used to markup highlighted terms found in the best sections of a text, using configurable IFragmenter , Scorer , IFormatter , IEncoder and tokenizers. Inheritance System.Object Highlighter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class Highlighter Constructors | Improve this Doc View Source Highlighter(IFormatter, IEncoder, IScorer) Declaration public Highlighter(IFormatter formatter, IEncoder encoder, IScorer fragmentScorer) Parameters Type Name Description IFormatter formatter IEncoder encoder IScorer fragmentScorer | Improve this Doc View Source Highlighter(IFormatter, IScorer) Declaration public Highlighter(IFormatter formatter, IScorer fragmentScorer) Parameters Type Name Description IFormatter formatter IScorer fragmentScorer | Improve this Doc View Source Highlighter(IScorer) Declaration public Highlighter(IScorer fragmentScorer) Parameters Type Name Description IScorer fragmentScorer Fields | Improve this Doc View Source DEFAULT_MAX_CHARS_TO_ANALYZE Declaration public static readonly int DEFAULT_MAX_CHARS_TO_ANALYZE Field Value Type Description System.Int32 Properties | Improve this Doc View Source Encoder Declaration public virtual IEncoder Encoder { get; set; } Property Value Type Description IEncoder | Improve this Doc View Source FragmentScorer Declaration public virtual IScorer FragmentScorer { get; set; } Property Value Type Description IScorer | Improve this Doc View Source MaxDocCharsToAnalyze Declaration public virtual int MaxDocCharsToAnalyze { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TextFragmenter Declaration public virtual IFragmenter TextFragmenter { get; set; } Property Value Type Description IFragmenter Methods | Improve this Doc View Source GetBestFragment(Analyzer, String, String) Highlights chosen terms in a text, extracting the most relevant section. This is a convenience method that calls GetBestFragment(TokenStream, String) Declaration public string GetBestFragment(Analyzer analyzer, string fieldName, string text) Parameters Type Name Description Analyzer analyzer the analyzer that will be used to split text into chunks System.String fieldName Name of field used to influence analyzer's tokenization policy System.String text text to highlight terms in Returns Type Description System.String highlighted text fragment or null if no terms found Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragment(TokenStream, String) Highlights chosen terms in a text, extracting the most relevant section. The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragment with the highest score is returned Declaration public string GetBestFragment(TokenStream tokenStream, string text) Parameters Type Name Description TokenStream tokenStream A stream of tokens identified in the text parameter, including offset information. This is typically produced by an analyzer re-parsing a document's text. Some work may be done on retrieving TokenStreams more efficiently by adding support for storing original text position data in the Lucene index but this support is not currently available (as of Lucene 1.4 rc2). System.String text text to highlight terms in Returns Type Description System.String highlighted text fragment or null if no terms found Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(Analyzer, String, String, Int32) Highlights chosen terms in a text, extracting the most relevant sections. This is a convenience method that calls GetBestFragments(TokenStream, String, Int32) Declaration public string[] GetBestFragments(Analyzer analyzer, string fieldName, string text, int maxNumFragments) Parameters Type Name Description Analyzer analyzer the analyzer that will be used to split text into chunks System.String fieldName the name of the field being highlighted (used by analyzer) System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. Returns Type Description System.String [] highlighted text fragments (between 0 and maxNumFragments number of fragments) Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(TokenStream, String, Int32) Highlights chosen terms in a text, extracting the most relevant sections. The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragments with the highest scores are returned as an array of strings in order of score (contiguous fragments are merged into one in their original order to improve readability) Declaration public string[] GetBestFragments(TokenStream tokenStream, string text, int maxNumFragments) Parameters Type Name Description TokenStream tokenStream System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. Returns Type Description System.String [] highlighted text fragments (between 0 and maxNumFragments number of fragments) Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestFragments(TokenStream, String, Int32, String) Highlights terms in the text , extracting the most relevant sections and concatenating the chosen fragments with a separator (typically \"...\"). The document text is analysed in chunks to record hit statistics across the document. After accumulating stats, the fragments with the highest scores are returned in order as \"separator\" delimited strings. Declaration public virtual string GetBestFragments(TokenStream tokenStream, string text, int maxNumFragments, string separator) Parameters Type Name Description TokenStream tokenStream System.String text text to highlight terms in System.Int32 maxNumFragments the maximum number of fragments. System.String separator the separator used to intersperse the document fragments (typically \"...\") Returns Type Description System.String highlighted text Exceptions Type Condition InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length | Improve this Doc View Source GetBestTextFragments(TokenStream, String, Boolean, Int32) Low level api to get the most relevant (formatted) sections of the document. This method has been made public to allow visibility of score information held in TextFragment objects. Thanks to Jason Calabrese for help in redefining the interface. Declaration public TextFragment[] GetBestTextFragments(TokenStream tokenStream, string text, bool mergeContiguousFragments, int maxNumFragments) Parameters Type Name Description TokenStream tokenStream System.String text System.Boolean mergeContiguousFragments System.Int32 maxNumFragments Returns Type Description TextFragment [] Exceptions Type Condition System.IO.IOException If there is a low-level I/O error InvalidTokenOffsetsException thrown if any token's EndOffset exceeds the provided text's length"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.html",
    "title": "Namespace Lucene.Net.Search.Grouping | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping Classes AbstractAllGroupHeadsCollector LUCENENET specific class used to reference an AbstractAllGroupHeadsCollector<GH> subclass without refering to its generic closing type. AbstractAllGroupHeadsCollector_GroupHead Represents a group head. A group head is the most relevant document for a particular group. The relevancy is based is usually based on the sort. The group head contains a group value with its associated most relevant document id. AbstractAllGroupHeadsCollector<GH> This collector specializes in collecting the most relevant document (group head) for each group that match the query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractAllGroupHeadsCollector<GH>.TemporalResult Contains the result of group head retrieval. To prevent new object creations of this class for every collect. AbstractAllGroupsCollector<TGroupValue> A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. This is an abstract version. Concrete implementations define what a group actually is and how it is internally collected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractDistinctValuesCollector LUCENENET specific class used to nest the AbstractDistinctValuesCollector.GroupCount<TGroupValue> class so it has similar syntax to that in Java Lucene (AbstractDistinctValuesCollector.GroupCount{TGroupValue} rather than AbstractDistinctValuesCollector{GC}.GroupCount{TGroupValue}). AbstractDistinctValuesCollector.GroupCount<TGroupValue> Returned by Groups , representing the value and set of distinct values for the group. AbstractDistinctValuesCollector<GC> A second pass grouping collector that keeps track of distinct values for a specified field for the top N group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractFirstPassGroupingCollector<TGroupValue> FirstPassGroupingCollector is the first of two passes necessary to collect grouped hits. This pass gathers the top N sorted groups. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractGroupFacetCollector Base class for computing grouped facets. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractGroupFacetCollector.AbstractSegmentResult Contains the local grouped segment counts for a particular segment. Each AbstractGroupFacetCollector.AbstractSegmentResult must be added together. AbstractGroupFacetCollector.FacetEntry Represents a facet entry with a value and a count. AbstractGroupFacetCollector.GroupedFacetResult The grouped facet result. Containing grouped facet entries, total count and total missing count. AbstractSecondPassGroupingCollector LUCENENET specific class used to simulate the syntax used to access nested classes of AbstractAllGroupHeadsCollector<GH> without referencing the generic closing type. AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> AbstractSecondPassGroupingCollector<TGroupValue> SecondPassGroupingCollector is the second of two passes necessary to collect grouped docs. This pass gathers the top N documents per top group computed from the first pass. Concrete subclasses define what a group is and how it is internally collected. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockGroupingCollector BlockGroupingCollector performs grouping with a single pass collector, as long as you are grouping by a doc block field, ie all documents sharing a given group value were indexed as a doc block using the atomic AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. This results in faster performance (~25% faster QPS) than the two-pass grouping collectors, with the tradeoff being that the documents in each group must always be indexed as a block. This collector also fills in TopGroups.totalGroupCount without requiring the separate TermAllGroupsCollector . However, this collector does not fill in the groupValue of each group; this field will always be null. NOTE : this collector makes no effort to verify the docs were in fact indexed as a block, so it's up to you to ensure this was the case. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollectedSearchGroup<TGroupValue> Expert: representation of a group in AbstractFirstPassGroupingCollector<TGroupValue> , tracking the top doc and FieldComparer slot. This is a Lucene.NET INTERNAL API, use at your own risk GroupDocs<TGroupValue> Represents one group in the results. @lucene.experimental GroupingSearch Convenience class to perform grouping in a non distributed environment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SearchGroup LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of SearchGroup<TGroupValue> ) SearchGroup<TGroupValue> Represents a group that is found during the first pass search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopGroups LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of TopGroups<TGroupValue> ) TopGroups<TGroupValue> Represents result returned by a grouping search. @lucene.experimental Interfaces AbstractDistinctValuesCollector.IGroupCount<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue IAbstractAllGroupsCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue IAbstractDistinctValuesCollector<GC> LUCENENET specific interface used to apply covariance to GC IAbstractFirstPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. IAbstractSecondPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. ICollectedSearchGroup LUCENENET specific interface for passing/comparing the CollectedSearchGroup without referencing its generic closing type IGroupDocs<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. ISearchGroup<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. ITopGroups<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Enums TopGroups.ScoreMergeMode How the GroupDocs score (if any) should be merged."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.html",
    "title": "Class TopGroups | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopGroups LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of TopGroups<TGroupValue> ) Inheritance System.Object TopGroups Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class TopGroups Methods | Improve this Doc View Source Merge<T>(ITopGroups<T>[], Sort, Sort, Int32, Int32, TopGroups.ScoreMergeMode) Merges an array of TopGroups, for example obtained from the second-pass collector across multiple shards. Each TopGroups must have been sorted by the same groupSort and docSort, and the top groups passed to all second-pass collectors must be the same. NOTE : We can't always compute an exact totalGroupCount. Documents belonging to a group may occur on more than one shard and thus the merged totalGroupCount can be higher than the actual totalGroupCount. In this case the totalGroupCount represents a upper bound. If the documents of one group do only reside in one shard then the totalGroupCount is exact. NOTE : the topDocs in each GroupDocs is actually an instance of TopDocsAndShards Declaration public static TopGroups<T> Merge<T>(ITopGroups<T>[] shardGroups, Sort groupSort, Sort docSort, int docOffset, int docTopN, TopGroups.ScoreMergeMode scoreMergeMode) Parameters Type Name Description ITopGroups <T>[] shardGroups Sort groupSort Sort docSort System.Int32 docOffset System.Int32 docTopN TopGroups.ScoreMergeMode scoreMergeMode Returns Type Description TopGroups <T> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.ScoreMergeMode.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.TopGroups.ScoreMergeMode.html",
    "title": "Enum TopGroups.ScoreMergeMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum TopGroups.ScoreMergeMode How the GroupDocs score (if any) should be merged. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public enum ScoreMergeMode Fields Name Description Avg Avg score across all shards for this group. None Set score to Float.NaN Total Sum score across all shards for this group."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.html",
    "title": "Namespace Lucene.Net.Search.Grouping.Terms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping.Terms Classes TermAllGroupHeadsCollector LUCENENET specific class used to mimic the synatax used to access static members of TermAllGroupHeadsCollector<GH> without specifying its generic closing type. (TermAllGroupHeadsCollector.Create() rather than TermAllGroupHeadsCollector{GH}.Create()). TermAllGroupHeadsCollector<GH> A base implementation of AbstractAllGroupHeadsCollector<GH> for retrieving the most relevant groups when grouping on a string based group field. More specifically this all concrete implementations of this base implementation use SortedDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: an int hash set (SentinelIntSet) is used to detect if a group is already added to the total count. For each segment the int set is cleared and filled with previous counted groups that occur in the new segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermDistinctValuesCollector A term based implementation of AbstractDistinctValuesCollector{TermDistinctValuesCollector.GroupCount} that relies on SortedDocValues to count the distinct values per group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect groups. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermGroupFacetCollector An implementation of AbstractGroupFacetCollector that computes grouped facets based on the indexed terms from the FieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect grouped docs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.html",
    "title": "Namespace Lucene.Net.Codecs.Memory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Memory Classes DirectDocValuesFormat In-memory docvalues format that does no (or very little) compression. Indexed values are stored on disk, but then at search time all values are loaded into memory as simple .NET arrays. For numeric values, it uses byte[], short[], int[], long[] as necessary to fit the range of the values. For binary values, there is an System.Int32 (4 bytes) overhead per value. Limitations: For binary and sorted fields the total space required for all binary values cannot exceed about 2.1 GB (see MAX_TOTAL_BYTES_LENGTH ). For sorted set fields, the sum of the size of each document's set of values cannot exceed about 2.1 B values (see MAX_SORTED_SET_ORDS ). For example, if every document has 10 values (10 instances of SortedSetDocValuesField ) added, then no more than ~210 M documents can be added to one segment. DirectPostingsFormat Wraps Lucene41PostingsFormat format for on-disk storage, but then at read time loads and stores all terms & postings directly in RAM as byte[], int[]. WARNING : This is exceptionally RAM intensive: it makes no effort to compress the postings data, storing terms as separate byte[] and postings as separate int[], but as a result it gives substantial increase in search performance. This postings format supports Ord and SeekExact(Int64) . Because this holds all term bytes as a single byte[], you cannot have more than 2.1GB worth of term bytes in a single segment. @lucene.experimental FSTOrdPostingsFormat FSTOrd term dict + Lucene41PBF FSTOrdPulsing41PostingsFormat FSTOrd + Pulsing41 @lucene.experimental FSTOrdTermsReader FST-based terms dictionary reader. The FST index maps each term and its ord, and during seek the ord is used fetch metadata from a single block. The term dictionary is fully memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTOrdTermsWriter FST-based term dict, using ord as FST output. The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information customized by postings base. single-level skip list to speed up metadata decoding by ord. Files: .tix : Term Index .tbk : Term Block Term Index The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field. TermIndex(.tix) --> Header, TermFST NumFields , Footer TermFST --> FST<T> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Since terms are already sorted before writing to Term Block , their ords can directly used to seek term metadata from term block. Term Block The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks: statistics bytes block: contains term statistics; metadata longs block: delta-encodes monotonic part of metadata; metadata bytes block: encodes other parts of metadata; skip block: contains skip data, to speed up metadata seeking and decoding File Format: TermBlock(.tbk) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields , Footer DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDelta LongsSize > NumTerms StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms MetaLongsBlock --> < LongDelta LongsSize , BytesSize > NumTerms MetaBytesBlock --> Byte MetaBytesBlockLength Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted. @lucene.experimental FSTPostingsFormat FST term dict + Lucene41PBF FSTPulsing41PostingsFormat FST + Pulsing41, test only, since FST does no delta encoding here! @lucene.experimental FSTTermsReader FST-based terms dictionary reader. The FST directly maps each term and its metadata, it is memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FSTTermsWriter FST-based term dict, using metadata as FST output. The FST directly holds the mapping between <term, metadata>. Term metadata consists of three parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information need by postings reader. File: .tst : Term Dictionary Term Dictionary The .tst contains a list of FSTs, one for each field. The FST maps a term to its corresponding statistics (e.g. docfreq) and metadata (e.g. information for postings list reader like file pointer to postings list). Typically the metadata is separated into two parts: Monotonical long array: Some metadata will always be ascending in order with the corresponding term. This part is used by FST to share outputs between arcs. Generic byte array: Used to store non-monotonic metadata. File format: TermsDict(.tst) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, TermFST > NumFields TermFST TermData TermData --> Flag, BytesSize?, LongDelta LongsSize ?, Byte BytesSize ?, < DocFreq[Same?], (TotalTermFreq-DocFreq) > ? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) DocFreq, LongsSize, BytesSize, NumFields, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) TotalTermFreq, NumTerms, SumTotalTermFreq, SumDocFreq, LongDelta --> VLong ( WriteVInt64(Int64) ) Notes: The format of PostingsHeader and generic meta bytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). The format of TermData is determined by FST, typically monotonic metadata will be dense around shallow arcs, while in deeper arcs only generic bytes and term statistics exist. The byte Flag is used to indicate which part of metadata exists on current arc. Specially the monotonic part is omitted when it is an array of 0s. Since LongsSize is per-field fixed, it is only written once in field summary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MemoryDocValuesFormat In-memory docvalues format. MemoryPostingsFormat Stores terms & postings (docs, positions, payloads) in RAM, using an FST. Note that this codec implements advance as a linear scan! This means if you store large fields in here, queries that rely on advance will (AND BooleanQuery, PhraseQuery) will be relatively slow! @lucene.experimental"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IPartOfSpeechAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IPartOfSpeechAttribute.html",
    "title": "Interface IPartOfSpeechAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPartOfSpeechAttribute Attribute for GetPartOfSpeech() . Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IPartOfSpeechAttribute : IAttribute Methods | Improve this Doc View Source GetPartOfSpeech() Declaration string GetPartOfSpeech() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.InflectionAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.InflectionAttribute.html",
    "title": "Class InflectionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class InflectionAttribute Attribute for Kuromoji inflection data. Inheritance System.Object Attribute InflectionAttribute Implements IInflectionAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class InflectionAttribute : Attribute, IInflectionAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetInflectionForm() Declaration public virtual string GetInflectionForm() Returns Type Description System.String | Improve this Doc View Source GetInflectionType() Declaration public virtual string GetInflectionType() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IInflectionAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IInflectionAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IInflectionAttribute.html",
    "title": "Interface IInflectionAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IInflectionAttribute Attribute for Kuromoji inflection data. Note: in some cases this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IInflectionAttribute : IAttribute Methods | Improve this Doc View Source GetInflectionForm() Declaration string GetInflectionForm() Returns Type Description System.String | Improve this Doc View Source GetInflectionType() Declaration string GetInflectionType() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IBaseFormAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IBaseFormAttribute.html",
    "title": "Interface IBaseFormAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBaseFormAttribute Attribute for GetBaseForm() Note: depending on part of speech, this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IBaseFormAttribute : IAttribute Methods | Improve this Doc View Source GetBaseForm() Declaration string GetBaseForm() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.BaseFormAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.BaseFormAttribute.html",
    "title": "Class BaseFormAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseFormAttribute Attribute for GetBaseForm() . Inheritance System.Object Attribute BaseFormAttribute Implements IBaseFormAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class BaseFormAttribute : Attribute, IBaseFormAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetBaseForm() Declaration public virtual string GetBaseForm() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IBaseFormAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Token.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Analyzed token with morphological data from its dictionary. Inheritance System.Object Token Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class Token Constructors | Improve this Doc View Source Token(Int32, Char[], Int32, Int32, JapaneseTokenizerType, Int32, IDictionary) Declaration public Token(int wordId, char[] surfaceForm, int offset, int length, JapaneseTokenizerType type, int position, IDictionary dictionary) Parameters Type Name Description System.Int32 wordId System.Char [] surfaceForm System.Int32 offset System.Int32 length JapaneseTokenizerType type System.Int32 position IDictionary dictionary Properties | Improve this Doc View Source Length length of surfaceForm Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset offset into surfaceForm Declaration public virtual int Offset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Position Get index of this token in input text. Returns position of token. Declaration public virtual int Position { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PositionLength Gets or Sets the length (in tokens) of this token. For normal tokens this is 1; for compound tokens it's > 1. Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source SurfaceForm surfaceForm Declaration public virtual char[] SurfaceForm { get; } Property Value Type Description System.Char [] Methods | Improve this Doc View Source GetBaseForm() base form or null if token is not inflected Declaration public virtual string GetBaseForm() Returns Type Description System.String base form or null if token is not inflected | Improve this Doc View Source GetInflectionForm() inflection form or null Declaration public virtual string GetInflectionForm() Returns Type Description System.String inflection form or null | Improve this Doc View Source GetInflectionType() inflection type or null Declaration public virtual string GetInflectionType() Returns Type Description System.String inflection type or null | Improve this Doc View Source GetPartOfSpeech() part of speech. Declaration public virtual string GetPartOfSpeech() Returns Type Description System.String part of speech. | Improve this Doc View Source GetPronunciation() pronunciation. null if token doesn't have pronunciation. Declaration public virtual string GetPronunciation() Returns Type Description System.String pronunciation. null if token doesn't have pronunciation. | Improve this Doc View Source GetReading() reading. null if token doesn't have reading. Declaration public virtual string GetReading() Returns Type Description System.String reading. null if token doesn't have reading. | Improve this Doc View Source GetSurfaceFormString() surfaceForm as a String Declaration public virtual string GetSurfaceFormString() Returns Type Description System.String surfaceForm as a String | Improve this Doc View Source IsKnown() Returns true if this token is known word. Declaration public virtual bool IsKnown() Returns Type Description System.Boolean true if this token is in standard dictionary. false if not. | Improve this Doc View Source IsUnknown() Returns true if this token is unknown word. Declaration public virtual bool IsUnknown() Returns Type Description System.Boolean true if this token is unknown word. false if not. | Improve this Doc View Source IsUser() Returns true if this token is defined in user dictionary. Declaration public virtual bool IsUser() Returns Type Description System.Boolean true if this token is in user dictionary. false if not. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerType.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerType.html",
    "title": "Enum JapaneseTokenizerType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum JapaneseTokenizerType Token type reflecting the original source of this token Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum JapaneseTokenizerType Fields Name Description KNOWN Known words from the system dictionary. UNKNOWN Unknown words (heuristically segmented). USER Known words from the user dictionary."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerMode.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerMode.html",
    "title": "Enum JapaneseTokenizerMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum JapaneseTokenizerMode Tokenization mode: this determines how the tokenizer handles compound and unknown words. Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum JapaneseTokenizerMode Fields Name Description EXTENDED Extended mode outputs unigrams for unknown words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NORMAL Ordinary segmentation: no decomposition for compounds, SEARCH Segmentation geared towards search: this includes a decompounding process for long nouns, also including the full compound token as a synonym."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizerFactory.html",
    "title": "Class JapaneseTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseTokenizerFactory Factory for JapaneseTokenizer . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\" mode=\"NORMAL\" userDictionary=\"user.txt\" userDictionaryEncoding=\"UTF-8\" discardPunctuation=\"true\" /> <filter class=\"solr.JapaneseBaseFormFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory JapaneseTokenizerFactory Implements IResourceLoaderAware Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseTokenizerFactory : TokenizerFactory, IResourceLoaderAware Constructors | Improve this Doc View Source JapaneseTokenizerFactory(IDictionary<String, String>) Creates a new JapaneseTokenizerFactory . Declaration public JapaneseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseTokenizer.html",
    "title": "Class JapaneseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseTokenizer Tokenizer for Japanese that uses morphological analysis. Inheritance System.Object AttributeSource TokenStream Tokenizer JapaneseTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseTokenizer : Tokenizer, IDisposable Remarks This tokenizer sets a number of additional attributes: IBaseFormAttribute containing base form for inflected adjectives and verbs. IPartOfSpeechAttribute containing part-of-speech. IReadingAttribute containing reading and pronunciation. IInflectionAttribute containing additional part-of-speech information for inflected forms. This tokenizer uses a rolling Viterbi search to find the least cost segmentation (path) of the incoming characters. For tokens that appear to be compound (> length 2 for all Kanji, or > length 7 for non-Kanji), we see if there is a 2nd best segmentation of that token after applying penalties to the long tokens. If so, and the Mode is SEARCH , we output the alternate segmentation as well. Constructors | Improve this Doc View Source JapaneseTokenizer(AttributeSource.AttributeFactory, TextReader, UserDictionary, Boolean, JapaneseTokenizerMode) Create a new JapaneseTokenizer. Declaration public JapaneseTokenizer(AttributeSource.AttributeFactory factory, TextReader input, UserDictionary userDictionary, bool discardPunctuation, JapaneseTokenizerMode mode) Parameters Type Name Description AttributeSource.AttributeFactory factory The AttributeFactory to use. System.IO.TextReader input TextReader containing text. UserDictionary userDictionary Optional: if non-null, user dictionary. System.Boolean discardPunctuation true if punctuation tokens should be dropped from the output. JapaneseTokenizerMode mode Tokenization mode. | Improve this Doc View Source JapaneseTokenizer(TextReader, UserDictionary, Boolean, JapaneseTokenizerMode) Create a new JapaneseTokenizer. Uses the default AttributeFactory. Declaration public JapaneseTokenizer(TextReader input, UserDictionary userDictionary, bool discardPunctuation, JapaneseTokenizerMode mode) Parameters Type Name Description System.IO.TextReader input TextReader containing text. UserDictionary userDictionary Optional: if non-null, user dictionary. System.Boolean discardPunctuation true if punctuation tokens should be dropped from the output. JapaneseTokenizerMode mode Tokenization mode. Fields | Improve this Doc View Source DEFAULT_MODE Default tokenization mode. Currently this is SEARCH . Declaration public static readonly JapaneseTokenizerMode DEFAULT_MODE Field Value Type Description JapaneseTokenizerMode Properties | Improve this Doc View Source GraphvizFormatter Expert: set this to produce graphviz (dot) output of the Viterbi lattice Declaration public GraphvizFormatter GraphvizFormatter { get; set; } Property Value Type Description GraphvizFormatter Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Tokenizer.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilterFactory.html",
    "title": "Class JapaneseReadingFormFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseReadingFormFilterFactory Factory for JapaneseReadingFormFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseReadingFormFilterFactory\" useRomaji=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseReadingFormFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseReadingFormFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseReadingFormFilterFactory(IDictionary<String, String>) Creates a new JapaneseReadingFormFilterFactory . Declaration public JapaneseReadingFormFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseReadingFormFilter.html",
    "title": "Class JapaneseReadingFormFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseReadingFormFilter A TokenFilter that replaces the term attribute with the reading of a token in either katakana or romaji form. The default reading form is katakana. Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseReadingFormFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseReadingFormFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source JapaneseReadingFormFilter(TokenStream) Declaration public JapaneseReadingFormFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source JapaneseReadingFormFilter(TokenStream, Boolean) Declaration public JapaneseReadingFormFilter(TokenStream input, bool useRomaji) Parameters Type Name Description TokenStream input System.Boolean useRomaji Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilterFactory.html",
    "title": "Class JapanesePartOfSpeechStopFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapanesePartOfSpeechStopFilterFactory Factory for JapanesePartOfSpeechStopFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapanesePartOfSpeechStopFilterFactory\" tags=\"stopTags.txt\" enablePositionIncrements=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapanesePartOfSpeechStopFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapanesePartOfSpeechStopFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source JapanesePartOfSpeechStopFilterFactory(IDictionary<String, String>) Creates a new JapanesePartOfSpeechStopFilterFactory Declaration public JapanesePartOfSpeechStopFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream stream) Parameters Type Name Description TokenStream stream Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapanesePartOfSpeechStopFilter.html",
    "title": "Class JapanesePartOfSpeechStopFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapanesePartOfSpeechStopFilter Removes tokens that match a set of part-of-speech tags. Inheritance System.Object AttributeSource TokenStream TokenFilter FilteringTokenFilter JapanesePartOfSpeechStopFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapanesePartOfSpeechStopFilter : FilteringTokenFilter, IDisposable Constructors | Improve this Doc View Source JapanesePartOfSpeechStopFilter(LuceneVersion, TokenStream, ISet<String>) Create a new JapanesePartOfSpeechStopFilter . Declaration public JapanesePartOfSpeechStopFilter(LuceneVersion version, TokenStream input, ISet<string> stopTags) Parameters Type Name Description LuceneVersion version The Lucene match version. TokenStream input The TokenStream to consume. System.Collections.Generic.ISet < System.String > stopTags The part-of-speech tags that should be removed. | Improve this Doc View Source JapanesePartOfSpeechStopFilter(LuceneVersion, Boolean, TokenStream, ISet<String>) Declaration [Obsolete(\"EnablePositionIncrements=false is not supported anymore as of Lucene 4.4.\")] public JapanesePartOfSpeechStopFilter(LuceneVersion version, bool enablePositionIncrements, TokenStream input, ISet<string> stopTags) Parameters Type Name Description LuceneVersion version System.Boolean enablePositionIncrements TokenStream input System.Collections.Generic.ISet < System.String > stopTags Methods | Improve this Doc View Source Accept() Declaration protected override bool Accept() Returns Type Description System.Boolean Overrides FilteringTokenFilter.Accept() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilterFactory.html",
    "title": "Class JapaneseKatakanaStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseKatakanaStemFilterFactory Factory for JapaneseKatakanaStemFilter . <fieldType name=\"text_ja\" class=\"solr.TextField\"> <analyzer> <tokenizer class=\"solr.JapaneseTokenizerFactory\"/> <filter class=\"solr.JapaneseKatakanaStemFilterFactory\" minimumLength=\"4\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory JapaneseKatakanaStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class JapaneseKatakanaStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source JapaneseKatakanaStemFilterFactory(IDictionary<String, String>) Creates a new JapaneseKatakanaStemFilterFactory Declaration public JapaneseKatakanaStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.JapaneseKatakanaStemFilter.html",
    "title": "Class JapaneseKatakanaStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JapaneseKatakanaStemFilter A TokenFilter that normalizes common katakana spelling variations ending in a long sound character by removing this character (U+30FC). Only katakana words longer than a minimum length are stemmed (default is four). Inheritance System.Object AttributeSource TokenStream TokenFilter JapaneseKatakanaStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class JapaneseKatakanaStemFilter : TokenFilter, IDisposable Remarks Note that only full-width katakana characters are supported. Please use a CJKWidthFilter to convert half-width katakana to full-width before using this filter. In order to prevent terms from being stemmed, use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the IKeywordAttribute before this TokenStream . Constructors | Improve this Doc View Source JapaneseKatakanaStemFilter(TokenStream) Declaration public JapaneseKatakanaStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source JapaneseKatakanaStemFilter(TokenStream, Int32) Declaration public JapaneseKatakanaStemFilter(TokenStream input, int minimumLength) Parameters Type Name Description TokenStream input System.Int32 minimumLength Fields | Improve this Doc View Source DEFAULT_MINIMUM_LENGTH Declaration public static readonly int DEFAULT_MINIMUM_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Stempel.StempelStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Stempel.StempelStemmer.html",
    "title": "Class StempelStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StempelStemmer Stemmer class is a convenient facade for other stemmer-related classes. The core stemming algorithm and its implementation is taken verbatim from the Egothor project ( www.egothor.org ). Even though the stemmer tables supplied in the distribution package are built for Polish language, there is nothing language-specific here. Inheritance System.Object StempelStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class StempelStemmer Constructors | Improve this Doc View Source StempelStemmer(Trie) Create a Stemmer using pre-loaded stemmer table Declaration public StempelStemmer(Trie stemmer) Parameters Type Name Description Trie stemmer pre-loaded stemmer table | Improve this Doc View Source StempelStemmer(Stream) Create a Stemmer using selected stemmer table Declaration public StempelStemmer(Stream stemmerTable) Parameters Type Name Description System.IO.Stream stemmerTable stemmer table. Methods | Improve this Doc View Source Load(Stream) Load a stemmer table from an inputstream. Declaration public static Trie Load(Stream stemmerTable) Parameters Type Name Description System.IO.Stream stemmerTable Returns Type Description Trie | Improve this Doc View Source Stem(String) Stem a word. Declaration public StringBuilder Stem(string word) Parameters Type Name Description System.String word input word to be stemmed. Returns Type Description System.Text.StringBuilder stemmed word, or null if the stem could not be generated."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.html",
    "title": "Namespace Lucene.Net.Analysis.Standard | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard Classes ClassicAnalyzer Filters ClassicTokenizer with ClassicFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating ClassicAnalyzer : As of 3.1, StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) ClassicAnalyzer was named StandardAnalyzer in Lucene versions prior to 3.1. As of 3.1, StandardAnalyzer implements Unicode text segmentation, as specified by UAX#29. ClassicFilter Normalizes tokens extracted with ClassicTokenizer . ClassicFilterFactory Factory for ClassicFilter . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\"/> <filter class=\"solr.ClassicFilterFactory\"/> </analyzer> </fieldType> ClassicTokenizer A grammar-based tokenizer constructed with JFlex (and then ported to .NET) This should be a good tokenizer for most European-language documents: Splits words at punctuation characters, removing punctuation. However, a dot that's not followed by whitespace is considered part of a token. Splits words at hyphens, unless there's a number in the token, in which case the whole token is interpreted as a product number and is not split. Recognizes email addresses and internet hostnames as one token. Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. ClassicTokenizer was named StandardTokenizer in Lucene versions prior to 3.1. As of 3.1, StandardTokenizer implements Unicode text segmentation, as specified by UAX#29. ClassicTokenizerFactory Factory for ClassicTokenizer . <fieldType name=\"text_clssc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.ClassicTokenizerFactory\" maxTokenLength=\"120\"/> </analyzer> </fieldType> StandardAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating StandardAnalyzer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation, and StopFilter correctly handles Unicode 4.0 supplementary characters in stopwords. ClassicTokenizer and ClassicAnalyzer are the pre-3.1 implementations of StandardTokenizer and StandardAnalyzer . As of 2.9, StopFilter preserves position increments As of 2.4, Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) StandardFilter Normalizes tokens extracted with StandardTokenizer . StandardFilterFactory Factory for StandardFilter . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.StandardFilterFactory\"/> </analyzer> </fieldType> StandardTokenizer A grammar-based tokenizer constructed with JFlex. As of Lucene version 3.1, this class implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Many applications have specific tokenizer needs. If this tokenizer does not suit your application, please consider copying this source code directory to your project and maintaining your own grammar-based tokenizer. You must specify the required LuceneVersion compatibility when creating StandardTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. As of 3.1, StandardTokenizer implements Unicode text segmentation. If you use a previous version number, you get the exact behavior of ClassicTokenizer for backwards compatibility. StandardTokenizerFactory Factory for StandardTokenizer . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> StandardTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 . Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters StandardTokenizerInterface UAX29URLEmailAnalyzer Filters UAX29URLEmailTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required LuceneVersion compatibility when creating UAX29URLEmailAnalyzer UAX29URLEmailTokenizer This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in ` Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character You must specify the required LuceneVersion compatibility when creating UAX29URLEmailTokenizer : As of 3.4, Hiragana and Han characters are no longer wrongly split from their combining characters. If you use a previous version number, you get the exact broken behavior for backwards compatibility. UAX29URLEmailTokenizerFactory Factory for UAX29URLEmailTokenizer . <fieldType name=\"text_urlemail\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.UAX29URLEmailTokenizerFactory\" maxTokenLength=\"255\"/> </analyzer> </fieldType> UAX29URLEmailTokenizerImpl This class implements Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29 URLs and email addresses are also tokenized according to the relevant RFCs. Tokens produced are of the following types: <ALPHANUM>: A sequence of alphabetic and numeric characters <NUM>: A number <URL>: A URL <EMAIL>: An email address <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast Asian languages, including Thai, Lao, Myanmar, and Khmer <IDEOGRAPHIC>: A single CJKV ideographic character <HIRAGANA>: A single hiragana character <KATAKANA>: A sequence of katakana characters <HANGUL>: A sequence of Hangul characters Interfaces IStandardTokenizerInterface Internal interface for supporting versioned grammars. @lucene.internal"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std40.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std40.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std40 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std40 Classes StandardTokenizerImpl40 This class implements StandardTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl40 This class implements UAX29URLEmailTokenizer using Unicode 6.1.0. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std36.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std36.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std36 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std36 Classes UAX29URLEmailTokenizerImpl36 This class implements UAX29URLEmailTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std34.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.Std34.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std34 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Standard.Std34 Classes StandardTokenizerImpl34 This class implements StandardTokenizer using Unicode 6.0.0. @deprecated This class is only for exact backwards compatibility UAX29URLEmailTokenizerImpl34 This class implements UAX29URLEmailTokenizer, except with a bug ( https://issues.apache.org/jira/browse/LUCENE-3880 ) where \"mailto:\" URI scheme prepended to an email address will disrupt recognition of the email address. @deprecated This class is only for exact backwards compatibility"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.html",
    "title": "Namespace Lucene.Net.Analysis.No | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.No Classes NorwegianAnalyzer Analyzer for Norwegian. NorwegianLightStemFilter A TokenFilter that applies NorwegianLightStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NorwegianLightStemFilterFactory Factory for NorwegianLightStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianLightStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> NorwegianLightStemmer Light Stemmer for Norwegian. Parts of this stemmer is adapted from SwedishLightStemFilter , except that while the Swedish one has a pre-defined rule set and a corresponding corpus to validate against whereas the Norwegian one is hand crafted. NorwegianMinimalStemFilter A TokenFilter that applies NorwegianMinimalStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NorwegianMinimalStemFilterFactory Factory for NorwegianMinimalStemFilter . <fieldType name=\"text_svlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.NorwegianMinimalStemFilterFactory\" variant=\"nb\"/> </analyzer> </fieldType> NorwegianMinimalStemmer Minimal Stemmer for Norwegian Bokmål (no-nb) and Nynorsk (no-nn) Stems known plural forms for Norwegian nouns only, together with genitiv -s Enums NorwegianStandard"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianStandard.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianStandard.html",
    "title": "Enum NorwegianStandard | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum NorwegianStandard Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax [Flags] public enum NorwegianStandard Fields Name Description BOKMAAL Constant to remove Bokmål-specific endings NYNORSK Constant to remove Nynorsk-specific endings"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianMinimalStemmer.html",
    "title": "Class NorwegianMinimalStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianMinimalStemmer Minimal Stemmer for Norwegian Bokmål (no-nb) and Nynorsk (no-nn) Stems known plural forms for Norwegian nouns only, together with genitiv -s Inheritance System.Object NorwegianMinimalStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianMinimalStemmer Constructors | Improve this Doc View Source NorwegianMinimalStemmer(NorwegianStandard) Creates a new NorwegianMinimalStemmer Declaration public NorwegianMinimalStemmer(NorwegianStandard flags) Parameters Type Name Description NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.No.NorwegianLightStemmer.html",
    "title": "Class NorwegianLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NorwegianLightStemmer Light Stemmer for Norwegian. Parts of this stemmer is adapted from SwedishLightStemFilter , except that while the Swedish one has a pre-defined rule set and a corresponding corpus to validate against whereas the Norwegian one is hand crafted. Inheritance System.Object NorwegianLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.No Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NorwegianLightStemmer Constructors | Improve this Doc View Source NorwegianLightStemmer(NorwegianStandard) Creates a new NorwegianLightStemmer Declaration public NorwegianLightStemmer(NorwegianStandard flags) Parameters Type Name Description NorwegianStandard flags set to BOKMAAL , NYNORSK , or both. Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Nl.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Nl.html",
    "title": "Namespace Lucene.Net.Analysis.Nl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Nl Classes DutchAnalyzer Analyzer for Dutch language. Supports an external list of stopwords (words that will not be indexed at all), an external list of exclusions (word that will not be stemmed, but indexed) and an external list of word-stem pairs that overrule the algorithm (dictionary stemming). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating DutchAnalyzer : As of 3.6, DutchAnalyzer(LuceneVersion, CharArraySet) and DutchAnalyzer(LuceneVersion, CharArraySet, CharArraySet) also populate the default entries for the stem override dictionary As of 3.1, Snowball stemming is done with SnowballFilter, LowerCaseFilter is used prior to StopFilter, and Snowball stopwords are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . DutchStemFilter A TokenFilter that stems Dutch words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a DutchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . DutchStemmer A stemmer for Dutch words. The algorithm is an implementation of the dutch stemming algorithm in Martin Porter's snowball project."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Nl.DutchStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Nl.DutchStemmer.html",
    "title": "Class DutchStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DutchStemmer A stemmer for Dutch words. The algorithm is an implementation of the dutch stemming algorithm in Martin Porter's snowball project. Inheritance System.Object DutchStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Nl Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use Tartarus.Snowball.Ext.DutchStemmer instead, which has the same functionality. This filter will be removed in Lucene 5.0\")] public class DutchStemmer Methods | Improve this Doc View Source Stem(String) Stems the given term to an unique discriminator . Declaration public virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiStemmer.html",
    "title": "Class HindiStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiStemmer Light Stemmer for Hindi. Implements the algorithm specified in: A Lightweight Stemmer for Hindi Ananthakrishnan Ramanathan and Durgesh D Rao. http://computing.open.ac.uk/Sites/EACLSouthAsia/Papers/p6-Ramanathan.pdf Inheritance System.Object HindiStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] buffer, int len) Parameters Type Name Description System.Char [] buffer System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiNormalizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hi.HindiNormalizer.html",
    "title": "Class HindiNormalizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HindiNormalizer Normalizer for Hindi. Normalizes text to remove some differences in spelling variations. Implements the Hindi-language specific algorithm specified in: Word normalization in Indian languages Prasad Pingali and Vasudeva Varma. http://web2py.iiit.ac.in/publications/default/download/inproceedings.pdf.3fe5b38c-02ee-41ce-9a8f-3e745670be32.pdf with the following additions from Hindi CLIR in Thirty Days Leah S. Larkey, Margaret E. Connell, and Nasreen AbdulJaleel. http://maroo.cs.umass.edu/pub/web/getpdf.php?id=454 : Internal Zero-width joiner and Zero-width non-joiners are removed In addition to chandrabindu, NA+halant is normalized to anusvara Inheritance System.Object HindiNormalizer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hi Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HindiNormalizer Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Hindi text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Gl.html",
    "title": "Namespace Lucene.Net.Analysis.Gl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Gl Classes GalicianAnalyzer Analyzer for Galician. GalicianMinimalStemFilter A TokenFilter that applies GalicianMinimalStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GalicianMinimalStemFilterFactory Factory for GalicianMinimalStemFilter . <fieldType name=\"text_glplural\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianMinimalStemFilterFactory\"/> </analyzer> </fieldType> GalicianMinimalStemmer Minimal Stemmer for Galician This follows the \"RSLP-S\" algorithm, but modified for Galician. Hence this stemmer only applies the plural reduction step of: \"Regras do lematizador para o galego\" GalicianStemFilter A TokenFilter that applies GalicianStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GalicianStemFilterFactory Factory for GalicianStemFilter . <fieldType name=\"text_glstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GalicianStemFilterFactory\"/> </analyzer> </fieldType> GalicianStemmer Galician stemmer implementing \"Regras do lematizador para o galego\"."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ga.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ga.html",
    "title": "Namespace Lucene.Net.Analysis.Ga | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ga Classes IrishAnalyzer Analyzer for Irish. IrishLowerCaseFilter Normalises token text to lower case, handling t-prothesis and n-eclipsis (i.e., that 'nAthair' should become 'n-athair') IrishLowerCaseFilterFactory Factory for IrishLowerCaseFilter . <fieldType name=\"text_ga\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.IrishLowerCaseFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicNormalizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicNormalizer.html",
    "title": "Class ArabicNormalizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicNormalizer Normalizer for Arabic. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of hamza with alef seat to a bare alef. Normalization of teh marbuta to heh Normalization of dotless yeh (alef maksura) to yeh. Removal of Arabic diacritics (the harakat) Removal of tatweel (stretching character). Inheritance System.Object ArabicNormalizer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicNormalizer Fields | Improve this Doc View Source ALEF Declaration public const char ALEF = 'ا' Field Value Type Description System.Char | Improve this Doc View Source ALEF_HAMZA_ABOVE Declaration public const char ALEF_HAMZA_ABOVE = 'أ' Field Value Type Description System.Char | Improve this Doc View Source ALEF_HAMZA_BELOW Declaration public const char ALEF_HAMZA_BELOW = 'إ' Field Value Type Description System.Char | Improve this Doc View Source ALEF_MADDA Declaration public const char ALEF_MADDA = 'آ' Field Value Type Description System.Char | Improve this Doc View Source DAMMA Declaration public const char DAMMA = 'ُ' Field Value Type Description System.Char | Improve this Doc View Source DAMMATAN Declaration public const char DAMMATAN = 'ٌ' Field Value Type Description System.Char | Improve this Doc View Source DOTLESS_YEH Declaration public const char DOTLESS_YEH = 'ى' Field Value Type Description System.Char | Improve this Doc View Source FATHA Declaration public const char FATHA = 'َ' Field Value Type Description System.Char | Improve this Doc View Source FATHATAN Declaration public const char FATHATAN = 'ً' Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = 'ه' Field Value Type Description System.Char | Improve this Doc View Source KASRA Declaration public const char KASRA = 'ِ' Field Value Type Description System.Char | Improve this Doc View Source KASRATAN Declaration public const char KASRATAN = 'ٍ' Field Value Type Description System.Char | Improve this Doc View Source SHADDA Declaration public const char SHADDA = 'ّ' Field Value Type Description System.Char | Improve this Doc View Source SUKUN Declaration public const char SUKUN = 'ْ' Field Value Type Description System.Char | Improve this Doc View Source TATWEEL Declaration public const char TATWEEL = 'ـ' Field Value Type Description System.Char | Improve this Doc View Source TEH_MARBUTA Declaration public const char TEH_MARBUTA = 'ة' Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = 'ي' Field Value Type Description System.Char Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Arabic text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.html",
    "title": "Namespace Egothor.Stemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Egothor.Stemmer Classes Cell A Cell is a portion of a Trie . Compile The Compile class is used to compile a stemmer table. Diff The Diff object generates a patch string. A patch string is actually a command to a stemmer telling it how to reduce a word to its root. For example, to reduce the word teacher to its root teach the patch string Db would be generated. This command tells the stemmer to delete the last 2 characters from the word teacher to reach the stem (the patch commands are applied starting from the last character in order to save DiffIt The DiffIt class is a means generate patch commands from an already prepared stemmer table. Gener The Gener object helps in the discarding of nodes which break the reduction effort and defend the structure against large reductions. Lift The Lift class is a data structure that is a variation of a Patricia trie. Lift's raison d'etre is to implement reduction of the trie via the Lift-Up method., which makes the data structure less liable to overstemming. MultiTrie The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands individually (each command by itself). MultiTrie2 The MultiTrie is a Trie of Trie s. It stores words and their associated patch commands. The MultiTrie handles patch commands broken into their constituent parts, as a MultiTrie does, but the commands are delimited by the skip command. Optimizer The Optimizer class is a Trie that will be reduced (have empty rows removed). The reduction will be made by joining two rows where the first is a subset of the second. Optimizer2 The Optimizer class is a Trie that will be reduced (have empty rows removed). This is the result of allowing a joining of rows when there is no collision between non- null values in the rows. Information loss, resulting in the stemmer not being able to recognize words (as in Optimizer), is curtailed, allowing the stemmer to recognize words for which the original trie was built. Use of this class allows the stemmer to be self-teaching. Reduce The Reduce object is used to remove gaps in a Trie which stores a dictionary. Row The Row class represents a row in a matrix representation of a Trie . Trie A Trie is used to store a dictionary of words and their stems. Actually, what is stored are words with their respective patch commands. A trie can be termed forward (keys read from left to right) or backward (keys read from right to left). This property will vary depending on the language for which a Trie is constructed."
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Trie.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Trie.html",
    "title": "Class Trie | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Trie A Trie is used to store a dictionary of words and their stems. Actually, what is stored are words with their respective patch commands. A trie can be termed forward (keys read from left to right) or backward (keys read from right to left). This property will vary depending on the language for which a Trie is constructed. Inheritance System.Object Trie MultiTrie Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Trie Constructors | Improve this Doc View Source Trie(IDataInput) Constructor for the Trie object. Declaration public Trie(IDataInput is) Parameters Type Name Description IDataInput is the input stream Exceptions Type Condition System.IO.IOException if an I/O error occurs | Improve this Doc View Source Trie(Boolean) Constructor for the Trie object. Declaration public Trie(bool forward) Parameters Type Name Description System.Boolean forward set to true | Improve this Doc View Source Trie(Boolean, Int32, IList<String>, IList<Row>) Constructor for the Trie object. Declaration public Trie(bool forward, int root, IList<string> cmds, IList<Row> rows) Parameters Type Name Description System.Boolean forward true if read left to right, false if read right to left System.Int32 root index of the row that is the root node System.Collections.Generic.IList < System.String > cmds the patch commands to store System.Collections.Generic.IList < Row > rows a Vector of Vectors. Each inner Vector is a node of this Trie Methods | Improve this Doc View Source Add(String, String) Add the given key associated with the given patch command. If either parameter is null this method will return without executing. Declaration public virtual void Add(string key, string cmd) Parameters Type Name Description System.String key the key System.String cmd the patch command | Improve this Doc View Source GetAll(String) Gets the all attribute of the Trie object Declaration public virtual string[] GetAll(string key) Parameters Type Name Description System.String key Description of the Parameter Returns Type Description System.String [] The all value | Improve this Doc View Source GetCells() Return the number of cells in this Trie object. Declaration public virtual int GetCells() Returns Type Description System.Int32 the number of cells | Improve this Doc View Source GetCellsPnt() Gets the cellsPnt attribute of the Trie object Declaration public virtual int GetCellsPnt() Returns Type Description System.Int32 The cellsPnt value | Improve this Doc View Source GetCellsVal() Gets the cellsVal attribute of the Trie object Declaration public virtual int GetCellsVal() Returns Type Description System.Int32 The cellsVal value | Improve this Doc View Source GetFully(String) Return the element that is stored in a cell associated with the given key. Declaration public virtual string GetFully(string key) Parameters Type Name Description System.String key the key Returns Type Description System.String the associated element | Improve this Doc View Source GetLastOnPath(String) Return the element that is stored as last on a path associated with the given key. Declaration public virtual string GetLastOnPath(string key) Parameters Type Name Description System.String key the key associated with the desired element Returns Type Description System.String the last on path element | Improve this Doc View Source PrintInfo(TextWriter, String) writes debugging info to the printstream Declaration public virtual void PrintInfo(TextWriter out, string prefix) Parameters Type Name Description System.IO.TextWriter out System.String prefix | Improve this Doc View Source Reduce(Reduce) Remove empty rows from the given Trie and return the newly reduced Trie . Declaration public virtual Trie Reduce(Reduce by) Parameters Type Name Description Reduce by the Trie to reduce Returns Type Description Trie newly reduced Trie | Improve this Doc View Source Store(IDataOutput) Write this Trie to the given output stream. Declaration public virtual void Store(IDataOutput os) Parameters Type Name Description IDataOutput os the output stream Exceptions Type Condition System.IO.IOException if an I/O error occurs"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Row.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Row.html",
    "title": "Class Row | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Row The Row class represents a row in a matrix representation of a Trie . Inheritance System.Object Row Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Row Constructors | Improve this Doc View Source Row() The default constructor for the Row object. Declaration public Row() | Improve this Doc View Source Row(Row) Construct a Row using the cells of the given Row . Declaration public Row(Row old) Parameters Type Name Description Row old the Row to copy | Improve this Doc View Source Row(IDataInput) Construct a Row object from input carried in via the given input stream. Declaration public Row(IDataInput is) Parameters Type Name Description IDataInput is the input stream Exceptions Type Condition System.IO.IOException if an I/O error occurs Methods | Improve this Doc View Source GetCells() Return the number of cells in use. Declaration public int GetCells() Returns Type Description System.Int32 the number of cells in use | Improve this Doc View Source GetCellsPnt() Return the number of references (how many transitions) to other rows. Declaration public int GetCellsPnt() Returns Type Description System.Int32 the number of references | Improve this Doc View Source GetCellsVal() Return the number of patch commands saved in this Row. Declaration public int GetCellsVal() Returns Type Description System.Int32 the number of patch commands | Improve this Doc View Source GetCmd(Char) Return the command in the Cell associated with the given System.Char . Declaration public int GetCmd(char way) Parameters Type Name Description System.Char way the System.Char associated with the Cell holding the desired command Returns Type Description System.Int32 the command | Improve this Doc View Source GetCnt(Char) Return the number of patch commands were in the Cell associated with the given System.Char before the Trie containing this Row was reduced. Declaration public int GetCnt(char way) Parameters Type Name Description System.Char way the System.Char associated with the desired Cell Returns Type Description System.Int32 the number of patch commands before reduction | Improve this Doc View Source GetRef(Char) Return the reference to the next Row in the Cell associated with the given System.Char . Declaration public int GetRef(char way) Parameters Type Name Description System.Char way the System.Char associated with the desired Cell Returns Type Description System.Int32 the reference, or -1 if the Cell is null | Improve this Doc View Source Print(TextWriter) Write the contents of this Row to the System.IO.TextWriter . Declaration public virtual void Print(TextWriter out) Parameters Type Name Description System.IO.TextWriter out | Improve this Doc View Source SetCmd(Char, Int32) Set the command in the Cell of the given System.Char to the given System.Int32 . Declaration public void SetCmd(char way, int cmd) Parameters Type Name Description System.Char way the System.Char defining the Cell System.Int32 cmd the new command | Improve this Doc View Source SetRef(Char, Int32) Set the reference to the next row in the Cell of the given System.Char to the given System.Int32 . Declaration public void SetRef(char way, int ref) Parameters Type Name Description System.Char way the System.Char defining the Cell System.Int32 ref The new ref value | Improve this Doc View Source Store(IDataOutput) Write the contents of this Row to the given output stream. Declaration public virtual void Store(IDataOutput os) Parameters Type Name Description IDataOutput os the output stream Exceptions Type Condition System.IO.IOException if an I/O error occurs | Improve this Doc View Source UniformCmd(Boolean) Return the number of identical Cell s (containing patch commands) in this Row. Declaration public int UniformCmd(bool eqSkip) Parameters Type Name Description System.Boolean eqSkip when set to false the removed patch commands are considered Returns Type Description System.Int32 the number of identical Cell s, or -1 if there are (at least) two different Cell s"
  },
  "api/Lucene.Net.Analysis/Egothor.Stemmer.Reduce.html": {
    "href": "api/Lucene.Net.Analysis/Egothor.Stemmer.Reduce.html",
    "title": "Class Reduce | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Reduce The Reduce object is used to remove gaps in a Trie which stores a dictionary. Inheritance System.Object Reduce Gener Lift Optimizer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Egothor.Stemmer Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class Reduce Constructors | Improve this Doc View Source Reduce() Constructor for the Reduce object. Declaration public Reduce() Methods | Improve this Doc View Source Optimize(Trie) Optimize (remove holes in the rows) the given Trie and return the restructured Trie . Declaration public virtual Trie Optimize(Trie orig) Parameters Type Name Description Trie orig the Trie to optimize Returns Type Description Trie the restructured Trie"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int64BitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int64BitSet.html",
    "title": "Class Int64BitSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64BitSet BitSet of fixed length ( Lucene.Net.Util.Int64BitSet.numBits ), backed by accessible ( GetBits() ) long[] , accessed with a System.Int64 index. Use it only if you intend to store more than 2.1B bits, otherwise you should use FixedBitSet . NOTE: This was LongBitSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int64BitSet Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Int64BitSet Constructors | Improve this Doc View Source Int64BitSet(Int64) Declaration public Int64BitSet(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source Int64BitSet(Int64[], Int64) Declaration public Int64BitSet(long[] storedBits, long numBits) Parameters Type Name Description System.Int64 [] storedBits System.Int64 numBits Properties | Improve this Doc View Source Length Returns the number of bits stored in this bitset. Declaration public long Length { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source And(Int64BitSet) this = this AND other Declaration public void And(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source AndNot(Int64BitSet) this = this AND NOT other Declaration public void AndNot(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source Bits2words(Int64) Returns the number of 64 bit words it would take to hold numBits . Declaration public static int Bits2words(long numBits) Parameters Type Name Description System.Int64 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Returns number of set bits. NOTE: this visits every long in the backing bits array, and the result is not internally cached! Declaration public long Cardinality() Returns Type Description System.Int64 | Improve this Doc View Source Clear(Int64) Declaration public void Clear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Clear(Int64, Int64) Clears a range of bits. Declaration public void Clear(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public Int64BitSet Clone() Returns Type Description Int64BitSet | Improve this Doc View Source EnsureCapacity(Int64BitSet, Int64) If the given Int64BitSet is large enough to hold numBits , returns the given bits , otherwise returns a new Int64BitSet which can hold the requested number of bits. NOTE: the returned bitset reuses the underlying long[] of the given bits if possible. Also, reading Length on the returned bits may return a value greater than numBits . Declaration public static Int64BitSet EnsureCapacity(Int64BitSet bits, long numBits) Parameters Type Name Description Int64BitSet bits System.Int64 numBits Returns Type Description Int64BitSet | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Flip(Int64, Int64) Flips a range of bits Declaration public void Flip(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to flip | Improve this Doc View Source Get(Int64) Declaration public bool Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndClear(Int64) Declaration public bool GetAndClear(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int64) Declaration public bool GetAndSet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetBits() Expert. Declaration public long[] GetBits() Returns Type Description System.Int64 [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Intersects(Int64BitSet) Returns true if the sets have any elements in common Declaration public bool Intersects(Int64BitSet other) Parameters Type Name Description Int64BitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int64) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public long NextSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Or(Int64BitSet) this = this OR other Declaration public void Or(Int64BitSet other) Parameters Type Name Description Int64BitSet other | Improve this Doc View Source PrevSetBit(Int64) Returns the index of the last set bit before or on the index specified. -1 is returned if there are no more set bits. Declaration public long PrevSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Set(Int64) Declaration public void Set(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Set(Int64, Int64) Sets a range of bits Declaration public void Set(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to set | Improve this Doc View Source Xor(Int64BitSet) this = this XOR other Declaration public void Xor(Int64BitSet other) Parameters Type Name Description Int64BitSet other Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.html",
    "title": "Class Int32BlockPool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool A pool for System.Int32 blocks similar to ByteBlockPool . NOTE: This was IntBlockPool in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Int32BlockPool Constructors | Improve this Doc View Source Int32BlockPool() Creates a new Int32BlockPool with a default Int32BlockPool.Allocator . Declaration public Int32BlockPool() See Also NextBuffer() | Improve this Doc View Source Int32BlockPool(Int32BlockPool.Allocator) Creates a new Int32BlockPool with the given Int32BlockPool.Allocator . Declaration public Int32BlockPool(Int32BlockPool.Allocator allocator) Parameters Type Name Description Int32BlockPool.Allocator allocator See Also NextBuffer() Fields | Improve this Doc View Source INT32_BLOCK_MASK NOTE: This was INT_BLOCK_MASK in Lucene Declaration public static readonly int INT32_BLOCK_MASK Field Value Type Description System.Int32 | Improve this Doc View Source INT32_BLOCK_SHIFT NOTE: This was INT_BLOCK_SHIFT in Lucene Declaration public static readonly int INT32_BLOCK_SHIFT Field Value Type Description System.Int32 | Improve this Doc View Source INT32_BLOCK_SIZE NOTE: This was INT_BLOCK_SIZE in Lucene Declaration public static readonly int INT32_BLOCK_SIZE Field Value Type Description System.Int32 Properties | Improve this Doc View Source Buffer Current head buffer. Declaration public int[] Buffer { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Buffers Array of buffers currently used in the pool. Buffers are allocated if needed don't modify this outside of this class. Declaration public int[][] Buffers { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source Int32Offset Current head offset. NOTE: This was intOffset in Lucene Declaration public int Int32Offset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Int32Upto Pointer to the current position in head buffer NOTE: This was intUpto in Lucene Declaration public int Int32Upto { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source NextBuffer() Advances the pool to its next buffer. This method should be called once after the constructor to initialize the pool. In contrast to the constructor a Reset() call will advance the pool to its first buffer immediately. Declaration public void NextBuffer() | Improve this Doc View Source Reset() Resets the pool to its initial state reusing the first buffer. Calling NextBuffer() is not needed after reset. Declaration public void Reset() | Improve this Doc View Source Reset(Boolean, Boolean) Expert: Resets the pool to its initial state reusing the first buffer. Declaration public void Reset(bool zeroFillBuffers, bool reuseFirst) Parameters Type Name Description System.Boolean zeroFillBuffers If true the buffers are filled with 0 . this should be set to true if this pool is used with Int32BlockPool.SliceWriter . System.Boolean reuseFirst If true the first buffer will be reused and calling NextBuffer() is not needed after reset if the block pool was used before ie. NextBuffer() was called before. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceWriter.html",
    "title": "Class Int32BlockPool.SliceWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool.SliceWriter A Int32BlockPool.SliceWriter that allows to write multiple integer slices into a given Int32BlockPool . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.SliceWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SliceWriter Constructors | Improve this Doc View Source SliceWriter(Int32BlockPool) Declaration public SliceWriter(Int32BlockPool pool) Parameters Type Name Description Int32BlockPool pool Properties | Improve this Doc View Source CurrentOffset Returns the offset of the currently written slice. The returned value should be used as the end offset to initialize a Int32BlockPool.SliceReader once this slice is fully written or to reset the this writer if another slice needs to be written. Declaration public virtual int CurrentOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Reset(Int32) Declaration public virtual void Reset(int sliceOffset) Parameters Type Name Description System.Int32 sliceOffset | Improve this Doc View Source StartNewSlice() Starts a new slice and returns the start offset. The returned value should be used as the start offset to initialize a Int32BlockPool.SliceReader . Declaration public virtual int StartNewSlice() Returns Type Description System.Int32 | Improve this Doc View Source WriteInt32(Int32) Writes the given value into the slice and resizes the slice if needed NOTE: This was writeInt() in Lucene Declaration public virtual void WriteInt32(int value) Parameters Type Name Description System.Int32 value Extension Methods Number.IsNumber(Object) See Also Int32BlockPool.SliceReader"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.SliceReader.html",
    "title": "Class Int32BlockPool.SliceReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool.SliceReader A Int32BlockPool.SliceReader that can read System.Int32 slices written by a Int32BlockPool.SliceWriter . This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Int32BlockPool.SliceReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class SliceReader Constructors | Improve this Doc View Source SliceReader(Int32BlockPool) Creates a new Int32BlockPool.SliceReader on the given pool. Declaration public SliceReader(Int32BlockPool pool) Parameters Type Name Description Int32BlockPool pool Properties | Improve this Doc View Source IsEndOfSlice Returns true if the current slice is fully read. If this method returns true ReadInt32() should not be called again on this slice. Declaration public bool IsEndOfSlice { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ReadInt32() Reads the next System.Int32 from the current slice and returns it. NOTE: This was readInt() in Lucene Declaration public int ReadInt32() Returns Type Description System.Int32 See Also IsEndOfSlice | Improve this Doc View Source Reset(Int32, Int32) Resets the reader to a slice give the slices absolute start and end offset in the pool. Declaration public void Reset(int startOffset, int endOffset) Parameters Type Name Description System.Int32 startOffset System.Int32 endOffset Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.Allocator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Int32BlockPool.Allocator.html",
    "title": "Class Int32BlockPool.Allocator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32BlockPool.Allocator Abstract class for allocating and freeing System.Int32 blocks. Inheritance System.Object Int32BlockPool.Allocator Int32BlockPool.DirectAllocator RecyclingInt32BlockAllocator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Allocator Constructors | Improve this Doc View Source Allocator(Int32) Declaration public Allocator(int blockSize) Parameters Type Name Description System.Int32 blockSize Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetInt32Block() NOTE: This was getIntBlock() in Lucene Declaration public virtual int[] GetInt32Block() Returns Type Description System.Int32 [] | Improve this Doc View Source RecycleInt32Blocks(Int32[][], Int32, Int32) NOTE: This was recycleIntBlocks() in Lucene Declaration public abstract void RecycleInt32Blocks(int[][] blocks, int start, int end) Parameters Type Name Description System.Int32 [][] blocks System.Int32 start System.Int32 end Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IndexableBinaryStringTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IndexableBinaryStringTools.html",
    "title": "Class IndexableBinaryStringTools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexableBinaryStringTools Provides support for converting byte sequences to System.String s and back again. The resulting System.String s preserve the original byte sequences' sort order. The System.String s are constructed using a Base 8000h encoding of the original binary data - each char of an encoded System.String represents a 15-bit chunk from the byte sequence. Base 8000h was chosen because it allows for all lower 15 bits of char to be used without restriction; the surrogate range [U+D8000-U+DFFF] does not represent valid chars, and would require complicated handling to avoid them and allow use of char's high bit. Although unset bits are used as padding in the final char, the original byte sequence could contain trailing bytes with no set bits (null bytes): padding is indistinguishable from valid information. To overcome this problem, a char is appended, indicating the number of encoded bytes in the final content char. @lucene.experimental Inheritance System.Object IndexableBinaryStringTools Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax [Obsolete(\"Implement Analysis.TokenAttributes.ITermToBytesRefAttribute and store bytes directly instead. this class will be removed in Lucene 5.0\")] public sealed class IndexableBinaryStringTools Methods | Improve this Doc View Source Decode(Char[], Int32, Int32, Byte[], Int32, Int32) Decodes the input System.Char sequence into the output System.Byte sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetDecodedLength(Char[], Int32, Int32) . Declaration public static void Decode(char[] inputArray, int inputOffset, int inputLength, byte[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Char [] inputArray System.Char sequence to be decoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of chars in inputArray System.Byte [] outputArray System.Byte sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetDecodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Decode(Char[], Int32, Int32, SByte[], Int32, Int32) Decodes the input char sequence into the output sbyte sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetDecodedLength(Char[], Int32, Int32) . Declaration [CLSCompliant(false)] public static void Decode(char[] inputArray, int inputOffset, int inputLength, sbyte[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Char [] inputArray System.Char sequence to be decoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of chars in inputArray System.SByte [] outputArray System.Byte sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetDecodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Encode(Byte[], Int32, Int32, Char[], Int32, Int32) Encodes the input System.Byte sequence into the output char sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetEncodedLength(Byte[], Int32, Int32) . Declaration public static void Encode(byte[] inputArray, int inputOffset, int inputLength, char[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.Byte [] inputArray System.Byte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray System.Char [] outputArray System.Char sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be GetEncodedLength(inputArray, inputOffset, inputLength) | Improve this Doc View Source Encode(SByte[], Int32, Int32, Char[], Int32, Int32) Encodes the input System.SByte sequence into the output char sequence. Before calling this method, ensure that the output array has sufficient capacity by calling GetEncodedLength(SByte[], Int32, Int32) . Declaration [CLSCompliant(false)] public static void Encode(sbyte[] inputArray, int inputOffset, int inputLength, char[] outputArray, int outputOffset, int outputLength) Parameters Type Name Description System.SByte [] inputArray System.SByte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray System.Char [] outputArray System.Char sequence to store encoded result System.Int32 outputOffset Initial offset into outputArray System.Int32 outputLength Length of output, must be getEncodedLength | Improve this Doc View Source GetDecodedLength(Char[], Int32, Int32) Returns the number of System.Byte s required to decode the given char sequence. Declaration public static int GetDecodedLength(char[] encoded, int offset, int length) Parameters Type Name Description System.Char [] encoded Char sequence to be decoded System.Int32 offset Initial offset System.Int32 length Number of characters Returns Type Description System.Int32 The number of System.Byte s required to decode the given char sequence | Improve this Doc View Source GetEncodedLength(Byte[], Int32, Int32) Returns the number of chars required to encode the given System.Byte s. Declaration public static int GetEncodedLength(byte[] inputArray, int inputOffset, int inputLength) Parameters Type Name Description System.Byte [] inputArray Byte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of bytes in inputArray Returns Type Description System.Int32 The number of chars required to encode the number of System.Byte s. | Improve this Doc View Source GetEncodedLength(SByte[], Int32, Int32) Returns the number of chars required to encode the given System.SByte s. Declaration [CLSCompliant(false)] public static int GetEncodedLength(sbyte[] inputArray, int inputOffset, int inputLength) Parameters Type Name Description System.SByte [] inputArray System.SByte sequence to be encoded System.Int32 inputOffset Initial offset into inputArray System.Int32 inputLength Number of sbytes in inputArray Returns Type Description System.Int32 The number of chars required to encode the number of System.SByte s. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IBytesRefIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IBytesRefIterator.html",
    "title": "Interface IBytesRefIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBytesRefIterator A simple iterator interface for BytesRef iteration. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IBytesRefIterator Properties | Improve this Doc View Source Comparer Return the BytesRef Comparer used to sort terms provided by the iterator. This may return null if there are no items or the iterator is not sorted. Callers may invoke this method many times, so it's best to cache a single instance & reuse it. Declaration IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Next() Increments the iteration to the next BytesRef in the iterator. Returns the resulting BytesRef or null if the end of the iterator is reached. The returned BytesRef may be re-used across calls to Next() . After this method returns null , do not call it again: the results are undefined. Declaration BytesRef Next() Returns Type Description BytesRef The next BytesRef in the iterator or null if the end of the iterator is reached. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IBits.html",
    "title": "Interface IBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBits Interface for Bitset-like structures. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IBits Properties | Improve this Doc View Source Length Returns the number of bits in this set Declaration int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Returns the value of the bit with the specified index . Declaration bool Get(int index) Parameters Type Name Description System.Int32 index Index, should be non-negative and < Length . The result of passing negative or out of bounds values is undefined by this interface, just don't do it! Returns Type Description System.Boolean true if the bit is set, false otherwise. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IAttribute.html",
    "title": "Interface IAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IAttribute Base interface for attributes. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IAttribute Methods | Improve this Doc View Source CopyTo(IAttribute) Declaration void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.BytesStartArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefHash.BytesStartArray.html",
    "title": "Class BytesRefHash.BytesStartArray | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefHash.BytesStartArray Manages allocation of the per-term addresses. Inheritance System.Object BytesRefHash.BytesStartArray BytesRefHash.DirectBytesStartArray Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class BytesStartArray Methods | Improve this Doc View Source BytesUsed() A Counter reference holding the number of bytes used by this BytesRefHash.BytesStartArray . The BytesRefHash uses this reference to track it memory usage. Declaration public abstract Counter BytesUsed() Returns Type Description Counter a AtomicInt64 reference holding the number of bytes used by this BytesRefHash.BytesStartArray . | Improve this Doc View Source Clear() Clears the BytesRefHash.BytesStartArray and returns the cleared instance. Declaration public abstract int[] Clear() Returns Type Description System.Int32 [] The cleared instance, this might be null . | Improve this Doc View Source Grow() Grows the BytesRefHash.BytesStartArray . Declaration public abstract int[] Grow() Returns Type Description System.Int32 [] The grown array. | Improve this Doc View Source Init() Initializes the BytesRefHash.BytesStartArray . This call will allocate memory. Declaration public abstract int[] Init() Returns Type Description System.Int32 [] The initialized bytes start array. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefArray.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefArray.html",
    "title": "Class BytesRefArray | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefArray A simple append only random-access BytesRef array that stores full copies of the appended bytes in a ByteBlockPool . Note: this class is not Thread-Safe! @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BytesRefArray Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BytesRefArray Constructors | Improve this Doc View Source BytesRefArray(Counter) Creates a new BytesRefArray with a counter to track allocated bytes Declaration public BytesRefArray(Counter bytesUsed) Parameters Type Name Description Counter bytesUsed Properties | Improve this Doc View Source Length Returns the current size of this BytesRefArray . NOTE: This was size() in Lucene. Declaration public int Length { get; } Property Value Type Description System.Int32 The current size of this BytesRefArray Methods | Improve this Doc View Source Append(BytesRef) Appends a copy of the given BytesRef to this BytesRefArray . Declaration public int Append(BytesRef bytes) Parameters Type Name Description BytesRef bytes The bytes to append Returns Type Description System.Int32 The index of the appended bytes | Improve this Doc View Source Clear() Clears this BytesRefArray Declaration public void Clear() | Improve this Doc View Source Get(BytesRef, Int32) Returns the n'th element of this BytesRefArray Declaration public BytesRef Get(BytesRef spare, int index) Parameters Type Name Description BytesRef spare A spare BytesRef instance System.Int32 index The elements index to retrieve Returns Type Description BytesRef The n'th element of this BytesRefArray | Improve this Doc View Source GetIterator() Sugar for GetIterator(IComparer<BytesRef>) with a null comparer Declaration public IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator | Improve this Doc View Source GetIterator(IComparer<BytesRef>) Returns a IBytesRefIterator with point in time semantics. The iterator provides access to all so far appended BytesRef instances. If a non null IComparer{BytesRef} is provided the iterator will iterate the byte values in the order specified by the comparer. Otherwise the order is the same as the values were appended. This is a non-destructive operation. Declaration public IBytesRefIterator GetIterator(IComparer<BytesRef> comp) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comp Returns Type Description IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ByteBlockPool.html",
    "title": "Class ByteBlockPool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBlockPool Class that Posting and PostingVector use to write byte streams into shared fixed-size byte[] arrays. The idea is to allocate slices of increasing lengths. For example, the first slice is 5 bytes, the next slice is 14, etc. We start by writing our bytes into the first 5 bytes. When we hit the end of the slice, we allocate the next slice and then write the address of the new slice into the last 4 bytes of the previous slice (the \"forwarding address\"). Each slice is filled with 0's initially, and we mark the end with a non-zero byte. This way the methods that are writing into the slice don't need to record its length and instead allocate a new slice once they hit a non-zero byte. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ByteBlockPool Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class ByteBlockPool Constructors | Improve this Doc View Source ByteBlockPool(ByteBlockPool.Allocator) Declaration public ByteBlockPool(ByteBlockPool.Allocator allocator) Parameters Type Name Description ByteBlockPool.Allocator allocator Fields | Improve this Doc View Source BYTE_BLOCK_MASK Declaration public static readonly int BYTE_BLOCK_MASK Field Value Type Description System.Int32 | Improve this Doc View Source BYTE_BLOCK_SHIFT Declaration public static readonly int BYTE_BLOCK_SHIFT Field Value Type Description System.Int32 | Improve this Doc View Source BYTE_BLOCK_SIZE Declaration public static readonly int BYTE_BLOCK_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source FIRST_LEVEL_SIZE The first level size for new slices Declaration public static readonly int FIRST_LEVEL_SIZE Field Value Type Description System.Int32 See Also NewSlice(Int32) | Improve this Doc View Source LEVEL_SIZE_ARRAY An array holding the level sizes for byte slices. Declaration public static readonly int[] LEVEL_SIZE_ARRAY Field Value Type Description System.Int32 [] | Improve this Doc View Source NEXT_LEVEL_ARRAY An array holding the offset into the LEVEL_SIZE_ARRAY to quickly navigate to the next slice level. Declaration public static readonly int[] NEXT_LEVEL_ARRAY Field Value Type Description System.Int32 [] Properties | Improve this Doc View Source Buffer Current head buffer Declaration public byte[] Buffer { get; set; } Property Value Type Description System.Byte [] | Improve this Doc View Source Buffers Array of buffers currently used in the pool. Buffers are allocated if needed don't modify this outside of this class. Declaration public byte[][] Buffers { get; set; } Property Value Type Description System.Byte [][] | Improve this Doc View Source ByteOffset Current head offset Declaration public int ByteOffset { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteUpto Where we are in head buffer Declaration public int ByteUpto { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AllocSlice(Byte[], Int32) Creates a new byte slice with the given starting size and returns the slices offset in the pool. Declaration public int AllocSlice(byte[] slice, int upto) Parameters Type Name Description System.Byte [] slice System.Int32 upto Returns Type Description System.Int32 | Improve this Doc View Source Append(BytesRef) Appends the bytes in the provided BytesRef at the current position. Declaration public void Append(BytesRef bytes) Parameters Type Name Description BytesRef bytes | Improve this Doc View Source NewSlice(Int32) Allocates a new slice with the given size. Declaration public int NewSlice(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Int32 See Also FIRST_LEVEL_SIZE | Improve this Doc View Source NextBuffer() Advances the pool to its next buffer. This method should be called once after the constructor to initialize the pool. In contrast to the constructor a Reset() call will advance the pool to its first buffer immediately. Declaration public void NextBuffer() | Improve this Doc View Source ReadBytes(Int64, Byte[], Int32, Int32) Reads bytes bytes out of the pool starting at the given offset with the given length into the given byte array at offset off . Note: this method allows to copy across block boundaries. Declaration public void ReadBytes(long offset, byte[] bytes, int off, int length) Parameters Type Name Description System.Int64 offset System.Byte [] bytes System.Int32 off System.Int32 length | Improve this Doc View Source Reset() Resets the pool to its initial state reusing the first buffer and fills all buffers with 0 bytes before they reused or passed to RecycleByteBlocks(Byte[][], Int32, Int32) . Calling NextBuffer() is not needed after reset. Declaration public void Reset() | Improve this Doc View Source Reset(Boolean, Boolean) Expert: Resets the pool to its initial state reusing the first buffer. Calling NextBuffer() is not needed after reset. Declaration public void Reset(bool zeroFillBuffers, bool reuseFirst) Parameters Type Name Description System.Boolean zeroFillBuffers if true the buffers are filled with 0 . this should be set to true if this pool is used with slices. System.Boolean reuseFirst if true the first buffer will be reused and calling NextBuffer() is not needed after reset if the block pool was used before ie. NextBuffer() was called before. | Improve this Doc View Source SetBytesRef(BytesRef, Int32) Declaration public void SetBytesRef(BytesRef term, int textStart) Parameters Type Name Description BytesRef term System.Int32 textStart Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.StreamTokenizer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.StreamTokenizer.html",
    "title": "Class StreamTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StreamTokenizer Parses a stream into a set of defined tokens, one at a time. The different types of tokens that can be found are numbers, identifiers, quoted strings, and different comment styles. The class can be used for limited processing of source code of programming languages like Java, although it is nowhere near a full parser. Inheritance System.Object StreamTokenizer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public class StreamTokenizer Constructors | Improve this Doc View Source StreamTokenizer(Stream) Constructs a new StreamTokenizer with input as source input stream. This constructor is deprecated; instead, the constructor that takes a System.IO.TextReader as an arugment should be used. Declaration [Obsolete(\"Use StreamTokenizer(TextReader)\")] public StreamTokenizer(Stream input) Parameters Type Name Description System.IO.Stream input the source stream from which to parse tokens. Exceptions Type Condition System.ArgumentNullException If input is null . | Improve this Doc View Source StreamTokenizer(TextReader) Constructs a new {@code StreamTokenizer} with {@code r} as source reader. The tokenizer's initial state is as follows: All byte values 'A' through 'Z', 'a' through 'z', and '\\u00A0' through '\\u00FF' are considered to be alphabetic. All byte values '\\u0000' through '\\u0020' are considered to be white space. '/' is a comment character. Single quote '&apos;' and double quote '\"' are string quote characters. Numbers are parsed. End of lines are considered to be white space rather than separate tokens. C-style and C++-style comments are not recognized. Declaration public StreamTokenizer(TextReader reader) Parameters Type Name Description System.IO.TextReader reader The source text reader from which to parse tokens. Fields | Improve this Doc View Source TT_EOF The constant representing the end of the stream. Declaration public const int TT_EOF = -1 Field Value Type Description System.Int32 | Improve this Doc View Source TT_EOL The constant representing the end of the line. Declaration public const int TT_EOL = 10 Field Value Type Description System.Int32 | Improve this Doc View Source TT_NUMBER The constant representing a number token. Declaration public const int TT_NUMBER = -2 Field Value Type Description System.Int32 | Improve this Doc View Source TT_WORD The constant representing a word token. Declaration public const int TT_WORD = -3 Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsEOLSignificant Specifies whether the end of a line is significant and should be returned as TT_EOF in TokenType by this tokenizer. true if EOL is significant, false otherwise. Declaration public virtual bool IsEOLSignificant { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LineNumber Gets the current line number. Declaration public int LineNumber { get; } Property Value Type Description System.Int32 | Improve this Doc View Source LowerCaseMode Specifies whether word tokens should be converted to lower case when they are stored in StringValue . true if StringValue should be converted to lower case, false otherwise. Declaration public bool LowerCaseMode { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source NumberValue Contains a number if the current token is a number ( TokenType == TT_NUMBER ). Declaration public double NumberValue { get; set; } Property Value Type Description System.Double | Improve this Doc View Source SlashSlashComments Specifies whether \"slash-slash\" (C++-style) comments shall be recognized. This kind of comment ends at the end of the line. true if // should be recognized as the start of a comment, false otherwise. Declaration public bool SlashSlashComments { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source SlashStarComments Specifies whether \"slash-star\" (C-style) comments shall be recognized. Slash-star comments cannot be nested and end when a star-slash combination is found. true if /* should be recognized as the start of a comment, false otherwise. Declaration public bool SlashStarComments { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source StringValue Contains a string if the current token is a word ( TokenType == TT_WORD ). Declaration public string StringValue { get; set; } Property Value Type Description System.String | Improve this Doc View Source TokenType After calling {@code nextToken()}, {@code ttype} contains the type of token that has been read. When a single character is read, its value converted to an integer is stored in {@code ttype}. For a quoted string, the value is the quoted character. Otherwise, its value is one of the following: TT_WORD - the token is a word. TT_NUMBER - the token is a number. TT_EOL - the end of line has been reached. Depends on whether IsEOLSignificant is true . TT_EOF - the end of the stream has been reached. Declaration public int TokenType { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CommentChar(Int32) Specifies that the character ch shall be treated as a comment character. Declaration public virtual void CommentChar(int ch) Parameters Type Name Description System.Int32 ch The character to be considered a comment character. | Improve this Doc View Source NextToken() Parses the next token from this tokenizer's source stream or reader. The type of the token is stored in the TokenType field, additional information may be stored in the NumberValue or StringValue fields. Declaration public int NextToken() Returns Type Description System.Int32 The value of TokenType . Exceptions Type Condition System.IO.IOException If an I/O error occurs while parsing the next token. | Improve this Doc View Source OrdinaryChar(Int32) Specifies that the character ch shall be treated as an ordinary character by this tokenizer. That is, it has no special meaning as a comment character, word component, white space, string delimiter or number. Declaration public void OrdinaryChar(int ch) Parameters Type Name Description System.Int32 ch The character to be considered an ordinary character. | Improve this Doc View Source OrdinaryChars(Int32, Int32) Specifies that the characters in the range from low to hi shall be treated as an ordinary character by this tokenizer. That is, they have no special meaning as a comment character, word component, white space, string delimiter or number. Declaration public void OrdinaryChars(int low, int hi) Parameters Type Name Description System.Int32 low The first character in the range of ordinary characters. System.Int32 hi The last character in the range of ordinary characters. | Improve this Doc View Source ParseNumbers() Specifies that this tokenizer shall parse numbers. Declaration public void ParseNumbers() | Improve this Doc View Source PushBack() Indicates that the current token should be pushed back and returned again the next time NextToken() is called. Declaration public void PushBack() | Improve this Doc View Source QuoteChar(Int32) Specifies that the character ch shall be treated as a quote character. Declaration public void QuoteChar(int ch) Parameters Type Name Description System.Int32 ch The character to be considered a quote character. | Improve this Doc View Source ResetSyntax() Specifies that all characters shall be treated as ordinary characters. Declaration public void ResetSyntax() | Improve this Doc View Source ToString() Returns the state of this tokenizer in a readable format. Declaration public override string ToString() Returns Type Description System.String The current state of this tokenizer. Overrides System.Object.ToString() | Improve this Doc View Source WhitespaceChars(Int32, Int32) Specifies that the characters in the range from low to hi shall be treated as whitespace characters by this tokenizer. Declaration public void WhitespaceChars(int low, int hi) Parameters Type Name Description System.Int32 low The first character in the range of whitespace characters. System.Int32 hi The last character in the range of whitespace characters. | Improve this Doc View Source WordChars(Int32, Int32) Specifies that the characters in the range from low to hi shall be treated as word characters by this tokenizer. A word consists of a word character followed by zero or more word or number characters. Declaration public void WordChars(int low, int hi) Parameters Type Name Description System.Int32 low The first character in the range of word characters. System.Int32 hi The last character in the range of word characters. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.StreamExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.StreamExtensions.html",
    "title": "Class StreamExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StreamExtensions Extension methods that make a System.IO.Stream effectively into a binary serializer with no encoding. We simply convert types into bytes and write them without any concern whether surrogate pairs are respected, similar to what BinaryFormatter does. This makes it possible to serialize/deserialize raw character arrays and get the data back in the same order without any exceptions warning that the order is not valid and without the need for BinaryFormatter. Byte order is little-endian (same as System.IO.BinaryReader and System.IO.BinaryWriter ). Inheritance System.Object StreamExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public static class StreamExtensions Methods | Improve this Doc View Source ReadChars(Stream, Int32) Declaration public static char[] ReadChars(this Stream stream, int count) Parameters Type Name Description System.IO.Stream stream System.Int32 count Returns Type Description System.Char [] | Improve this Doc View Source ReadInt32(Stream) Declaration public static int ReadInt32(this Stream stream) Parameters Type Name Description System.IO.Stream stream Returns Type Description System.Int32 | Improve this Doc View Source ReadInt64(Stream) Declaration public static long ReadInt64(this Stream stream) Parameters Type Name Description System.IO.Stream stream Returns Type Description System.Int64 | Improve this Doc View Source Write(Stream, Char[]) Declaration public static void Write(this Stream stream, char[] chars) Parameters Type Name Description System.IO.Stream stream System.Char [] chars | Improve this Doc View Source Write(Stream, Int32) Declaration public static void Write(this Stream stream, int value) Parameters Type Name Description System.IO.Stream stream System.Int32 value | Improve this Doc View Source Write(Stream, Int64) Declaration public static void Write(this Stream stream, long value) Parameters Type Name Description System.IO.Stream stream System.Int64 value"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.IDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.IDataOutput.html",
    "title": "Interface IDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDataOutput Equivalent to Java's DataOutut interface Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public interface IDataOutput Methods | Improve this Doc View Source Write(Byte[]) Declaration void Write(byte[] buffer) Parameters Type Name Description System.Byte [] buffer | Improve this Doc View Source Write(Byte[], Int32, Int32) Declaration void Write(byte[] buffer, int offset, int count) Parameters Type Name Description System.Byte [] buffer System.Int32 offset System.Int32 count | Improve this Doc View Source Write(Int32) Declaration void Write(int oneByte) Parameters Type Name Description System.Int32 oneByte | Improve this Doc View Source WriteBoolean(Boolean) Declaration void WriteBoolean(bool val) Parameters Type Name Description System.Boolean val | Improve this Doc View Source WriteByte(Int32) Declaration void WriteByte(int val) Parameters Type Name Description System.Int32 val | Improve this Doc View Source WriteBytes(String) Declaration void WriteBytes(string str) Parameters Type Name Description System.String str | Improve this Doc View Source WriteChar(Int32) Declaration void WriteChar(int val) Parameters Type Name Description System.Int32 val | Improve this Doc View Source WriteChars(String) Declaration void WriteChars(string str) Parameters Type Name Description System.String str | Improve this Doc View Source WriteDouble(Double) Declaration void WriteDouble(double val) Parameters Type Name Description System.Double val | Improve this Doc View Source WriteInt16(Int32) NOTE: This was writeShort() in Java Declaration void WriteInt16(int val) Parameters Type Name Description System.Int32 val | Improve this Doc View Source WriteInt32(Int32) NOTE: This was writeInt() in Java Declaration void WriteInt32(int val) Parameters Type Name Description System.Int32 val | Improve this Doc View Source WriteInt64(Int64) NOTE: This was writeInt64() in Java Declaration void WriteInt64(long val) Parameters Type Name Description System.Int64 val | Improve this Doc View Source WriteSingle(Single) NOTE: This was writeFloat() in Java Declaration void WriteSingle(float val) Parameters Type Name Description System.Single val | Improve this Doc View Source WriteUTF(String) Declaration void WriteUTF(string str) Parameters Type Name Description System.String str Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.IDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.IDataInput.html",
    "title": "Interface IDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDataInput Equivalent to Java's DataInput interface Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public interface IDataInput Methods | Improve this Doc View Source ReadBoolean() Declaration bool ReadBoolean() Returns Type Description System.Boolean | Improve this Doc View Source ReadByte() NOTE: This was readUnsignedByte() in Java Declaration int ReadByte() Returns Type Description System.Int32 | Improve this Doc View Source ReadChar() Declaration char ReadChar() Returns Type Description System.Char | Improve this Doc View Source ReadDouble() Declaration double ReadDouble() Returns Type Description System.Double | Improve this Doc View Source ReadFully(Byte[]) Declaration void ReadFully(byte[] b) Parameters Type Name Description System.Byte [] b | Improve this Doc View Source ReadFully(Byte[], Int32, Int32) Declaration void ReadFully(byte[] b, int off, int len) Parameters Type Name Description System.Byte [] b System.Int32 off System.Int32 len | Improve this Doc View Source ReadInt16() NOTE: This was readShort() in Java Declaration short ReadInt16() Returns Type Description System.Int16 | Improve this Doc View Source ReadInt32() NOTE: This was readInt() in Java Declaration int ReadInt32() Returns Type Description System.Int32 | Improve this Doc View Source ReadInt64() NOTE: This was readLong() in Java Declaration long ReadInt64() Returns Type Description System.Int64 | Improve this Doc View Source ReadLine() Declaration string ReadLine() Returns Type Description System.String | Improve this Doc View Source ReadSByte() NOTE: This was readByte() in Java Declaration int ReadSByte() Returns Type Description System.Int32 | Improve this Doc View Source ReadSingle() Declaration float ReadSingle() Returns Type Description System.Single | Improve this Doc View Source ReadUInt16() NOTE: This was readUnsignedShort() in Java Declaration int ReadUInt16() Returns Type Description System.Int32 | Improve this Doc View Source ReadUTF() Declaration string ReadUTF() Returns Type Description System.String | Improve this Doc View Source SkipBytes(Int32) Declaration int SkipBytes(int n) Parameters Type Name Description System.Int32 n Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.AssemblyUtils.DotNetFrameworkFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AssemblyUtils.DotNetFrameworkFilter.html",
    "title": "Class AssemblyUtils.DotNetFrameworkFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssemblyUtils.DotNetFrameworkFilter Assembly filter logic from: https://raw.githubusercontent.com/Microsoft/dotnet-apiport/master/src/Microsoft.Fx.Portability/Analyzer/DotNetFrameworkFilter.cs Inheritance System.Object AssemblyUtils.DotNetFrameworkFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class DotNetFrameworkFilter Methods | Improve this Doc View Source IsFrameworkAssembly(Assembly) Gets a best guess as to whether this assembly is a .NET Framework assembly or not. Declaration public static bool IsFrameworkAssembly(Assembly assembly) Parameters Type Name Description System.Reflection.Assembly assembly Returns Type Description System.Boolean | Improve this Doc View Source IsFrameworkAssembly(AssemblyName) Gets a best guess as to whether this assembly is a .NET Framework assembly or not. Declaration public static bool IsFrameworkAssembly(AssemblyName assembly) Parameters Type Name Description System.Reflection.AssemblyName assembly Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Support.AssemblyExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AssemblyExtensions.html",
    "title": "Class AssemblyExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssemblyExtensions Inheritance System.Object AssemblyExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class AssemblyExtensions Methods | Improve this Doc View Source FindAndGetManifestResourceStream(Assembly, Type, String) Aggressively searches for a resource and, if found, returns an open System.IO.Stream where it can be read. Declaration public static Stream FindAndGetManifestResourceStream(this Assembly assembly, Type type, string name) Parameters Type Name Description System.Reflection.Assembly assembly this assembly System.Type type a type in the same namespace as the resource System.String name the resource name to locate Returns Type Description System.IO.Stream an open System.IO.Stream that can be used to read the resource, or null if the resource cannot be found. | Improve this Doc View Source FindResource(Assembly, Type, String) Aggressively searches to find a resource based on a System.Type and resource name. Declaration public static string FindResource(this Assembly assembly, Type type, string name) Parameters Type Name Description System.Reflection.Assembly assembly this assembly System.Type type a type in the same namespace as the resource System.String name the resource name to locate Returns Type Description System.String the resource, if found; if not found, returns null"
  },
  "api/Lucene.Net/Lucene.Net.Support.Arrays.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Arrays.html",
    "title": "Class Arrays | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Arrays Inheritance System.Object Arrays Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Arrays Methods | Improve this Doc View Source AsList<T>(T[]) Declaration public static List<T> AsList<T>(params T[] objects) Parameters Type Name Description T[] objects Returns Type Description System.Collections.Generic.List <T> Type Parameters Name Description T | Improve this Doc View Source CopyOf<T>(T[], Int32) Declaration public static T[] CopyOf<T>(T[] original, int newLength) Parameters Type Name Description T[] original System.Int32 newLength Returns Type Description T[] Type Parameters Name Description T | Improve this Doc View Source CopyOfRange<T>(T[], Int32, Int32) Declaration public static T[] CopyOfRange<T>(T[] original, int startIndexInc, int endIndexExc) Parameters Type Name Description T[] original System.Int32 startIndexInc System.Int32 endIndexExc Returns Type Description T[] Type Parameters Name Description T | Improve this Doc View Source Equals<T>(T[], T[]) Compares the entire members of one array whith the other one. Declaration public static bool Equals<T>(T[] a, T[] b) Parameters Type Name Description T[] a The array to be compared. T[] b The array to be compared with. Returns Type Description System.Boolean Returns true if the two specified arrays of Objects are equal to one another. The two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. Two objects e1 and e2 are considered equal if (e1==null ? e2==null : e1.Equals(e2)). In other words, the two arrays are equal if they contain the same elements in the same order. Also, two array references are considered equal if both are null. Note that if the type of is a System.Collections.Generic.IDictionary<TKey, TValue> , System.Collections.Generic.IList<T> , or System.Collections.Generic.ISet<T> , its values and any nested collection values will be compared for equality as well. Type Parameters Name Description T | Improve this Doc View Source Fill<T>(T[], T) Assigns the specified value to each element of the specified array. Declaration public static void Fill<T>(T[] a, T val) Parameters Type Name Description T[] a the array to be filled T val the value to be stored in all elements of the array Type Parameters Name Description T the type of the array | Improve this Doc View Source Fill<T>(T[], Int32, Int32, T) Assigns the specified long value to each element of the specified range of the specified array of longs. The range to be filled extends from index fromIndex , inclusive, to index toIndex , exclusive. (If fromIndex==toIndex , the range to be filled is empty.) Declaration public static void Fill<T>(T[] a, int fromIndex, int toIndex, T val) Parameters Type Name Description T[] a the array to be filled System.Int32 fromIndex the index of the first element (inclusive) to be filled with the specified value System.Int32 toIndex the index of the last element (exclusive) to be filled with the specified value T val the value to be stored in all elements of the array Type Parameters Name Description T the type of the array Exceptions Type Condition System.ArgumentException if fromIndex > toIndex System.ArgumentOutOfRangeException if fromIndex < 0 or toIndex > a.Length | Improve this Doc View Source GetHashCode<T>(T[]) Declaration public static int GetHashCode<T>(T[] a) Parameters Type Name Description T[] a Returns Type Description System.Int32 Type Parameters Name Description T | Improve this Doc View Source ToString(IEnumerable<String>) Declaration public static string ToString(IEnumerable<string> values) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > values Returns Type Description System.String | Improve this Doc View Source ToString<T>(IEnumerable<T>) Declaration public static string ToString<T>(IEnumerable<T> values) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> values Returns Type Description System.String Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Store.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.html",
    "title": "Namespace Lucene.Net.Store | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Store <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Binary i/o API, used for all index data. Classes BaseDirectory Base implementation for a concrete Directory . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BufferedChecksum Wraps another IChecksum with an internal buffer to speed up checksum calculations. BufferedChecksumIndexInput Simple implementation of ChecksumIndexInput that wraps another input and delegates calls. BufferedIndexInput Base implementation class for buffered IndexInput . BufferedIndexOutput Base implementation class for buffered IndexOutput . ByteArrayDataInput DataInput backed by a byte array. WARNING: this class omits all low-level checks. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteArrayDataOutput DataOutput backed by a byte array. WARNING: this class omits most low-level checks, so be sure to test heavily with assertions enabled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ByteBufferIndexInput Base IndexInput implementation that uses an array of ByteBuffer s to represent a file. Because Java's ByteBuffer uses an System.Int32 to address the values, it's necessary to access a file greater System.Int32.MaxValue in size using multiple byte buffers. For efficiency, this class requires that the buffers are a power-of-two ( chunkSizePower ). ChecksumIndexInput Extension of IndexInput , computing checksum as it goes. Callers can retrieve the checksum via Checksum . CompoundFileDirectory Class for accessing a compound stream. This class implements a directory, but is limited to only read operations. Directory methods that would normally modify data throw an exception. All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats used by the Codec . When using the Compound File format these files are collapsed into a single .cfs file (except for the LiveDocsFormat , with a corresponding .cfe file indexing its sub-files. Files: .cfs : An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. .cfe : The \"virtual\" compound file's entry table holding all entries in the corresponding .cfs file. Description: Compound (.cfs) --> Header, FileData FileCount Compound Entry Table (.cfe) --> Header, FileCount, <FileName, DataOffset, DataLength> FileCount , Footer Header --> WriteHeader(DataOutput, String, Int32) FileCount --> WriteVInt32(Int32) DataOffset,DataLength --> WriteInt64(Int64) FileName --> WriteString(String) FileData --> raw file data Footer --> WriteFooter(IndexOutput) Notes: FileCount indicates how many files are contained in this compound file. The entry table that follows has that many entries. Each directory entry contains a long pointer to the start of this file's data section, the files length, and a System.String with that file's name. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompoundFileDirectory.FileEntry Offset/Length for a slice inside of a compound file DataInput Abstract base class for performing read operations of Lucene's low-level data types. DataInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every DataInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new DataInput which operates on the same underlying resource, but positioned independently. DataOutput Abstract base class for performing write operations of Lucene's low-level data types. DataOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Directory A Directory is a flat list of files. Files may be written once, when they are created. Once a file is created it may only be opened for read, or deleted. Random access is permitted both when reading and writing. .NET's i/o APIs not used directly, but rather all i/o is through this API. This permits things such as: implementation of RAM-based indices; implementation indices stored in a database; implementation of an index as a single file; Directory locking is implemented by an instance of LockFactory , and can be changed for each Directory instance using SetLockFactory(LockFactory) . Directory.IndexInputSlicer Allows to create one or more sliced IndexInput instances from a single file handle. Some Directory implementations may be able to efficiently map slices of a file into memory when only certain parts of a file are required. @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk FileSwitchDirectory Expert: A Directory instance that switches files between two other Directory instances. Files with the specified extensions are placed in the primary directory; others are placed in the secondary directory. The provided ISet{string} must not change once passed to this class, and must allow multiple threads to call contains at once. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterDirectory Directory implementation that delegates calls to another directory. This class can be used to add limitations on top of an existing Directory implementation such as rate limiting ( RateLimitedDirectoryWrapper ) or to add additional sanity checks for tests. However, if you plan to write your own Directory implementation, you should consider extending directly Directory or BaseDirectory rather than try to reuse functionality of existing Directory s by extending this class. This is a Lucene.NET INTERNAL API, use at your own risk FlushInfo A FlushInfo provides information required for a FLUSH context. It is used as part of an IOContext in case of FLUSH context. FSDirectory Base class for Directory implementations that store index files in the file system. There are currently three core subclasses: SimpleFSDirectory is a straightforward implementation using System.IO.FileStream . However, it has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. NIOFSDirectory uses java.nio's FileChannel's positional io when reading to avoid synchronization when reading from the same file. Unfortunately, due to a Windows-only Sun JRE bug this is a poor choice for Windows, but on all other platforms this is the preferred choice. Applications using or System.Threading.Tasks.Task<TResult> should use SimpleFSDirectory instead. See NIOFSDirectory java doc for details. MMapDirectory uses memory-mapped IO when reading. This is a good choice if you have plenty of virtual memory relative to your index size, eg if you are running on a 64 bit runtime, or you are running on a 32 bit runtime but your index sizes are small enough to fit into the virtual memory space. Applications using or System.Threading.Tasks.Task should use SimpleFSDirectory instead. See MMapDirectory doc for details. Unfortunately, because of system peculiarities, there is no single overall best implementation. Therefore, we've added the Open(String) method (or one of its overloads), to allow Lucene to choose the best FSDirectory implementation given your environment, and the known limitations of each implementation. For users who have no reason to prefer a specific implementation, it's best to simply use Open(String) (or one of its overloads). For all others, you should instantiate the desired implementation directly. The locking implementation is by default NativeFSLockFactory , but can be changed by passing in a custom LockFactory instance. FSDirectory.FSIndexOutput Writes output with System.IO.FileStream.Write(System.Byte[],System.Int32,System.Int32) FSLockFactory Base class for file system based locking implementation. IndexInput Abstract base class for input from a file in a Directory . A random-access input stream. Used for all Lucene index input operations. IndexInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every IndexInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new IndexInput which operates on the same underlying resource, but positioned independently. Lucene never closes cloned IndexInput s, it will only do this on the original one. The original instance must take care that cloned instances throw System.ObjectDisposedException when the original one is closed. IndexOutput Abstract base class for output to a file in a Directory . A random-access output stream. Used for all Lucene index output operations. IndexOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). InputStreamDataInput A DataInput wrapping a plain System.IO.Stream . IOContext IOContext holds additional details on the merge/search context. A IOContext object can never be initialized as null as passed as a parameter to either OpenInput(String, IOContext) or CreateOutput(String, IOContext) Lock An interprocess mutex lock. Typical use might look like: var result = Lock.With.NewAnonymous<string>( @lock: directory.MakeLock(\"my.lock\"), lockWaitTimeout: Lock.LOCK_OBTAIN_WAIT_FOREVER, doBody: () => { //... code to execute while locked ... return \"the result\"; }).Run(); Lock.With<T> Utility class for executing code with exclusive access. LockFactory Base class for Locking implementation. Directory uses instances of this class to implement locking. Lucene uses NativeFSLockFactory by default for FSDirectory -based index directories. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that some LockFactory implementation is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . LockObtainFailedException This exception is thrown when the write.lock could not be acquired. This happens when a writer tries to open an index that another writer already has open. LockReleaseFailedException This exception is thrown when the write.lock could not be released. LockStressTest Simple standalone tool that forever acquires & releases a lock using a specific LockFactory . Run without any args to see usage. LockVerifyServer Simple standalone server that must be running when you use VerifyingLockFactory . This server simply verifies at most one process holds the lock at a time. Run without any args to see usage. MergeInfo A MergeInfo provides information required for a MERGE context. It is used as part of an IOContext in case of MERGE context. MMapDirectory File-based Directory implementation that uses System.IO.MemoryMappedFiles.MemoryMappedFile for reading, and FSDirectory.FSIndexOutput for writing. NOTE : memory mapping uses up a portion of the virtual memory address space in your process equal to the size of the file being mapped. Before using this class, be sure your have plenty of virtual address space, e.g. by using a 64 bit runtime, or a 32 bit runtime with indexes that are guaranteed to fit within the address space. On 32 bit platforms also consult MMapDirectory(DirectoryInfo, LockFactory, Int32) if you have problems with mmap failing because of fragmented address space. If you get an System.OutOfMemoryException , it is recommended to reduce the chunk size, until it works. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying channel immediately if at the same time the thread is blocked on IO. The channel will remain closed and subsequent access to MMapDirectory will throw a System.ObjectDisposedException . MMapDirectory.MMapIndexInput NativeFSLockFactory Implements LockFactory using native OS file locks. For NFS based access to an index, it's recommended that you try SimpleFSLockFactory first and work around the one limitation that a lock file could be left when the runtime exits abnormally. The primary benefit of NativeFSLockFactory is that locks (not the lock file itsself) will be properly removed (by the OS) if the runtime has an abnormal exit. Note that, unlike SimpleFSLockFactory , the existence of leftover lock files in the filesystem is fine because the OS will free the locks held against these files even though the files still remain. Lucene will never actively remove the lock files, so although you see them, the index may not be locked. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . NIOFSDirectory An FSDirectory implementation that uses System.IO.FileStream 's positional read, which allows multiple threads to read from the same file without synchronizing. This class only uses System.IO.FileStream when reading; writing is achieved with FSDirectory.FSIndexOutput . NOTE : NIOFSDirectory is not recommended on Windows because of a bug in how FileChannel.read is implemented in Sun's JRE. Inside of the implementation the position is apparently synchronized. See here for details. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying file descriptor immediately if at the same time the thread is blocked on IO. The file descriptor will remain closed and subsequent access to NIOFSDirectory will throw a System.ObjectDisposedException . If your application uses either or System.Threading.Tasks.Task you should use SimpleFSDirectory in favor of NIOFSDirectory . NIOFSDirectory.NIOFSIndexInput Reads bytes with the Read(FileStream, ByteBuffer, Int64) extension method for System.IO.FileStream . NoLockFactory Use this LockFactory to disable locking entirely. Only one instance of this lock is created. You should call GetNoLockFactory() to get the instance. NRTCachingDirectory Wraps a RAMDirectory around any provided delegate directory, to be used during NRT search. This class is likely only useful in a near-real-time context, where indexing rate is lowish but reopen rate is highish, resulting in many tiny files being written. This directory keeps such segments (as well as the segments produced by merging them, as long as they are small enough), in RAM. This is safe to use: when your app calls Commit() , all cached files will be flushed from the cached and sync'd. Here's a simple example usage: Directory fsDir = FSDirectory.Open(new DirectoryInfo(\"/path/to/index\")); NRTCachingDirectory cachedFSDir = new NRTCachingDirectory(fsDir, 5.0, 60.0); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_48, analyzer); IndexWriter writer = new IndexWriter(cachedFSDir, conf); This will cache all newly flushed segments, all merges whose expected segment size is <= 5 MB, unless the net cached bytes exceeds 60 MB at which point all writes will not be cached (until the net bytes falls below 60 MB). This is a Lucene.NET EXPERIMENTAL API, use at your own risk OutputStreamDataOutput A DataOutput wrapping a plain System.IO.Stream . RAMDirectory A memory-resident Directory implementation. Locking implementation is by default the SingleInstanceLockFactory but can be changed with SetLockFactory(LockFactory) . Warning: This class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. This class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. It is recommended to materialize large indexes on disk and use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. RAMFile Represents a file in RAM as a list of byte[] buffers. This is a Lucene.NET INTERNAL API, use at your own risk RAMInputStream A memory-resident IndexInput implementation. This is a Lucene.NET INTERNAL API, use at your own risk RAMOutputStream A memory-resident IndexOutput implementation. This is a Lucene.NET INTERNAL API, use at your own risk RateLimitedDirectoryWrapper A Directory wrapper that allows IndexOutput rate limiting using IO context ( IOContext.UsageContext ) specific rate limiters ( RateLimiter ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk RateLimiter Abstract base class to rate limit IO. Typically implementations are shared across multiple IndexInput s or IndexOutput s (for example those involved all merging). Those IndexInput s and IndexOutput s would call Pause(Int64) whenever they want to read bytes or write bytes. RateLimiter.SimpleRateLimiter Simple class to rate limit IO. SimpleFSDirectory A straightforward implementation of FSDirectory using System.IO.FileStream . However, this class has poor concurrent performance (multiple threads will bottleneck) as it synchronizes when multiple threads read from the same file. It's usually better to use NIOFSDirectory or MMapDirectory instead. SimpleFSDirectory.SimpleFSIndexInput Reads bytes with System.IO.FileStream.Seek(System.Int64,System.IO.SeekOrigin) followed by System.IO.FileStream.Read(System.Byte[],System.Int32,System.Int32) . SimpleFSLockFactory Implements LockFactory using System.IO.File.WriteAllText(System.String,System.String,System.Text.Encoding) (writes the file with UTF8 encoding and no byte order mark). Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change to all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . SingleInstanceLockFactory Implements LockFactory for a single in-process instance, meaning all locking will take place through this one instance. Only use this LockFactory when you are certain all IndexReader s and IndexWriter s for a given index are running against a single shared in-process Directory instance. This is currently the default locking for RAMDirectory . TrackingDirectoryWrapper A delegating Directory that records which files were written to and deleted. VerifyingLockFactory A LockFactory that wraps another LockFactory and verifies that each lock obtain/release is \"correct\" (never results in two processes holding the lock at the same time). It does this by contacting an external server ( LockVerifyServer ) to assert that at most one process holds the lock at a time. To use this, you should also run LockVerifyServer on the host & port matching what you pass to the constructor. Enums IOContext.UsageContext IOContext.UsageContext is a enumeration which specifies the context in which the Directory is being used for. NOTE: This was Context in Lucene"
  },
  "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.FileEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.FileEntry.html",
    "title": "Class CompoundFileDirectory.FileEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundFileDirectory.FileEntry Offset/Length for a slice inside of a compound file Inheritance System.Object CompoundFileDirectory.FileEntry Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class FileEntry Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.html",
    "title": "Namespace Lucene.Net.Search.Spans | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Spans <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The calculus of spans. A span is a <doc,startPosition,endPosition> tuple. The following span query operators are implemented: * A SpanTermQuery matches all spans containing a particular Term . * A SpanNearQuery matches spans which occur near one another, and can be used to implement things like phrase search (when constructed from SpanTermQuery s) and inter-phrase proximity (when constructed from other SpanNearQuery s). * A SpanOrQuery merges spans from a number of other SpanQuery s. * A SpanNotQuery removes spans matching one SpanQuery which overlap (or comes near) another. This can be used, e.g., to implement within-paragraph search. * A SpanFirstQuery matches spans matching q whose end position is less than n . This can be used to constrain matches to the first part of the document. * A SpanPositionRangeQuery is a more general form of SpanFirstQuery that can constrain matches to arbitrary portions of the document. In all cases, output spans are minimally inclusive. In other words, a span formed by matching a span in x and y starts at the lesser of the two starts and ends at the greater of the two ends. For example, a span query which matches \"John Kerry\" within ten words of \"George Bush\" within the first 100 words of the document could be constructed with: SpanQuery john = new SpanTermQuery(new Term(\"content\", \"john\")); SpanQuery kerry = new SpanTermQuery(new Term(\"content\", \"kerry\")); SpanQuery george = new SpanTermQuery(new Term(\"content\", \"george\")); SpanQuery bush = new SpanTermQuery(new Term(\"content\", \"bush\")); SpanQuery johnKerry = new SpanNearQuery(new SpanQuery[] {john, kerry}, 0, true); SpanQuery georgeBush = new SpanNearQuery(new SpanQuery[] {george, bush}, 0, true); SpanQuery johnKerryNearGeorgeBush = new SpanNearQuery(new SpanQuery[] {johnKerry, georgeBush}, 10, false); SpanQuery johnKerryNearGeorgeBushAtStart = new SpanFirstQuery(johnKerryNearGeorgeBush, 100); Span queries may be freely intermixed with other Lucene queries. So, for example, the above query can be restricted to documents which also use the word \"iraq\" with: Query query = new BooleanQuery(); query.add(johnKerryNearGeorgeBushAtStart, true, false); query.add(new TermQuery(\"content\", \"iraq\"), true, false); Classes FieldMaskingSpanQuery Wrapper to allow SpanQuery objects participate in composite single-field SpanQueries by 'lying' about their search field. That is, the masked SpanQuery will function as normal, but Field simply hands back the value supplied in this class's constructor. This can be used to support Queries like SpanNearQuery or SpanOrQuery across different fields, which is not ordinarily permitted. This can be useful for denormalized relational data: for example, when indexing a document with conceptually many 'children': teacherid: 1 studentfirstname: james studentsurname: jones teacherid: 2 studenfirstname: james studentsurname: smith studentfirstname: sally studentsurname: jones A SpanNearQuery with a slop of 0 can be applied across two SpanTermQuery objects as follows: SpanQuery q1 = new SpanTermQuery(new Term(\"studentfirstname\", \"james\")); SpanQuery q2 = new SpanTermQuery(new Term(\"studentsurname\", \"jones\")); SpanQuery q2m = new FieldMaskingSpanQuery(q2, \"studentfirstname\"); Query q = new SpanNearQuery(new SpanQuery[] { q1, q2m }, -1, false); to search for 'studentfirstname:james studentsurname:jones' and find teacherid 1 without matching teacherid 2 (which has a 'james' in position 0 and 'jones' in position 1). Note: as Field returns the masked field, scoring will be done using the Similarity and collection statistics of the field name supplied, but with the term statistics of the real field. This may lead to exceptions, poor performance, and unexpected scoring behavior. NearSpansOrdered A Spans that is formed from the ordered subspans of a SpanNearQuery where the subspans do not overlap and have a maximum slop between them. The formed spans only contains minimum slop matches. The matching slop is computed from the distance(s) between the non overlapping matching Spans . Successive matches are always formed from the successive Spans of the SpanNearQuery . The formed spans may contain overlaps when the slop is at least 1. For example, when querying using t1 t2 t3 with slop at least 1, the fragment: t1 t2 t1 t3 t2 t3 matches twice: t1 t2 .. t3 t1 .. t2 t3 Expert: Only public for subclassing. Most implementations should not need this class NearSpansUnordered Similar to NearSpansOrdered , but for the unordered case. Expert: Only public for subclassing. Most implementations should not need this class SpanFirstQuery Matches spans near the beginning of a field. This class is a simple extension of SpanPositionRangeQuery in that it assumes the start to be zero and only checks the end boundary. SpanMultiTermQueryWrapper<Q> Wraps any MultiTermQuery as a SpanQuery , so it can be nested within other SpanQuery classes. The query is rewritten by default to a SpanOrQuery containing the expanded terms, but this can be customized. Example: WildcardQuery wildcard = new WildcardQuery(new Term(\"field\", \"bro?n\")); SpanQuery spanWildcard = new SpanMultiTermQueryWrapper<WildcardQuery>(wildcard); // do something with spanWildcard, such as use it in a SpanFirstQuery SpanMultiTermQueryWrapper<Q>.TopTermsSpanBooleanQueryRewrite A rewrite method that first translates each term into a SpanTermQuery in a SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. SpanNearPayloadCheckQuery Only return those matches that have a specific payload at the given position. SpanNearQuery Matches spans which are near one another. One can specify slop , the maximum number of intervening unmatched positions, as well as whether matches are required to be in-order. SpanNotQuery Removes matches which overlap with another SpanQuery or within a x tokens before or y tokens after another SpanQuery . SpanOrQuery Matches the union of its clauses. SpanPayloadCheckQuery Only return those matches that have a specific payload at the given position. Do not use this with a SpanQuery that contains a SpanNearQuery . Instead, use SpanNearPayloadCheckQuery since it properly handles the fact that payloads aren't ordered by SpanNearQuery . SpanPositionCheckQuery Base class for filtering a SpanQuery based on the position of a match. SpanPositionCheckQuery.PositionCheckSpan SpanPositionRangeQuery Checks to see if the Match lies between a start and end position SpanQuery Base class for span-based queries. SpanRewriteMethod Abstract class that defines how the query is rewritten. Spans Expert: an enumeration of span matches. Used to implement span searching. Each span represents a range of term positions within a document. Matches are enumerated in order, by increasing document number, within that by increasing start position and finally by increasing end position. SpanScorer Public for extension only. SpanTermQuery Matches spans containing a term. SpanWeight Expert-only. Public for use by other weight implementations TermSpans Expert: Public for extension only Interfaces ISpanMultiTermQueryWrapper LUCENENET specific interface for referring to/identifying a SpanMultiTermQueryWrapper<Q> without referring to its generic closing type. Enums SpanPositionCheckQuery.AcceptStatus Return value for AcceptPosition(Spans) ."
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.Spans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.Spans.html",
    "title": "Class Spans | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Spans Expert: an enumeration of span matches. Used to implement span searching. Each span represents a range of term positions within a document. Matches are enumerated in order, by increasing document number, within that by increasing start position and finally by increasing end position. Inheritance System.Object Spans NearSpansOrdered NearSpansUnordered SpanPositionCheckQuery.PositionCheckSpan TermSpans Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public abstract class Spans Properties | Improve this Doc View Source Doc Returns the document number of the current match. Initially invalid. Declaration public abstract int Doc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source End Returns the end position of the current match. Initially invalid. Declaration public abstract int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsPayloadAvailable Checks if a payload can be loaded at this position. Payloads can only be loaded once per call to Next() . Declaration public abstract bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean true if there is a payload available at this position that can be loaded | Improve this Doc View Source Start Returns the start position of the current match. Initially invalid. Declaration public abstract int Start { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetCost() Returns the estimated cost of this spans. This is generally an upper bound of the number of documents this iterator might match, but may be a rough heuristic, hardcoded value, or otherwise completely inaccurate. Declaration public abstract long GetCost() Returns Type Description System.Int64 | Improve this Doc View Source GetPayload() Returns the payload data for the current span. this is invalid until Next() is called for the first time. This method must not be called more than once after each call of Next() . However, most payloads are loaded lazily, so if the payload data for the current position is not needed, this method may not be called at all for performance reasons. An ordered SpanQuery does not lazy load, so if you have payloads in your index and you do not want ordered SpanNearQuerys to collect payloads, you can disable collection with a constructor option. Note that the return type is a collection, thus the ordering should not be relied upon. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> A ICollection{byte[]} of byte arrays containing the data of this payload, otherwise null if IsPayloadAvailable is false Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source Next() Move to the next match, returning true if any such exists. Declaration public abstract bool Next() Returns Type Description System.Boolean | Improve this Doc View Source SkipTo(Int32) Skips to the first match beyond the current, whose document number is greater than or equal to target . The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. Returns true if there is such a match. Behaves as if written: bool SkipTo(int target) { do { if (!Next()) return false; } while (target > Doc); return true; } Most implementations are considerably more efficient than that. Declaration public abstract bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Distribution.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Distribution.html",
    "title": "Class Distribution | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Distribution The probabilistic distribution used to model term occurrence in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionLL DistributionSPL Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Distribution Constructors | Improve this Doc View Source Distribution() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Distribution() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Explains the score. Returns the name of the model only, since both tfn and lambda are explained elsewhere. Declaration public virtual Explanation Explain(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single, Single) Computes the score. Declaration public abstract float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the name of the distribution. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also IBSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Bytes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Bytes.html",
    "title": "Class FieldCache.Bytes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Bytes Field values as 8-bit signed bytes Inheritance System.Object FieldCache.Bytes Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Bytes Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Bytes EMPTY Field Value Type Description FieldCache.Bytes Methods | Improve this Doc View Source Get(Int32) Return a single Byte representation of this field's value. Declaration public abstract byte Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Byte Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Explanation.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Explanation.html",
    "title": "Class Explanation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Explanation Expert: Describes the score computation for document and query. Inheritance System.Object Explanation ComplexExplanation Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class Explanation Constructors | Improve this Doc View Source Explanation() Declaration public Explanation() | Improve this Doc View Source Explanation(Single, String) Declaration public Explanation(float value, string description) Parameters Type Name Description System.Single value System.String description Properties | Improve this Doc View Source Description Gets or Sets the description of this explanation node. Declaration public virtual string Description { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsMatch Indicates whether or not this Explanation models a good match. By default, an Explanation represents a \"match\" if the value is positive. Declaration public virtual bool IsMatch { get; } Property Value Type Description System.Boolean See Also Value | Improve this Doc View Source Value Gets or Sets the value assigned to this explanation node. Declaration public virtual float Value { get; set; } Property Value Type Description System.Single Methods | Improve this Doc View Source AddDetail(Explanation) Adds a sub-node to this explanation node. Declaration public virtual void AddDetail(Explanation detail) Parameters Type Name Description Explanation detail | Improve this Doc View Source GetDetails() The sub-nodes of this explanation node. Declaration public virtual Explanation[] GetDetails() Returns Type Description Explanation [] | Improve this Doc View Source GetSummary() A short one line summary which should contain all high level information about this Explanation , without the \"Details\" Declaration protected virtual string GetSummary() Returns Type Description System.String | Improve this Doc View Source ToHtml() Render an explanation as HTML. Declaration public virtual string ToHtml() Returns Type Description System.String | Improve this Doc View Source ToString() Render an explanation as text. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(Int32) Declaration protected virtual string ToString(int depth) Parameters Type Name Description System.Int32 depth Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocIdSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocIdSetIterator.html",
    "title": "Class DocIdSetIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocIdSetIterator This abstract class defines methods to iterate over a set of non-decreasing doc ids. Note that this class assumes it iterates on doc Ids, and therefore NO_MORE_DOCS is set to System.Int32.MaxValue in order to be used as a sentinel object. Implementations of this class are expected to consider System.Int32.MaxValue as an invalid value. Inheritance System.Object DocIdSetIterator DocsEnum FilteredDocIdSetIterator FixedBitSet.FixedBitSetIterator OpenBitSetIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocIdSetIterator Fields | Improve this Doc View Source NO_MORE_DOCS When returned by NextDoc() , Advance(Int32) and DocID it means there are no more docs in the iterator. Declaration public const int NO_MORE_DOCS = 2147483647 Field Value Type Description System.Int32 Properties | Improve this Doc View Source DocID Returns the following: -1 or NO_MORE_DOCS if NextDoc() or Advance(Int32) were not called yet. NO_MORE_DOCS if the iterator has exhausted. Otherwise it should return the doc ID it is currently on. @since 2.9 Declaration public abstract int DocID { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Advance(Int32) Advances to the first beyond the current whose document number is greater than or equal to target , and returns the document number itself. Exhausts the iterator and returns NO_MORE_DOCS if target is greater than the highest document number in the set. The behavior of this method is undefined when called with target <= current , or after the iterator has exhausted. Both cases may result in unpredicted behavior. When target > current it behaves as if written: int Advance(int target) { int doc; while ((doc = NextDoc()) < target) { } return doc; } Some implementations are considerably more efficient than that. NOTE: this method may be called with NO_MORE_DOCS for efficiency by some Scorer s. If your implementation cannot efficiently determine that it should exhaust, it is recommended that you check for that value in each call to this method. @since 2.9 Declaration public abstract int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 | Improve this Doc View Source GetCost() Returns the estimated cost of this DocIdSetIterator . This is generally an upper bound of the number of documents this iterator might match, but may be a rough heuristic, hardcoded value, or otherwise completely inaccurate. Declaration public abstract long GetCost() Returns Type Description System.Int64 | Improve this Doc View Source GetEmpty() An empty DocIdSetIterator instance Declaration public static DocIdSetIterator GetEmpty() Returns Type Description DocIdSetIterator | Improve this Doc View Source NextDoc() Advances to the next document in the set and returns the doc it is currently on, or NO_MORE_DOCS if there are no more docs in the set. NOTE: after the iterator has exhausted you should not call this method, as it may result in unpredicted behavior. @since 2.9 Declaration public abstract int NextDoc() Returns Type Description System.Int32 | Improve this Doc View Source SlowAdvance(Int32) Slow (linear) implementation of Advance(Int32) relying on NextDoc() to advance beyond the target position. Declaration protected int SlowAdvance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocIdSet.html",
    "title": "Class DocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocIdSet A DocIdSet contains a set of doc ids. Implementing classes must only implement GetIterator() to provide access to the set. Inheritance System.Object DocIdSet FieldCacheDocIdSet FilteredDocIdSet DocIdBitSet FixedBitSet OpenBitSet EliasFanoDocIdSet PForDeltaDocIdSet WAH8DocIdSet Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocIdSet Properties | Improve this Doc View Source Bits Optionally provides a IBits interface for random access to matching documents. Declaration public virtual IBits Bits { get; } Property Value Type Description IBits null , if this DocIdSet does not support random access. In contrast to GetIterator() , a return value of null does not imply that no documents match the filter! The default implementation does not provide random access, so you only need to implement this method if your DocIdSet can guarantee random access to every docid in O(1) time without external disk access (as IBits interface cannot throw System.IO.IOException ). This is generally true for bit sets like FixedBitSet , which return itself if they are used as DocIdSet . | Improve this Doc View Source IsCacheable This method is a hint for CachingWrapperFilter , if this DocIdSet should be cached without copying it. The default is to return false . If you have an own DocIdSet implementation that does its iteration very effective and fast without doing disk I/O, override this property and return true . Declaration public virtual bool IsCacheable { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetIterator() Provides a DocIdSetIterator to access the set. This implementation can return null if there are no docs that match. Declaration public abstract DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator) Parameters Type Name Description System.Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the Bits property through the bits parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, bits: () => { return bits; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<IBits> bits) Parameters Type Name Description System.Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . System.Func < IBits > bits A delegate method that represents (is called by) the Bits property. It returns the IBits instance for this DocIdSet . Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the Bits property through the bits parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, bits: () => { return bits; }, isCacheable: () => { return true; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<IBits> bits, Func<bool> isCacheable) Parameters Type Name Description System.Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . System.Func < IBits > bits A delegate method that represents (is called by) the Bits property. It returns the IBits instance for this DocIdSet . System.Func < System.Boolean > isCacheable A delegate method that represents (is called by) the IsCacheable property. It returns a System.Boolean value. Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. | Improve this Doc View Source NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) Creates a new instance with the ability to specify the body of the GetIterator() method through the getIterator parameter and the body of the IsCacheable property through the isCacheable parameter. Simple example: var docIdSet = DocIdSet.NewAnonymous(getIterator: () => { OpenBitSet bitset = new OpenBitSet(5); bitset.Set(0, 5); return new DocIdBitSet(bitset); }, isCacheable: () => { return true; }); LUCENENET specific Declaration public static DocIdSet NewAnonymous(Func<DocIdSetIterator> getIterator, Func<bool> isCacheable) Parameters Type Name Description System.Func < DocIdSetIterator > getIterator A delegate method that represents (is called by) the GetIterator() method. It returns the DocIdSetIterator for this DocIdSet . System.Func < System.Boolean > isCacheable A delegate method that represents (is called by) the IsCacheable property. It returns a System.Boolean value. Returns Type Description DocIdSet A new Lucene.Net.Search.DocIdSet.AnonymousDocIdSet instance. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TrackingIndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TrackingIndexWriter.html",
    "title": "Class TrackingIndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrackingIndexWriter Class that tracks changes to a delegated IndexWriter , used by ControlledRealTimeReopenThread<T> to ensure specific changes are visible. Create this class (passing your IndexWriter ), and then pass this class to ControlledRealTimeReopenThread<T> . Be sure to make all changes via the TrackingIndexWriter , otherwise ControlledRealTimeReopenThread<T> won't know about the changes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TrackingIndexWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class TrackingIndexWriter Constructors | Improve this Doc View Source TrackingIndexWriter(IndexWriter) Create a TrackingIndexWriter wrapping the provided IndexWriter . Declaration public TrackingIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer Properties | Improve this Doc View Source Generation Return the current generation being indexed. Declaration public virtual long Generation { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexWriter Return the wrapped IndexWriter . Declaration public virtual IndexWriter IndexWriter { get; } Property Value Type Description IndexWriter Methods | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>) Calls AddDocument(IEnumerable<IIndexableField>) and returns the generation that reflects this change. Declaration public virtual long AddDocument(IEnumerable<IIndexableField> d) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > d Returns Type Description System.Int64 | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>, Analyzer) Calls AddDocument(IEnumerable<IIndexableField>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long AddDocument(IEnumerable<IIndexableField> d, Analyzer a) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > d Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) Calls AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) and returns the generation that reflects this change. Declaration public virtual long AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Returns Type Description System.Int64 | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Calls AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer a) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source AddIndexes(IndexReader[]) Calls AddIndexes(IndexReader[]) and returns the generation that reflects this change. Declaration public virtual long AddIndexes(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers Returns Type Description System.Int64 | Improve this Doc View Source AddIndexes(Directory[]) Calls AddIndexes(Directory[]) and returns the generation that reflects this change. Declaration public virtual long AddIndexes(params Directory[] dirs) Parameters Type Name Description Directory [] dirs Returns Type Description System.Int64 | Improve this Doc View Source DeleteAll() Calls DeleteAll() and returns the generation that reflects this change. Declaration public virtual long DeleteAll() Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Term) Calls DeleteDocuments(Term) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(Term t) Parameters Type Name Description Term t Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Term[]) Calls DeleteDocuments(Term[]) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(params Term[] terms) Parameters Type Name Description Term [] terms Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Query) Calls DeleteDocuments(Query) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(Query q) Parameters Type Name Description Query q Returns Type Description System.Int64 | Improve this Doc View Source DeleteDocuments(Query[]) Calls DeleteDocuments(Query[]) and returns the generation that reflects this change. Declaration public virtual long DeleteDocuments(params Query[] queries) Parameters Type Name Description Query [] queries Returns Type Description System.Int64 | Improve this Doc View Source GetAndIncrementGeneration() Return and increment current gen. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual long GetAndIncrementGeneration() Returns Type Description System.Int64 | Improve this Doc View Source TryDeleteDocument(IndexReader, Int32) Cals TryDeleteDocument(IndexReader, Int32) and returns the generation that reflects this change. Declaration public virtual long TryDeleteDocument(IndexReader reader, int docID) Parameters Type Name Description IndexReader reader System.Int32 docID Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Calls UpdateDocument(Term, IEnumerable<IIndexableField>) and returns the generation that reflects this change. Declaration public virtual long UpdateDocument(Term t, IEnumerable<IIndexableField> d) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < IIndexableField > d Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) Calls UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long UpdateDocument(Term t, IEnumerable<IIndexableField> d, Analyzer a) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < IIndexableField > d Analyzer a Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Calls UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) and returns the generation that reflects this change. Declaration public virtual long UpdateDocuments(Term t, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Returns Type Description System.Int64 | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Calls UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) and returns the generation that reflects this change. Declaration public virtual long UpdateDocuments(Term t, IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer a) Parameters Type Name Description Term t System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Analyzer a Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.MergeScore.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.MergeScore.html",
    "title": "Class TieredMergePolicy.MergeScore | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TieredMergePolicy.MergeScore Holds score and explanation for a single candidate merge. Inheritance System.Object TieredMergePolicy.MergeScore Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax protected abstract class MergeScore Constructors | Improve this Doc View Source MergeScore() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected MergeScore() Properties | Improve this Doc View Source Explanation Human readable explanation of how the merge got this score. Declaration public abstract string Explanation { get; } Property Value Type Description System.String | Improve this Doc View Source Score Returns the score for this merge candidate; lower scores are better. Declaration public abstract double Score { get; } Property Value Type Description System.Double Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermState.html",
    "title": "Class TermState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermState Encapsulates all required internal state to position the associated TermsEnum without re-seeking. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermState OrdTermState Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class TermState Constructors | Improve this Doc View Source TermState() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermState() Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CopyFrom(TermState) Copies the content of the given TermState to this instance Declaration public abstract void CopyFrom(TermState other) Parameters Type Name Description TermState other the TermState to copy | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also SeekExact ( BytesRef , TermState ) GetTermState ()"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermsEnum.SeekStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermsEnum.SeekStatus.html",
    "title": "Enum TermsEnum.SeekStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum TermsEnum.SeekStatus Represents returned result from SeekCeil(BytesRef) . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum SeekStatus Fields Name Description END The term was not found, and the end of iteration was hit. FOUND The precise term was found. NOT_FOUND A different term was found after the requested term Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.Terms.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Terms.html",
    "title": "Class Terms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Terms Access to the terms in a specific field. See Fields . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Terms BlockTreeTermsReader.FieldReader FilterAtomicReader.FilterTerms MultiTerms Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class Terms Constructors | Improve this Doc View Source Terms() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected Terms() Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length array of Terms . Declaration public static readonly Terms[] EMPTY_ARRAY Field Value Type Description Terms [] Properties | Improve this Doc View Source Comparer Return the IComparer{BytesRef} used to sort terms provided by the iterator. This method may return null if there are no terms. This method may be invoked many times; it's best to cache a single instance & reuse it. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source Count Returns the number of terms for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. NOTE: This was size() in Lucene. Declaration public abstract long Count { get; } Property Value Type Description System.Int64 | Improve this Doc View Source DocCount Returns the number of documents that have at least one term for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasFreqs Returns true if documents in this field store per-document term frequency ( Freq ). Declaration public abstract bool HasFreqs { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasOffsets Returns true if documents in this field store offsets. Declaration public abstract bool HasOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if documents in this field store payloads. Declaration public abstract bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPositions Returns true if documents in this field store positions. Declaration public abstract bool HasPositions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SumDocFreq Returns the sum of DocFreq for all terms in this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long SumDocFreq { get; } Property Value Type Description System.Int64 | Improve this Doc View Source SumTotalTermFreq Returns the sum of TotalTermFreq for all terms in this field, or -1 if this measure isn't stored by the codec (or if this fields omits term freq and positions). Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long SumTotalTermFreq { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetIterator(TermsEnum) Returns an iterator that will step through all terms. This method will not return null . If you have a previous TermsEnum , for example from a different field, you can pass it for possible reuse if the implementation can do so. Declaration public abstract TermsEnum GetIterator(TermsEnum reuse) Parameters Type Name Description TermsEnum reuse Returns Type Description TermsEnum | Improve this Doc View Source Intersect(CompiledAutomaton, BytesRef) Returns a TermsEnum that iterates over all terms that are accepted by the provided CompiledAutomaton . If the startTerm is provided then the returned enum will only accept terms startTerm , but you still must call Next() first to get to the first term. Note that the provided startTerm must be accepted by the automaton. NOTE : the returned TermsEnum cannot seek . Declaration public virtual TermsEnum Intersect(CompiledAutomaton compiled, BytesRef startTerm) Parameters Type Name Description CompiledAutomaton compiled BytesRef startTerm Returns Type Description TermsEnum Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.PKIndexSplitter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.PKIndexSplitter.html",
    "title": "Class PKIndexSplitter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PKIndexSplitter Split an index based on a Filter . Inheritance System.Object PKIndexSplitter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.Misc.dll Syntax public class PKIndexSplitter Constructors | Improve this Doc View Source PKIndexSplitter(Directory, Directory, Directory, Term, IndexWriterConfig, IndexWriterConfig) Declaration public PKIndexSplitter(Directory input, Directory dir1, Directory dir2, Term midTerm, IndexWriterConfig config1, IndexWriterConfig config2) Parameters Type Name Description Directory input Directory dir1 Directory dir2 Term midTerm IndexWriterConfig config1 IndexWriterConfig config2 | Improve this Doc View Source PKIndexSplitter(Directory, Directory, Directory, Filter, IndexWriterConfig, IndexWriterConfig) Declaration public PKIndexSplitter(Directory input, Directory dir1, Directory dir2, Filter docsInFirstIndex, IndexWriterConfig config1, IndexWriterConfig config2) Parameters Type Name Description Directory input Directory dir1 Directory dir2 Filter docsInFirstIndex IndexWriterConfig config1 IndexWriterConfig config2 | Improve this Doc View Source PKIndexSplitter(LuceneVersion, Directory, Directory, Directory, Term) Split an index based on a given primary key term and a 'middle' term. If the middle term is present, it's sent to dir2. Declaration public PKIndexSplitter(LuceneVersion version, Directory input, Directory dir1, Directory dir2, Term midTerm) Parameters Type Name Description LuceneVersion version Directory input Directory dir1 Directory dir2 Term midTerm | Improve this Doc View Source PKIndexSplitter(LuceneVersion, Directory, Directory, Directory, Filter) Split an index based on a Filter . All documents that match the filter are sent to dir1, remaining ones to dir2. Declaration public PKIndexSplitter(LuceneVersion version, Directory input, Directory dir1, Directory dir2, Filter docsInFirstIndex) Parameters Type Name Description LuceneVersion version Directory input Directory dir1 Directory dir2 Filter docsInFirstIndex Methods | Improve this Doc View Source Split() Declaration public virtual void Split() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.EnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsAndPositionsEnum.EnumWithSlice.html",
    "title": "Class MultiDocsAndPositionsEnum.EnumWithSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocsAndPositionsEnum.EnumWithSlice Holds a DocsAndPositionsEnum along with the corresponding ReaderSlice . Inheritance System.Object MultiDocsAndPositionsEnum.EnumWithSlice Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class EnumWithSlice Properties | Improve this Doc View Source DocsAndPositionsEnum DocsAndPositionsEnum for this sub-reader. Declaration public DocsAndPositionsEnum DocsAndPositionsEnum { get; } Property Value Type Description DocsAndPositionsEnum | Improve this Doc View Source Slice ReaderSlice describing how this sub-reader fits into the composite reader. Declaration public ReaderSlice Slice { get; } Property Value Type Description ReaderSlice Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeTrigger.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeTrigger.html",
    "title": "Enum MergeTrigger | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum MergeTrigger MergeTrigger is passed to FindMerges(MergeTrigger, SegmentInfos) to indicate the event that triggered the merge. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum MergeTrigger Fields Name Description CLOSING Merge was triggered by a disposing IndexWriter . EXPLICIT Merge has been triggered explicitly by the user. FULL_FLUSH Merge was triggered by a full flush. Full flushes can be caused by a commit, NRT reader reopen or a Dispose() call on the index writer. MERGE_FINISHED Merge was triggered by a successfully finished merge. SEGMENT_FLUSH Merge was triggered by a segment flush. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeState.html",
    "title": "Class MergeState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergeState Holds common state used during segment merging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergeState Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeState Properties | Improve this Doc View Source CheckAbort Holds the CheckAbort instance, which is invoked periodically to see if the merge has been aborted. Declaration public CheckAbort CheckAbort { get; } Property Value Type Description CheckAbort | Improve this Doc View Source DocBase New docID base per reader. Declaration public int[] DocBase { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source DocMaps Maps docIDs around deletions. Declaration public MergeState.DocMap[] DocMaps { get; set; } Property Value Type Description MergeState.DocMap [] | Improve this Doc View Source FieldInfos FieldInfos of the newly merged segment. Declaration public FieldInfos FieldInfos { get; set; } Property Value Type Description FieldInfos | Improve this Doc View Source InfoStream InfoStream for debugging messages. Declaration public InfoStream InfoStream { get; } Property Value Type Description InfoStream | Improve this Doc View Source MatchedCount How many MatchingSegmentReaders are set. Declaration public int MatchedCount { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MatchingSegmentReaders SegmentReader s that have identical field name/number mapping, so their stored fields and term vectors may be bulk merged. Declaration public SegmentReader[] MatchingSegmentReaders { get; set; } Property Value Type Description SegmentReader [] | Improve this Doc View Source Readers Readers being merged. Declaration public IList<AtomicReader> Readers { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReader > | Improve this Doc View Source SegmentInfo SegmentInfo of the newly merged segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReader.IReaderClosedListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReader.IReaderClosedListener.html",
    "title": "Interface IndexReader.IReaderClosedListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IndexReader.IReaderClosedListener A custom listener that's invoked when the IndexReader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IReaderClosedListener Methods | Improve this Doc View Source OnClose(IndexReader) Invoked when the IndexReader is closed. Declaration void OnClose(IndexReader reader) Parameters Type Name Description IndexReader reader Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexOptions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexOptions.html",
    "title": "Enum IndexOptions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum IndexOptions Controls how much information is stored in the postings lists. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum IndexOptions Fields Name Description DOCS_AND_FREQS Only documents and term frequencies are indexed: positions are omitted. this enables normal scoring, except Phrase and other positional queries will throw an exception. DOCS_AND_FREQS_AND_POSITIONS Indexes documents, frequencies and positions. this is a typical default for full-text search: full scoring is enabled and positional queries are supported. DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS Indexes documents, frequencies, positions and offsets. Character offsets are encoded alongside the positions. DOCS_ONLY Only documents are indexed: term frequencies and positions are omitted. Phrase and other positional queries on the field will throw an exception, and scoring will behave as if any term in the document appears only once. NONE No index options will be used. NOTE: This is the same as setting to null in Lucene Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompoundFileExtractor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompoundFileExtractor.html",
    "title": "Class CompoundFileExtractor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundFileExtractor Command-line tool for extracting sub-files out of a compound file. Inheritance System.Object CompoundFileExtractor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.Misc.dll Syntax public class CompoundFileExtractor Methods | Improve this Doc View Source Main(String[]) Prints the filename and size of each file within a given compound file. Add the -extract flag to extract files to the current working directory. In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.Builder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CompositeReaderContext.Builder.html",
    "title": "Class CompositeReaderContext.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompositeReaderContext.Builder Inheritance System.Object CompositeReaderContext.Builder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class Builder Constructors | Improve this Doc View Source Builder(CompositeReader) Declaration public Builder(CompositeReader reader) Parameters Type Name Description CompositeReader reader Methods | Improve this Doc View Source Build() Declaration public CompositeReaderContext Build() Returns Type Description CompositeReaderContext Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Index.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Index.html",
    "title": "Enum Field.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Field.Index Specifies whether and how a field should be indexed. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public enum Index Fields Name Description ANALYZED Index the tokens produced by running the field's value through an Analyzer . This is useful for common text. ANALYZED_NO_NORMS Expert: Index the tokens produced by running the field's value through an Analyzer, and also separately disable the storing of norms. See NOT_ANALYZED_NO_NORMS for what norms are and why you may want to disable them. NO Do not index the field value. This field can thus not be searched, but one can still access its contents provided it is Field.Store . NOT_ANALYZED Index the field's value without using an Analyzer , so it can be searched. As no analyzer is used the value will be stored as a single term. This is useful for unique Ids like product numbers. NOT_ANALYZED_NO_NORMS Expert: Index the field's value without an Analyzer, and also disable the storing of norms. Note that you can also separately enable/disable norms by setting OmitNorms . No norms means that index-time field and document boosting and field length normalization are disabled. The benefit is less memory usage as norms take up one byte of RAM per indexed field for every document in the index, during searching. Note that once you index a given field with norms enabled, disabling norms will have no effect. In other words, for this to have the above described effect on a field, all instances of that field must be indexed with NOT_ANALYZED_NO_NORMS from the beginning. Extension Methods FieldExtensions.IsIndexed() FieldExtensions.IsAnalyzed() FieldExtensions.OmitNorms() Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsFormat.html",
    "title": "Class TermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermVectorsFormat Controls the format of term vectors. Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene40TermVectorsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsFormat Constructors | Improve this Doc View Source TermVectorsFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsFormat() Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Returns a TermVectorsReader to read term vectors. Declaration public abstract TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Returns a TermVectorsWriter to write term vectors. Declaration public abstract TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermStats.html",
    "title": "Class TermStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermStats Holder for per-term statistics. Inheritance System.Object TermStats Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class TermStats Constructors | Improve this Doc View Source TermStats(Int32, Int64) Sole constructor. Declaration public TermStats(int docFreq, long totalTermFreq) Parameters Type Name Description System.Int32 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq How many documents have at least one occurrence of this term. Declaration public int DocFreq { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTermFreq Total number of times this term occurs across all documents in the field. Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 Extension Methods Number.IsNumber(Object) See Also DocFreq TotalTermFreq"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermsConsumer.html",
    "title": "Class TermsConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsConsumer Abstract API that consumes terms for an individual field. The lifecycle is: TermsConsumer is returned for each field by AddField(FieldInfo) . TermsConsumer returns a PostingsConsumer for each term in StartTerm(BytesRef) . When the producer (e.g. IndexWriter) is done adding documents for the term, it calls FinishTerm(BytesRef, TermStats) , passing in the accumulated term statistics. Producer calls Finish(Int64, Int64, Int32) with the accumulated collection statistics when it is finished adding terms to the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsConsumer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermsConsumer Constructors | Improve this Doc View Source TermsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermsConsumer() Properties | Improve this Doc View Source Comparer Gets the IComparer{BytesRef} used to sort terms before feeding to this API. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Finish(Int64, Int64, Int32) Called when we are done adding terms to this field. sumTotalTermFreq will be -1 when term frequencies are omitted for the field. Declaration public abstract void Finish(long sumTotalTermFreq, long sumDocFreq, int docCount) Parameters Type Name Description System.Int64 sumTotalTermFreq System.Int64 sumDocFreq System.Int32 docCount | Improve this Doc View Source FinishTerm(BytesRef, TermStats) Finishes the current term; numDocs must be > 0. stats.TotalTermFreq will be -1 when term frequencies are omitted for the field. Declaration public abstract void FinishTerm(BytesRef text, TermStats stats) Parameters Type Name Description BytesRef text TermStats stats | Improve this Doc View Source Merge(MergeState, IndexOptions, TermsEnum) Default merge impl. Declaration public virtual void Merge(MergeState mergeState, IndexOptions indexOptions, TermsEnum termsEnum) Parameters Type Name Description MergeState mergeState IndexOptions indexOptions TermsEnum termsEnum | Improve this Doc View Source StartTerm(BytesRef) Starts a new term in this field; this may be called with no corresponding call to finish if the term had no docs. Declaration public abstract PostingsConsumer StartTerm(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description PostingsConsumer Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.IDocValuesFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.IDocValuesFormatFactory.html",
    "title": "Interface IDocValuesFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDocValuesFormatFactory LUCENENET specific contract for extending the functionality of DocValuesFormat implementations so they can be injected with dependencies. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface IDocValuesFormatFactory Methods | Improve this Doc View Source GetDocValuesFormat(String) Gets the DocValuesFormat instance from the provided name . Declaration DocValuesFormat GetDocValuesFormat(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat instance to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. Extension Methods Number.IsNumber(Object) See Also DefaultDocValuesFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.ICodecFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.ICodecFactory.html",
    "title": "Interface ICodecFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICodecFactory LUCENENET specific contract for extending the functionality of Codec implementations so they can be injected with dependencies. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface ICodecFactory Methods | Improve this Doc View Source GetCodec(String) Gets the Codec instance from the provided name . Declaration Codec GetCodec(string name) Parameters Type Name Description System.String name The name of the Codec instance to retrieve. Returns Type Description Codec The Codec instance. Extension Methods Number.IsNumber(Object) See Also DefaultCodecFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HashTable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HashTable.html",
    "title": "Class LZ4.HashTable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LZ4.HashTable Inheritance System.Object LZ4.HashTable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class HashTable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Decompressor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Decompressor.html",
    "title": "Class Decompressor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Decompressor A decompressor. Inheritance System.Object Decompressor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class Decompressor Constructors | Improve this Doc View Source Decompressor() Sole constructor, typically called from sub-classes. Declaration protected Decompressor() Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Decompress(DataInput, Int32, Int32, Int32, BytesRef) Decompress bytes that were stored between offsets offset and offset+length in the original stream from the compressed stream in to bytes . After returning, the length of bytes ( bytes.Length ) must be equal to length . Implementations of this method are free to resize bytes depending on their needs. Declaration public abstract void Decompress(DataInput in, int originalLength, int offset, int length, BytesRef bytes) Parameters Type Name Description DataInput in The input that stores the compressed stream. System.Int32 originalLength The length of the original data (before compression). System.Int32 offset Bytes before this offset do not need to be decompressed. System.Int32 length Bytes after offset+length do not need to be decompressed. BytesRef bytes a BytesRef where to store the decompressed data. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.EmptyInputIterator.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.EmptyInputIterator.html",
    "title": "Class EmptyInputIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EmptyInputIterator Singleton IInputIterator that iterates over 0 BytesRefs. Inheritance System.Object EmptyInputIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public static class EmptyInputIterator Fields | Improve this Doc View Source Instance Declaration public static readonly IInputIterator Instance Field Value Type Description IInputIterator"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Analyzing | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Analyzing Classes AnalyzingInfixSuggester Analyzes the input text and then suggests matches based on prefix matches to any tokens in the indexed text. This also highlights the tokens that match. This suggester supports payloads. Matches are sorted only by the suggest weight; it would be nice to support blended score + weight sort in the future. This means this suggester best applies when there is a strong a-priori ranking of all the suggestions. This suggester supports contexts, however the contexts must be valid utf8 (arbitrary binary terms will not work). @lucene.experimental AnalyzingSuggester Suggester that first analyzes the surface form, adds the analyzed form to a weighted FST, and then does the same thing at lookup time. This means lookup is based on the analyzed form while suggestions are still the surface form(s). This can result in powerful suggester functionality. For example, if you use an analyzer removing stop words, then the partial text \"ghost chr...\" could see the suggestion \"The Ghost of Christmas Past\". Note that position increments MUST NOT be preserved for this example to work, so you should call the constructor with Lucene.Net.Search.Suggest.Analyzing.AnalyzingSuggester.preservePositionIncrements parameter set to false If SynonymFilter is used to map wifi and wireless network to hotspot then the partial text \"wirele...\" could suggest \"wifi router\". Token normalization like stemmers, accent removal, etc., would allow suggestions to ignore such variations. When two matching suggestions have the same weight, they are tie-broken by the analyzed form. If their analyzed form is the same then the order is undefined. There are some limitations: A lookup from a query like \"net\" in English won't be any different than \"net \" (ie, user added a trailing space) because analyzers don't reflect when they've seen a token separator and when they haven't. If you're using StopFilter , and the user will type \"fast apple\", but so far all they've typed is \"fast a\", again because the analyzer doesn't convey whether it's seen a token separator after the \"a\", StopFilter will remove that \"a\" causing far more matches than you'd expect. Lookups with the empty string return no results instead of all results. @lucene.experimental BlendedInfixSuggester Extension of the AnalyzingInfixSuggester which transforms the weight after search to take into account the position of the searched term into the indexed text. Please note that it increases the number of elements searched and applies the ponderation after. It might be costly for long suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FreeTextSuggester Builds an ngram model from the text sent to Build(IInputIterator, Double) and predicts based on the last grams-1 tokens in the request sent to DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) . This tries to handle the \"long tail\" of suggestions for when the incoming query is a never before seen query string. Likely this suggester would only be used as a fallback, when the primary suggester fails to find any suggestions. Note that the weight for each suggestion is unused, and the suggestions are the analyzed forms (so your analysis process should normally be very \"light\"). This uses the stupid backoff language model to smooth scores across ngram models; see \"Large language models in machine translation\" for details. From DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) , the key of each result is the ngram token; the value is System.Int64.MaxValue * score (fixed point, cast to long). Divide by System.Int64.MaxValue to get the score back, which ranges from 0.0 to 1.0. onlyMorePopular is unused. @lucene.experimental FSTUtil Exposes a utility method to enumerate all paths intersecting an Automaton with an FST . FSTUtil.Path<T> Holds a pair (automaton, fst) of states and accumulated output in the intersected machine. FuzzySuggester Implements a fuzzy AnalyzingSuggester . The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false for the Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.transpositions parameter. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances are not supported. Note that the fuzzy distance is measured in \"byte space\" on the bytes returned by the TokenStream 's ITermToBytesRefAttribute , usually UTF8. By default the analyzed bytes must be at least 3 DEFAULT_MIN_FUZZY_LENGTH bytes before any edits are considered. Furthermore, the first 1 DEFAULT_NON_FUZZY_PREFIX byte is not allowed to be edited. We allow up to 1 DEFAULT_MAX_EDITS edit. If Lucene.Net.Search.Suggest.Analyzing.FuzzySuggester.unicodeAware parameter in the constructor is set to true, maxEdits, minFuzzyLength, transpositions and nonFuzzyPrefix are measured in Unicode code points (actual letters) instead of bytes. NOTE: This suggester does not boost suggestions that required no edits over suggestions that did require edits. This is a known limitation. Note: complex query analyzers can have a significant impact on the lookup performance. It's recommended to not use analyzers that drop or inject terms like synonyms to keep the complexity of the prefix intersection low for good lookup performance. At index time, complex analyzers can safely be used. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SuggestStopFilter Like StopFilter except it will not remove the last token if that token was not followed by some token separator. For example, a query 'find the' would preserve the 'the' since it was not followed by a space or punctuation or something, and mark it KEYWORD so future stemmers won't touch it either while a query like \"find the popsicle' would remove 'the' as a stopword. Normally you'd use the ordinary StopFilter in your indexAnalyzer and then this class in your queryAnalyzer, when using one of the analyzing suggesters. Enums BlendedInfixSuggester.BlenderType The different types of blender. SuggesterOptions LUCENENET specific type for specifying AnalyzingSuggester and FuzzySuggester options."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggesterOptions.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.SuggesterOptions.html",
    "title": "Enum SuggesterOptions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum SuggesterOptions LUCENENET specific type for specifying AnalyzingSuggester and FuzzySuggester options. Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax [Flags] public enum SuggesterOptions Fields Name Description EXACT_FIRST Always return the exact match first, regardless of score. This has no performance impact but could result in low-quality suggestions. PRESERVE_SEP Preserve token separators when matching."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.html",
    "title": "Class FSTUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTUtil Exposes a utility method to enumerate all paths intersecting an Automaton with an FST . Inheritance System.Object FSTUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public static class FSTUtil Methods | Improve this Doc View Source IntersectPrefixPaths<T>(Automaton, FST<T>) Enumerates all minimal prefix paths in the automaton that also intersect the FST , accumulating the FST end node and output for each path. Declaration public static IList<FSTUtil.Path<T>> IntersectPrefixPaths<T>(Automaton a, FST<T> fst) Parameters Type Name Description Automaton a FST <T> fst Returns Type Description System.Collections.Generic.IList < FSTUtil.Path <T>> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.Path-1.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.FSTUtil.Path-1.html",
    "title": "Class FSTUtil.Path<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTUtil.Path<T> Holds a pair (automaton, fst) of states and accumulated output in the intersected machine. Inheritance System.Object FSTUtil.Path<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public sealed class Path<T> Type Parameters Name Description T Constructors | Improve this Doc View Source Path(State, FST.Arc<T>, T, Int32sRef) Sole constructor. Declaration public Path(State state, FST.Arc<T> fstNode, T output, Int32sRef input) Parameters Type Name Description State state FST.Arc <T> fstNode T output Int32sRef input Properties | Improve this Doc View Source FstNode Node in the FST where path ends: Declaration public FST.Arc<T> FstNode { get; } Property Value Type Description FST.Arc <T> | Improve this Doc View Source Input Input of the path so far: Declaration public Int32sRef Input { get; } Property Value Type Description Int32sRef | Improve this Doc View Source Output Output of the path so far: Declaration public T Output { get; set; } Property Value Type Description T | Improve this Doc View Source State Node in the automaton where path ends: Declaration public State State { get; } Property Value Type Description State"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.BlenderType.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Analyzing.BlendedInfixSuggester.BlenderType.html",
    "title": "Enum BlendedInfixSuggester.BlenderType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum BlendedInfixSuggester.BlenderType The different types of blender. Namespace : Lucene.Net.Search.Suggest.Analyzing Assembly : Lucene.Net.Suggest.dll Syntax public enum BlenderType Fields Name Description CUSTOM Application dependent; override CalculateCoefficient(Int32) to compute it. POSITION_LINEAR weight (1 - 0.10 position) POSITION_RECIPROCAL weight/(1+position)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.html",
    "title": "Namespace Lucene.Net.Search.Spell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Spell Classes CombineSuggestion A suggestion generated by combining one or more original query terms DirectSpellChecker Simple automaton-based spellchecker. Candidates are presented directly from the term dictionary, based on Levenshtein distance. This is an alternative to SpellChecker if you are using an edit-distance-like metric such as Levenshtein or JaroWinklerDistance . A practical benefit of this spellchecker is that it requires no additional datastructures (neither in RAM nor on disk) to do its work. DirectSpellChecker.ScoreTerm Holds a spelling correction for internal usage inside DirectSpellChecker . HighFrequencyDictionary HighFrequencyDictionary: terms taken from the given field of a Lucene index, which appear in a number of documents above a given threshold. Threshold is a value in [0..1] representing the minimum number of documents (of the total) where a term should appear. Based on LuceneDictionary . JaroWinklerDistance Similarity measure for short strings such as person names. See http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance LevensteinDistance Levenstein edit distance class. LuceneDictionary Lucene Dictionary: terms taken from the given field of a Lucene index. LuceneLevenshteinDistance Damerau-Levenshtein (optimal string alignment) implemented in a consistent way as Lucene's FuzzyTermsEnum with the transpositions option enabled. Notes: This metric treats full unicode codepoints as characters This metric scales raw edit distances into a floating point score based upon the shortest of the two terms Transpositions of two adjacent codepoints are treated as primitive edits. Edits are applied in parallel: for example, \"ab\" and \"bca\" have distance 3. NOTE: this class is not particularly efficient. It is only intended for merging results from multiple DirectSpellCheckers. NGramDistance N-Gram version of edit distance based on paper by Grzegorz Kondrak, \"N-gram similarity and distance\". Proceedings of the Twelfth International Conference on String Processing and Information Retrieval (SPIRE 2005), pp. 115-126, Buenos Aires, Argentina, November 2005. http://www.cs.ualberta.ca/~kondrak/papers/spire05.pdf This implementation uses the position-based optimization to compute partial matches of n-gram sub-strings and adds a null-character prefix of size n-1 so that the first character is contained in the same number of n-grams as a middle character. Null-character prefix matches are discounted so that strings with no matching characters will return a distance of 0. PlainTextDictionary Dictionary represented by a text file. Format allowed: 1 word per line: word1 word2 word3 SpellChecker Spell Checker class (Main class) (initially inspired by the David Spencer code). Example Usage (C#): SpellChecker spellchecker = new SpellChecker(spellIndexDirectory); // To index a field of a user index: spellchecker.IndexDictionary(new LuceneDictionary(my_lucene_reader, a_field)); // To index a file containing words: spellchecker.IndexDictionary(new PlainTextDictionary(new FileInfo(\"myfile.txt\"))); string[] suggestions = spellchecker.SuggestSimilar(\"misspelt\", 5); SuggestWord SuggestWord, used in suggestSimilar method in SpellChecker class. Default sort is first by score, then by frequency. SuggestWordFrequencyComparer Frequency first, then score. SuggestWordQueue Sorts SuggestWord instances SuggestWordScoreComparer Score first, then frequency TermFreqIteratorWrapper Wraps a BytesRefIterator as a TermFreqIterator, with all weights set to 1 WordBreakSpellChecker A spell checker whose sole function is to offer suggestions by combining multiple terms into one word and/or breaking terms into multiple words. Interfaces IDictionary A simple interface representing a Dictionary. A Dictionary here is a list of entries, where every entry consists of term, weight and payload. IStringDistance Interface for string distances. ITermFreqIterator Interface for enumerating term,weight pairs. Enums SuggestMode Set of strategies for suggesting related terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordBreakSpellChecker.BreakSuggestionSortMethod Determines the order to list word break suggestions"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.html",
    "title": "Class WordBreakSpellChecker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordBreakSpellChecker A spell checker whose sole function is to offer suggestions by combining multiple terms into one word and/or breaking terms into multiple words. Inheritance System.Object WordBreakSpellChecker Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public class WordBreakSpellChecker Constructors | Improve this Doc View Source WordBreakSpellChecker() Creates a new spellchecker with default configuration values Declaration public WordBreakSpellChecker() See Also MaxChanges MaxCombineWordLength MaxEvaluations MinBreakWordLength MinSuggestionFrequency Fields | Improve this Doc View Source SEPARATOR_TERM Term that can be used to prohibit adjacent terms from being combined Declaration public static readonly Term SEPARATOR_TERM Field Value Type Description Term Properties | Improve this Doc View Source MaxChanges Gets or sets the maximum numbers of changes (word breaks or combinations) to make on the original term(s). Default=1. Declaration public virtual int MaxChanges { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxCombineWordLength Gets or sets the maximum length of a suggestion made by combining 1 or more original terms. Default=20. Declaration public virtual int MaxCombineWordLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxEvaluations Gets or sets the maximum number of word combinations to evaluate. Default=1000. A higher value might improve result quality. A lower value might improve performance. Declaration public virtual int MaxEvaluations { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinBreakWordLength Gets or sets the minimum length to break words down to. Default=1. Declaration public virtual int MinBreakWordLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinSuggestionFrequency Gets or sets the minimum frequency a term must have to be included as part of a suggestion. Default=1 Not applicable when used with SUGGEST_MORE_POPULAR Declaration public virtual int MinSuggestionFrequency { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source SuggestWordBreaks(Term, Int32, IndexReader, SuggestMode, WordBreakSpellChecker.BreakSuggestionSortMethod) Generate suggestions by breaking the passed-in term into multiple words. The scores returned are equal to the number of word breaks needed so a lower score is generally preferred over a higher score. Declaration public virtual SuggestWord[][] SuggestWordBreaks(Term term, int maxSuggestions, IndexReader ir, SuggestMode suggestMode = SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX, WordBreakSpellChecker.BreakSuggestionSortMethod sortMethod = WordBreakSpellChecker.BreakSuggestionSortMethod.NUM_CHANGES_THEN_MAX_FREQUENCY) Parameters Type Name Description Term term System.Int32 maxSuggestions IndexReader ir SuggestMode suggestMode default = SUGGEST_WHEN_NOT_IN_INDEX WordBreakSpellChecker.BreakSuggestionSortMethod sortMethod default = NUM_CHANGES_THEN_MAX_FREQUENCY Returns Type Description SuggestWord [][] one or more arrays of words formed by breaking up the original term Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source SuggestWordCombinations(Term[], Int32, IndexReader, SuggestMode) Generate suggestions by combining one or more of the passed-in terms into single words. The returned CombineSuggestion contains both a SuggestWord and also an array detailing which passed-in terms were involved in creating this combination. The scores returned are equal to the number of word combinations needed, also one less than the length of the array OriginalTermIndexes . Generally, a suggestion with a lower score is preferred over a higher score. To prevent two adjacent terms from being combined (for instance, if one is mandatory and the other is prohibited), separate the two terms with SEPARATOR_TERM When suggestMode equals SUGGEST_WHEN_NOT_IN_INDEX , each suggestion will include at least one term not in the index. When suggestMode equals SUGGEST_MORE_POPULAR , each suggestion will have the same, or better frequency than the most-popular included term. Declaration public virtual CombineSuggestion[] SuggestWordCombinations(Term[] terms, int maxSuggestions, IndexReader ir, SuggestMode suggestMode = SuggestMode.SUGGEST_WHEN_NOT_IN_INDEX) Parameters Type Name Description Term [] terms System.Int32 maxSuggestions IndexReader ir SuggestMode suggestMode Returns Type Description CombineSuggestion [] an array of words generated by combining original terms Exceptions Type Condition System.IO.IOException If there is a low-level I/O error."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.BreakSuggestionSortMethod.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.WordBreakSpellChecker.BreakSuggestionSortMethod.html",
    "title": "Enum WordBreakSpellChecker.BreakSuggestionSortMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum WordBreakSpellChecker.BreakSuggestionSortMethod Determines the order to list word break suggestions Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public enum BreakSuggestionSortMethod Fields Name Description NUM_CHANGES_THEN_MAX_FREQUENCY Sort by Number of word breaks, then by the Maximum of all the component term's frequencies NUM_CHANGES_THEN_SUMMED_FREQUENCY Sort by Number of word breaks, then by the Sum of all the component term's frequencies"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWord.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestWord.html",
    "title": "Class SuggestWord | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SuggestWord SuggestWord, used in suggestSimilar method in SpellChecker class. Default sort is first by score, then by frequency. Inheritance System.Object SuggestWord Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class SuggestWord Constructors | Improve this Doc View Source SuggestWord() Creates a new empty suggestion with null text. Declaration public SuggestWord() Properties | Improve this Doc View Source Freq The freq of the word Declaration public int Freq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score the score of the word Declaration public float Score { get; set; } Property Value Type Description System.Single | Improve this Doc View Source String the suggested word Declaration public string String { get; set; } Property Value Type Description System.String"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestMode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Spell.SuggestMode.html",
    "title": "Enum SuggestMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum SuggestMode Set of strategies for suggesting related terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Search.Spell Assembly : Lucene.Net.Suggest.dll Syntax public enum SuggestMode Fields Name Description SUGGEST_ALWAYS Always attempt to offer suggestions (however, other parameters may limit suggestions. For example, see MaxQueryFrequency ). SUGGEST_MORE_POPULAR Return only suggested words that are as frequent or more frequent than the searched word SUGGEST_WHEN_NOT_IN_INDEX Generate suggestions only for terms not in the index (default)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Messages.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Messages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Messages Classes QueryParserMessages Flexible Query Parser message bundle class"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Config | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Config Classes AbstractQueryConfig This class is the base of QueryConfigHandler and FieldConfig . It has operations to set, unset and get configuration values. Each configuration is is a key->value pair. The key should be an unique ConfigurationKey<T> instance and it also holds the value's type. ConfigurationKey<T> ConfigurationKey LUCENENET specific class used to access the NewInstance static method without referring to the ConfigurationKey{T}'s generic closing type. ConfigurationKey<T> An instance of this class represents a key that is used to retrieve a value from AbstractQueryConfig . It also holds the value's type, which is defined in the generic argument. FieldConfig This class represents a field configuration. QueryConfigHandler This class can be used to hold any query configuration and no field configuration. For field configuration, it creates an empty FieldConfig object and delegate it to field config listeners, these are responsible for setting up all the field configuration. QueryConfigHandler should be extended by classes that intends to provide configuration to IQueryNodeProcessor objects. The class that extends QueryConfigHandler should also provide FieldConfig objects for each collection field. Interfaces IFieldConfigListener This interface should be implemented by classes that wants to listen for field configuration requests. The implementation receives a FieldConfig object and may add/change its configuration."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.IFieldConfigListener.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.IFieldConfigListener.html",
    "title": "Interface IFieldConfigListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFieldConfigListener This interface should be implemented by classes that wants to listen for field configuration requests. The implementation receives a FieldConfig object and may add/change its configuration. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldConfigListener Methods | Improve this Doc View Source BuildFieldConfig(FieldConfig) This method is called every time a field configuration is requested. Declaration void BuildFieldConfig(FieldConfig fieldConfig) Parameters Type Name Description FieldConfig fieldConfig the field configuration requested, should never be null See Also FieldConfig QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.ConfigurationKey.html",
    "title": "Class ConfigurationKey | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConfigurationKey LUCENENET specific class used to access the NewInstance static method without referring to the ConfigurationKey{T}'s generic closing type. Inheritance System.Object ConfigurationKey ConfigurationKey <T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ConfigurationKey Methods | Improve this Doc View Source NewInstance<T>() Creates a new instance. Declaration public static ConfigurationKey<T> NewInstance<T>() Returns Type Description ConfigurationKey <T> a new instance Type Parameters Name Description T the value's type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.AbstractQueryConfig.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Config.AbstractQueryConfig.html",
    "title": "Class AbstractQueryConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractQueryConfig This class is the base of QueryConfigHandler and FieldConfig . It has operations to set, unset and get configuration values. Each configuration is is a key->value pair. The key should be an unique ConfigurationKey<T> instance and it also holds the value's type. ConfigurationKey<T> Inheritance System.Object AbstractQueryConfig FieldConfig QueryConfigHandler Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Config Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class AbstractQueryConfig Methods | Improve this Doc View Source Get<T>(ConfigurationKey<T>) Returns the value held by the given key. Declaration public virtual T Get<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null Returns Type Description T the value held by the given key Type Parameters Name Description T the value's type | Improve this Doc View Source Has<T>(ConfigurationKey<T>) Returns true if there is a value set with the given key, otherwise false . Declaration public virtual bool Has<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null Returns Type Description System.Boolean true if there is a value set with the given key, otherwise false Type Parameters Name Description T the value's type | Improve this Doc View Source Set<T>(ConfigurationKey<T>, T) Sets a key and its value. Declaration public virtual void Set<T>(ConfigurationKey<T> key, T value) Parameters Type Name Description ConfigurationKey <T> key the key, cannot be null T value value to set Type Parameters Name Description T the value's type | Improve this Doc View Source Unset<T>(ConfigurationKey<T>) Unsets the given key and its value. Declaration public virtual bool Unset<T>(ConfigurationKey<T> key) Parameters Type Name Description ConfigurationKey <T> key the key Returns Type Description System.Boolean true if the key and value was set and removed, otherwise false Type Parameters Name Description T the value's type"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Builders | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Builders Classes QueryTreeBuilder LUCENENET specific class for accessing static members of QueryTreeBuilder<TQuery> without referencing its generic closing type. QueryTreeBuilder<TQuery> This class should be used when there is a builder for each type of node. The type of node may be defined in 2 different ways: - by the field name, when the node implements the IFieldableNode interface - by its class, it keeps checking the class and all the interfaces and classes this class implements/extends until it finds a builder for that class/interface This class always check if there is a builder for the field name before it checks for the node class. So, field name builders have precedence over class builders. When a builder is found for a node, it's called and the node is passed to the builder. If the returned built object is not null , it's tagged on the node using the tag QUERY_TREE_BUILDER_TAGID . The children are usually built before the parent node. However, if a builder associated to a node is an instance of QueryTreeBuilder<TQuery> , the node is delegated to this builder and it's responsible to build the node and its children. IQueryBuilder<TQuery> Interfaces IQueryBuilder<TQuery> This interface is used by implementors classes that builds some kind of object from a query tree. QueryTreeBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.QueryTreeBuilder.html",
    "title": "Class QueryTreeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTreeBuilder LUCENENET specific class for accessing static members of QueryTreeBuilder<TQuery> without referencing its generic closing type. Inheritance System.Object QueryTreeBuilder QueryTreeBuilder <TQuery> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryTreeBuilder Fields | Improve this Doc View Source QUERY_TREE_BUILDER_TAGID This tag is used to tag the nodes in a query tree with the built objects produced from their own associated builder. Declaration public static readonly string QUERY_TREE_BUILDER_TAGID Field Value Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.IQueryBuilder-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Builders.IQueryBuilder-1.html",
    "title": "Interface IQueryBuilder<TQuery> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryBuilder<TQuery> This interface is used by implementors classes that builds some kind of object from a query tree. QueryTreeBuilder Namespace : Lucene.Net.QueryParsers.Flexible.Core.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryBuilder<TQuery> Type Parameters Name Description TQuery Methods | Improve this Doc View Source Build(IQueryNode) Builds some kind of object from a query tree. Declaration TQuery Build(IQueryNode queryNode) Parameters Type Name Description IQueryNode queryNode the query tree root node Returns Type Description TQuery some object generated from the query tree"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.html",
    "title": "Namespace Lucene.Net.QueryParsers.Ext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Ext Classes ExtendableQueryParser The ExtendableQueryParser enables arbitrary query parser extension based on a customizable field naming scheme. The lucene query syntax allows implicit and explicit field definitions as query prefix followed by a colon (':') character. The ExtendableQueryParser allows to encode extension keys into the field symbol associated with a registered instance of ParserExtension . A customizable separation character separates the extension key from the actual field symbol. The ExtendableQueryParser splits ( SplitExtensionField(String, String) ) the extension key from the field symbol and tries to resolve the associated ParserExtension . If the parser can't resolve the key or the field token does not contain a separation character, ExtendableQueryParser yields the same behavior as its super class QueryParser . Otherwise, if the key is associated with a ParserExtension instance, the parser builds an instance of ExtensionQuery to be processed by Parse(ExtensionQuery) .If a extension field does not contain a field part the default field for the query will be used. To guarantee that an extension field is processed with its associated extension, the extension query part must escape any special characters like '*' or '['. If the extension query contains any whitespace characters, the extension query part must be enclosed in quotes. Example ('_' used as separation character): title_customExt:\"Apache Lucene\\?\" OR content_customExt:prefix\\* Search on the default field: _customExt:\"Apache Lucene\\?\" OR _customExt:prefix\\* The ExtendableQueryParser itself does not implement the logic how field and extension key are separated or ordered. All logic regarding the extension key and field symbol parsing is located in Extensions . Customized extension schemes should be implemented by sub-classing Extensions . For details about the default encoding scheme see Extensions . ExtensionQuery ExtensionQuery holds all query components extracted from the original query string like the query field and the extension query string. Extensions The Extensions class represents an extension mapping to associate ParserExtension instances with extension keys. An extension key is a string encoded into a Lucene standard query parser field symbol recognized by ExtendableQueryParser . The query parser passes each extension field token to SplitExtensionField(String, String) to separate the extension key from the field identifier. In addition to the key to extension mapping this class also defines the field name overloading scheme. ExtendableQueryParser uses the given extension to split the actual field name and extension key by calling SplitExtensionField(String, String) . To change the order or the key / field name encoding scheme users can subclass Extensions to implement their own. ParserExtension This class represents an extension base class to the Lucene standard QueryParser . The QueryParser is generated by the JavaCC parser generator. Changing or adding functionality or syntax in the standard query parser requires changes to the JavaCC source file. To enable extending the standard query parser without changing the JavaCC sources and re-generate the parser the ParserExtension can be customized and plugged into an instance of ExtendableQueryParser , a direct subclass of QueryParser ."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ParserExtension.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ParserExtension.html",
    "title": "Class ParserExtension | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParserExtension This class represents an extension base class to the Lucene standard QueryParser . The QueryParser is generated by the JavaCC parser generator. Changing or adding functionality or syntax in the standard query parser requires changes to the JavaCC source file. To enable extending the standard query parser without changing the JavaCC sources and re-generate the parser the ParserExtension can be customized and plugged into an instance of ExtendableQueryParser , a direct subclass of QueryParser . Inheritance System.Object ParserExtension Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class ParserExtension Methods | Improve this Doc View Source Parse(ExtensionQuery) Processes the given ExtensionQuery and returns a corresponding Query instance. Subclasses must either return a Query instance or raise a ParseException . This method must not return null . Declaration public abstract Query Parse(ExtensionQuery query) Parameters Type Name Description ExtensionQuery query the extension query Returns Type Description Query a new query instance Exceptions Type Condition ParseException if the query can not be parsed. See Also Extensions ExtendableQueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.Extensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.Extensions.html",
    "title": "Class Extensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Extensions The Extensions class represents an extension mapping to associate ParserExtension instances with extension keys. An extension key is a string encoded into a Lucene standard query parser field symbol recognized by ExtendableQueryParser . The query parser passes each extension field token to SplitExtensionField(String, String) to separate the extension key from the field identifier. In addition to the key to extension mapping this class also defines the field name overloading scheme. ExtendableQueryParser uses the given extension to split the actual field name and extension key by calling SplitExtensionField(String, String) . To change the order or the key / field name encoding scheme users can subclass Extensions to implement their own. Inheritance System.Object Extensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class Extensions Constructors | Improve this Doc View Source Extensions() Creates a new Extensions instance with the DEFAULT_EXTENSION_FIELD_DELIMITER as a delimiter character. Declaration public Extensions() | Improve this Doc View Source Extensions(Char) Creates a new Extensions instance Declaration public Extensions(char extensionFieldDelimiter) Parameters Type Name Description System.Char extensionFieldDelimiter the extensions field delimiter character Fields | Improve this Doc View Source DEFAULT_EXTENSION_FIELD_DELIMITER The default extension field delimiter character. This constant is set to ':' Declaration public static readonly char DEFAULT_EXTENSION_FIELD_DELIMITER Field Value Type Description System.Char Properties | Improve this Doc View Source ExtensionFieldDelimiter Returns the extension field delimiter Declaration public virtual char ExtensionFieldDelimiter { get; } Property Value Type Description System.Char Methods | Improve this Doc View Source Add(String, ParserExtension) Adds a new ParserExtension instance associated with the given key. Declaration public virtual void Add(string key, ParserExtension extension) Parameters Type Name Description System.String key the parser extension key ParserExtension extension the parser extension | Improve this Doc View Source BuildExtensionField(String) Builds an extension field string from a given extension key and the default query field. The default field and the key are delimited with the extension field delimiter character. This method makes no assumption about the order of the extension key and the field. By default the extension key is appended to the end of the returned string while the field is added to the beginning. Special Query characters are escaped in the result. Note: Extensions subclasses must maintain the contract between BuildExtensionField(String) and BuildExtensionField(String, String) where the latter inverts the former. Declaration public virtual string BuildExtensionField(string extensionKey) Parameters Type Name Description System.String extensionKey the extension key Returns Type Description System.String escaped extension field identifier | Improve this Doc View Source BuildExtensionField(String, String) Builds an extension field string from a given extension key and the default query field. The default field and the key are delimited with the extension field delimiter character. This method makes no assumption about the order of the extension key and the field. By default the extension key is appended to the end of the returned string while the field is added to the beginning. Special Query characters are escaped in the result. Note: Extensions subclasses must maintain the contract between BuildExtensionField(String) and BuildExtensionField(String, String) where the latter inverts the former. Declaration public virtual string BuildExtensionField(string extensionKey, string field) Parameters Type Name Description System.String extensionKey the extension key System.String field the field to apply the extension on. Returns Type Description System.String escaped extension field identifier Remarks See BuildExtensionField(String) to use the default query field | Improve this Doc View Source EscapeExtensionField(String) Escapes an extension field. The default implementation is equivalent to Escape(String) . Declaration public virtual string EscapeExtensionField(string extfield) Parameters Type Name Description System.String extfield the extension field identifier Returns Type Description System.String the extension field identifier with all special chars escaped with a backslash character. | Improve this Doc View Source GetExtension(String) Returns the ParserExtension instance for the given key or null if no extension can be found for the key. Declaration public ParserExtension GetExtension(string key) Parameters Type Name Description System.String key the extension key Returns Type Description ParserExtension the ParserExtension instance for the given key or null if no extension can be found for the key. | Improve this Doc View Source SplitExtensionField(String, String) Splits a extension field and returns the field / extension part as a Tuple{string,string} . This method tries to split on the first occurrence of the extension field delimiter, if the delimiter is not present in the string the result will contain a null value for the extension key and the given field string as the field value. If the given extension field string contains no field identifier the result pair will carry the given default field as the field value. Declaration public virtual Tuple<string, string> SplitExtensionField(string defaultField, string field) Parameters Type Name Description System.String defaultField the default query field System.String field the extension field string Returns Type Description System.Tuple < System.String , System.String > a { System.Tuple<T1, T2> with the field name as the System.Tuple`2.Item1 and the extension key as the System.Tuple`2.Item2 See Also ExtendableQueryParser ParserExtension"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtensionQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Ext.ExtensionQuery.html",
    "title": "Class ExtensionQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExtensionQuery ExtensionQuery holds all query components extracted from the original query string like the query field and the extension query string. Inheritance System.Object ExtensionQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Ext Assembly : Lucene.Net.QueryParser.dll Syntax public class ExtensionQuery Constructors | Improve this Doc View Source ExtensionQuery(QueryParser, String, String) Creates a new ExtensionQuery Declaration public ExtensionQuery(QueryParser topLevelParser, string field, string rawQueryString) Parameters Type Name Description QueryParser topLevelParser System.String field the query field System.String rawQueryString the raw extension query string Properties | Improve this Doc View Source Field Returns the query field Declaration public virtual string Field { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source RawQueryString Returns the raw extension query string Declaration public virtual string RawQueryString { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source TopLevelParser Returns the top level parser which created this ExtensionQuery Declaration public virtual QueryParser TopLevelParser { get; protected set; } Property Value Type Description QueryParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.ComplexPhrase.html",
    "title": "Namespace Lucene.Net.QueryParsers.ComplexPhrase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.ComplexPhrase Classes ComplexPhraseQueryParser QueryParser which permits complex phrase query syntax eg \"(john jon jonathan~) peters*\". Performs potentially multiple passes over Query text to parse any nested logic in PhraseQueries. - First pass takes any PhraseQuery content between quotes and stores for subsequent pass. All other query content is parsed as normal - Second pass parses any stored PhraseQuery content, checking all embedded clauses are referring to the same field and therefore can be rewritten as Span queries. All PhraseQuery clauses are expressed as ComplexPhraseQuery objects This could arguably be done in one pass using a new QueryParser but here I am working within the constraints of the existing parser as a base class. This currently simply feeds all phrase content through an analyzer to select phrase terms - any \"special\" syntax such as * ~ * etc are not given special status ComplexPhraseQueryParser.ComplexPhraseQuery Used to handle the query content in between quotes and produced Span-based interpretations of the clauses."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.html",
    "title": "Namespace Lucene.Net.QueryParsers.Classic | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Classic <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> A simple query parser implemented with JavaCC. Note that JavaCC defines lots of public classes, methods and fields that do not need to be public. These clutter the documentation. Sorry. Note that because JavaCC defines a class named Token , org.apache.lucene.analysis.Token must always be fully qualified in source code in this package. NOTE : Lucene.Net.QueryParsers.Flexible.Standard has an alternative queryparser that matches the syntax of this one, but is more modular, enabling substantial customization to how a query is created. Query Parser Syntax Overview Terms Fields Term Modifiers Wildcard Searches Regular expression Searches Fuzzy Searches Proximity Searches Range Searches Boosting a Term Boolean Operators OR AND + NOT - Grouping Field Grouping Escaping Special Characters Overview Although Lucene provides the ability to create your own queries through its API, it also provides a rich query language through the Query Parser, a lexer which interprets a string into a Lucene Query using JavaCC. Generally, the query parser syntax may change from release to release. This page describes the syntax as of the current release. If you are using a different version of Lucene, please consult the copy of docs/queryparsersyntax.html that was distributed with the version you are using. Before choosing to use the provided Query Parser, please consider the following: 1. If you are programmatically generating a query string and then parsing it with the query parser then you should seriously consider building your queries directly with the query API. In other words, the query parser is designed for human-entered text, not for program-generated text. 2. Untokenized fields are best added directly to queries, and not through the query parser. If a field's values are generated programmatically by the application, then so should query clauses for this field. An analyzer, which the query parser uses, is designed to convert human-entered text to terms. Program-generated values, like dates, keywords, etc., should be consistently program-generated. 3. In a query form, fields which are general text should use the query parser. All others, such as date ranges, keywords, etc. are better added directly through the query API. A field with a limit set of values, that can be specified with a pull-down menu should not be added to a query string which is subsequently parsed, but rather added as a TermQuery clause. Terms A query is broken up into terms and operators. There are two types of terms: Single Terms and Phrases. A Single Term is a single word such as \"test\" or \"hello\". A Phrase is a group of words surrounded by double quotes such as \"hello dolly\". Multiple terms can be combined together with Boolean operators to form a more complex query (see below). Note: The analyzer used to create the index will be used on the terms and phrases in the query string. So it is important to choose an analyzer that will not interfere with the terms used in the query string. Fields Lucene supports fielded data. When performing a search you can either specify a field, or use the default field. The field names and default field is implementation specific. You can search any field by typing the field name followed by a colon \":\" and then the term you are looking for. As an example, let's assume a Lucene index contains two fields, title and text and text is the default field. If you want to find the document entitled \"The Right Way\" which contains the text \"don't go this way\", you can enter: title:\"The Right Way\" AND text:go or title:\"The Right Way\" AND go Since text is the default field, the field indicator is not required. Note: The field is only valid for the term that it directly precedes, so the query title:The Right Way Will only find \"The\" in the title field. It will find \"Right\" and \"Way\" in the default field (in this case the text field). Term Modifiers Lucene supports modifying query terms to provide a wide range of searching options. Wildcard Searches Lucene supports single and multiple character wildcard searches within single terms (not within phrase queries). To perform a single character wildcard search use the \"?\" symbol. To perform a multiple character wildcard search use the \"*\" symbol. The single character wildcard search looks for terms that match that with the single character replaced. For example, to search for \"text\" or \"test\" you can use the search: te?t Multiple character wildcard searches looks for 0 or more characters. For example, to search for test, tests or tester, you can use the search: test* You can also use the wildcard searches in the middle of a term. te*t Note: You cannot use a * or ? symbol as the first character of a search. Regular Expression Searches Lucene supports regular expression searches matching a pattern between forward slashes \"/\". The syntax may change across releases, but the current supported syntax is documented in the RegExp class. For example to find documents containing \"moat\" or \"boat\": /[mb]oat/ Fuzzy Searches Lucene supports fuzzy searches based on Damerau-Levenshtein Distance. To do a fuzzy search use the tilde, \"~\", symbol at the end of a Single word Term. For example to search for a term similar in spelling to \"roam\" use the fuzzy search: roam~ This search will find terms like foam and roams. An additional (optional) parameter can specify the maximum number of edits allowed. The value is between 0 and 2, For example: roam~1 The default that is used if the parameter is not given is 2 edit distances. Previously, a floating point value was allowed here. This syntax is considered deprecated and will be removed in Lucene 5.0 Proximity Searches Lucene supports finding words are a within a specific distance away. To do a proximity search use the tilde, \"~\", symbol at the end of a Phrase. For example to search for a \"apache\" and \"jakarta\" within 10 words of each other in a document use the search: \"jakarta apache\"~10 Range Searches Range Queries allow one to match documents whose field(s) values are between the lower and upper bound specified by the Range Query. Range Queries can be inclusive or exclusive of the upper and lower bounds. Sorting is done lexicographically. mod_date:[20020101 TO 20030101] This will find documents whose mod_date fields have values between 20020101 and 20030101, inclusive. Note that Range Queries are not reserved for date fields. You could also use range queries with non-date fields: title:{Aida TO Carmen} This will find all documents whose titles are between Aida and Carmen, but not including Aida and Carmen. Inclusive range queries are denoted by square brackets. Exclusive range queries are denoted by curly brackets. Boosting a Term Lucene provides the relevance level of matching documents based on the terms found. To boost a term use the caret, \"^\", symbol with a boost factor (a number) at the end of the term you are searching. The higher the boost factor, the more relevant the term will be. Boosting allows you to control the relevance of a document by boosting its term. For example, if you are searching for jakarta apache and you want the term \"jakarta\" to be more relevant boost it using the ^ symbol along with the boost factor next to the term. You would type: jakarta^4 apache This will make documents with the term jakarta appear more relevant. You can also boost Phrase Terms as in the example: \"jakarta apache\"^4 \"Apache Lucene\" By default, the boost factor is 1. Although the boost factor must be positive, it can be less than 1 (e.g. 0.2) Boolean Operators Boolean operators allow terms to be combined through logic operators. Lucene supports AND, \"+\", OR, NOT and \"-\" as Boolean operators(Note: Boolean operators must be ALL CAPS). OR The OR operator is the default conjunction operator. This means that if there is no Boolean operator between two terms, the OR operator is used. The OR operator links two terms and finds a matching document if either of the terms exist in a document. This is equivalent to a union using sets. The symbol || can be used in place of the word OR. To search for documents that contain either \"jakarta apache\" or just \"jakarta\" use the query: \"jakarta apache\" jakarta or \"jakarta apache\" OR jakarta AND The AND operator matches documents where both terms exist anywhere in the text of a single document. This is equivalent to an intersection using sets. The symbol && can be used in place of the word AND. To search for documents that contain \"jakarta apache\" and \"Apache Lucene\" use the query: \"jakarta apache\" AND \"Apache Lucene\" + The \"+\" or required operator requires that the term after the \"+\" symbol exist somewhere in a the field of a single document. To search for documents that must contain \"jakarta\" and may contain \"lucene\" use the query: +jakarta lucene NOT The NOT operator excludes documents that contain the term after NOT. This is equivalent to a difference using sets. The symbol ! can be used in place of the word NOT. To search for documents that contain \"jakarta apache\" but not \"Apache Lucene\" use the query: \"jakarta apache\" NOT \"Apache Lucene\" Note: The NOT operator cannot be used with just one term. For example, the following search will return no results: NOT \"jakarta apache\" - The \"-\" or prohibit operator excludes documents that contain the term after the \"-\" symbol. To search for documents that contain \"jakarta apache\" but not \"Apache Lucene\" use the query: \"jakarta apache\" -\"Apache Lucene\" Grouping Lucene supports using parentheses to group clauses to form sub queries. This can be very useful if you want to control the boolean logic for a query. To search for either \"jakarta\" or \"apache\" and \"website\" use the query: (jakarta OR apache) AND website This eliminates any confusion and makes sure you that website must exist and either term jakarta or apache may exist. Field Grouping Lucene supports using parentheses to group multiple clauses to a single field. To search for a title that contains both the word \"return\" and the phrase \"pink panther\" use the query: title:(+return +\"pink panther\") Escaping Special Characters Lucene supports escaping special characters that are part of the query syntax. The current list special characters are && || ! ( ) { } [ ] ^ \" ~ * ? : \\ / To escape these character use the \\ before the character. For example to search for (1+1):2 use the query: (1+1):2 Classes FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. LexicalToken MultiFieldQueryParser A QueryParser which constructs queries to search multiple fields. ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. QueryParser This class is generated by JavaCC. The most important method is Parse(String) . The syntax for query strings is as follows: A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation . In TermRangeQuery s, QueryParser tries to detect date values, e.g. date:[6/1/2005 TO 6/4/2005] produces a range query that searches for \"date\" fields between 2005-06-01 and 2005-06-04. Note that the format of the accepted input depends on the System.Globalization.CultureInfo . A DateTools.Resolution has to be set, if you want to use DateTools for date conversion. The date resolution that shall be used for RangeQueries can be set using SetDateResolution(DateTools.Resolution) or SetDateResolution(String, DateTools.Resolution) . The former sets the default date resolution for all fields, whereas the latter can be used to set field specific date resolutions. Field specific date resolutions take, if set, precedence over the default date resolution. If you don't use DateTools in your index, you can create your own query parser that inherits QueryParser and overwrites GetRangeQuery(String, String, String, Boolean, Boolean) to use a different method for date conversion. Note that QueryParser is not thread-safe. NOTE : there is a new QueryParser in contrib, which matches the same syntax as this class, but is more modular, enabling substantial customization to how a query is created. NOTE : You must specify the required LuceneVersion compatibility when creating QueryParser: As of 3.1, AutoGeneratePhraseQueries is false by default. QueryParserBase This class is overridden by QueryParser . QueryParserBase.MethodRemovedUseAnother Do not catch this exception in your code, it means you are using methods that you should no longer use. QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() QueryParserTokenManager Token Manager. RegexpToken Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Enums Operator The default operator for parsing queries. Use DefaultOperator to change it."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy.Directory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy.Directory Classes DirectoryTaxonomyReader A TaxonomyReader which retrieves stored taxonomy information from a Directory . Reading from the on-disk index on every method call is too slow, so this implementation employs caching: Some methods cache recent requests and their results, while other methods prefetch all the data into memory and then provide answers directly from in-memory tables. See the documentation of individual methods for comments on their performance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DirectoryTaxonomyWriter ITaxonomyWriter which uses a Directory to store the taxonomy information on disk, and keeps an additional in-memory cache of some or all categories. In addition to the permanently-stored information in the Directory , efficiency dictates that we also keep an in-memory cache of recently seen or all categories, so that we do not need to go back to disk for every category addition to see which ordinal this category already has, if any. A ITaxonomyWriterCache object determines the specific caching algorithm used. This class offers some hooks for extending classes to control the IndexWriter instance that is used. See OpenIndexWriter(Directory, IndexWriterConfig) . @lucene.experimental DirectoryTaxonomyWriter.DiskOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained on file system DirectoryTaxonomyWriter.MemoryOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained in memory Interfaces DirectoryTaxonomyWriter.IOrdinalMap Mapping from old ordinal to new ordinals, used when merging indexes wit separate taxonomies. AddMapping(Int32, Int32) merges one or more taxonomies into the given taxonomy (this). An DirectoryTaxonomyWriter.IOrdinalMap is filled for each of the added taxonomies, containing the new ordinal (in the merged taxonomy) of each of the categories in the old taxonomy. There exist two implementations of DirectoryTaxonomyWriter.IOrdinalMap : DirectoryTaxonomyWriter.MemoryOrdinalMap and DirectoryTaxonomyWriter.DiskOrdinalMap . As their names suggest, the former keeps the map in memory and the latter in a temporary disk file. Because these maps will later be needed one by one (to remap the counting lists), not all at the same time, it is recommended to put the first taxonomy's map in memory, and all the rest on disk (later to be automatically read into memory one by one, when needed)."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap.html",
    "title": "Interface DirectoryTaxonomyWriter.IOrdinalMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface DirectoryTaxonomyWriter.IOrdinalMap Mapping from old ordinal to new ordinals, used when merging indexes wit separate taxonomies. AddMapping(Int32, Int32) merges one or more taxonomies into the given taxonomy (this). An DirectoryTaxonomyWriter.IOrdinalMap is filled for each of the added taxonomies, containing the new ordinal (in the merged taxonomy) of each of the categories in the old taxonomy. There exist two implementations of DirectoryTaxonomyWriter.IOrdinalMap : DirectoryTaxonomyWriter.MemoryOrdinalMap and DirectoryTaxonomyWriter.DiskOrdinalMap . As their names suggest, the former keeps the map in memory and the latter in a temporary disk file. Because these maps will later be needed one by one (to remap the counting lists), not all at the same time, it is recommended to put the first taxonomy's map in memory, and all the rest on disk (later to be automatically read into memory one by one, when needed). Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public interface IOrdinalMap Methods | Improve this Doc View Source AddDone() Call AddDone() to say that all AddMapping(Int32, Int32) have been done. In some implementations this might free some resources. Declaration void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Record a mapping. Declaration void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Return the map from the taxonomy's original (consecutive) ordinals to the new taxonomy's ordinals. If the map has to be read from disk and ordered appropriately, it is done when getMap() is called. getMap() should only be called once, and only when the map is actually needed. Calling it will also free all resources that the map might be holding (such as temporary disk space), other than the returned int[]. Declaration int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Set the size of the map. This MUST be called before AddMapping(Int32, Int32) . It is assumed (but not verified) that AddMapping(Int32, Int32) will then be called exactly 'size' times, with different origOrdinals between 0 and size - 1. Declaration void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.html",
    "title": "Namespace Lucene.Net.Facet.SortedSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.SortedSet Classes DefaultSortedSetDocValuesReaderState Default implementation of SortedSetDocValuesFacetCounts SortedSetDocValuesFacetCounts Compute facets counts from previously indexed SortedSetDocValuesFacetField , without require a separate taxonomy index. Faceting is a bit slower (~25%), and there is added cost on every IndexReader open to create a new SortedSetDocValuesReaderState . Furthermore, this does not support hierarchical facets; only flat (dimension + label) facets, but it uses quite a bit less RAM to do so. NOTE : this class should be instantiated and then used from a single thread, because it holds a thread-private instance of SortedSetDocValues . NOTE: : tie-break is by unicode sort order @lucene.experimental SortedSetDocValuesFacetField Add an instance of this to your Document for every facet label to be indexed via SortedSetDocValues . SortedSetDocValuesReaderState Wraps a IndexReader and resolves ords using existing SortedSetDocValues APIs without a separate taxonomy index. This only supports flat facets (dimension + label), and it makes faceting a bit slower, adds some cost at reopen time, but avoids managing the separate taxonomy index. It also requires less RAM than the taxonomy index, as it manages the flat (2-level) hierarchy more efficiently. In addition, the tie-break during faceting is now meaningful (in label sorted order). NOTE : creating an instance of this class is somewhat costly, as it computes per-segment ordinal maps, so you should create it once and re-use that one instance for a given IndexReader . SortedSetDocValuesReaderState.OrdRange Holds start/end range of ords, which maps to one dimension (someday we may generalize it to map to hierarchies within one dimension)."
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.html",
    "title": "Class SortedSetDocValuesReaderState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesReaderState Wraps a IndexReader and resolves ords using existing SortedSetDocValues APIs without a separate taxonomy index. This only supports flat facets (dimension + label), and it makes faceting a bit slower, adds some cost at reopen time, but avoids managing the separate taxonomy index. It also requires less RAM than the taxonomy index, as it manages the flat (2-level) hierarchy more efficiently. In addition, the tie-break during faceting is now meaningful (in label sorted order). NOTE : creating an instance of this class is somewhat costly, as it computes per-segment ordinal maps, so you should create it once and re-use that one instance for a given IndexReader . Inheritance System.Object SortedSetDocValuesReaderState DefaultSortedSetDocValuesReaderState Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public abstract class SortedSetDocValuesReaderState Constructors | Improve this Doc View Source SortedSetDocValuesReaderState() Sole constructor. Declaration protected SortedSetDocValuesReaderState() Properties | Improve this Doc View Source Count Number of unique labels. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Indexed field we are reading. Declaration public abstract string Field { get; } Property Value Type Description System.String | Improve this Doc View Source OrigReader Returns top-level index reader. Declaration public abstract IndexReader OrigReader { get; } Property Value Type Description IndexReader | Improve this Doc View Source PrefixToOrdRange Returns mapping from prefix to SortedSetDocValuesReaderState.OrdRange . Declaration public abstract IDictionary<string, SortedSetDocValuesReaderState.OrdRange> PrefixToOrdRange { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , SortedSetDocValuesReaderState.OrdRange > Methods | Improve this Doc View Source GetDocValues() Return top-level doc values. Declaration public abstract SortedSetDocValues GetDocValues() Returns Type Description SortedSetDocValues | Improve this Doc View Source GetOrdRange(String) Returns the SortedSetDocValuesReaderState.OrdRange for this dimension. Declaration public abstract SortedSetDocValuesReaderState.OrdRange GetOrdRange(string dim) Parameters Type Name Description System.String dim Returns Type Description SortedSetDocValuesReaderState.OrdRange"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.OrdRange.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.OrdRange.html",
    "title": "Class SortedSetDocValuesReaderState.OrdRange | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesReaderState.OrdRange Holds start/end range of ords, which maps to one dimension (someday we may generalize it to map to hierarchies within one dimension). Inheritance System.Object SortedSetDocValuesReaderState.OrdRange Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public sealed class OrdRange Constructors | Improve this Doc View Source OrdRange(Int32, Int32) Start and end are inclusive. Declaration public OrdRange(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Properties | Improve this Doc View Source End End of range, inclusive: Declaration public int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Start of range, inclusive: Declaration public int Start { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.html",
    "title": "Namespace Lucene.Net.Facet.Range | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Range Classes DoubleRange Represents a range over double values. @lucene.experimental DoubleRangeFacetCounts Facets implementation that computes counts for dynamic double ranges from a provided ValueSource , using DoubleVal(Int32) or DoubleVal(Int32, Double[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). If you had indexed your field using SingleDocValuesField then pass SingleFieldSource as the ValueSource ; if you used DoubleDocValuesField then pass DoubleFieldSource (this is the default used when you pass just a the field name). @lucene.experimental Int64Range Represents a range over System.Int64 values. NOTE: This was LongRange in Lucene @lucene.experimental Int64RangeFacetCounts Facets implementation that computes counts for dynamic long ranges from a provided ValueSource , using Int64Val(Int32) or Int64Val(Int32, Int64[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). NOTE: This was LongRangeFacetCounts in Lucene @lucene.experimental Range Base class for a single labeled range. @lucene.experimental RangeFacetCounts Base class for range faceting. @lucene.experimental"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Range.html",
    "title": "Class Range | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Range Base class for a single labeled range. @lucene.experimental Inheritance System.Object Range DoubleRange Int64Range Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public abstract class Range Constructors | Improve this Doc View Source Range(String) Sole constructor. Declaration protected Range(string label) Parameters Type Name Description System.String label Properties | Improve this Doc View Source Label Label that identifies this range. Declaration public string Label { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FailNoMatch() Invoke this for a useless range. Declaration protected virtual void FailNoMatch() | Improve this Doc View Source GetFilter(ValueSource) Returns a new Filter accepting only documents in this range. This filter is not general-purpose; you should either use it with DrillSideways by adding it to Add(String, Filter) , or pass it to FilteredQuery using its QUERY_FIRST_FILTER_STRATEGY . If the ValueSource is static, e.g. an indexed numeric field, then it may be more efficient to use NumericRangeFilter . Declaration public virtual Filter GetFilter(ValueSource valueSource) Parameters Type Name Description ValueSource valueSource Returns Type Description Filter | Improve this Doc View Source GetFilter(Filter, ValueSource) Returns a new Filter accepting only documents in this range. This filter is not general-purpose; you should either use it with DrillSideways by adding it to Add(String, Filter) , or pass it to FilteredQuery using its QUERY_FIRST_FILTER_STRATEGY . If the ValueSource is static, e.g. an indexed numeric field, then it may be more efficient to use NumericRangeFilter . The provided fastMatchFilter , if non-null, will first be consulted, and only if that is set for each document will the range then be checked. Declaration public abstract Filter GetFilter(Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Filter fastMatchFilter ValueSource valueSource Returns Type Description Filter"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.LabelAndValue.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.LabelAndValue.html",
    "title": "Class LabelAndValue | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LabelAndValue Single label and its value, usually contained in a FacetResult . Inheritance System.Object LabelAndValue Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class LabelAndValue Constructors | Improve this Doc View Source LabelAndValue(String, Int32) Constructor for System.Int32 value . Makes the ToString() method print the value as an System.Int32 with no decimal. Declaration public LabelAndValue(string label, int value) Parameters Type Name Description System.String label System.Int32 value | Improve this Doc View Source LabelAndValue(String, Single) Constructor for System.Single value . Makes the ToString() method print the value as a System.Single with at least 1 number after the decimal. Declaration public LabelAndValue(string label, float value) Parameters Type Name Description System.String label System.Single value Properties | Improve this Doc View Source Label Facet's label. Declaration public string Label { get; } Property Value Type Description System.String | Improve this Doc View Source TypeOfValue The original data type of Value that was passed through the constructor. Declaration public Type TypeOfValue { get; } Property Value Type Description System.Type | Improve this Doc View Source Value Value associated with this label. Declaration public float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.html",
    "title": "Class FacetsConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsConfig Records per-dimension configuration. By default a dimension is flat, single valued and does not require count for the dimension; use the setters in this class to change these settings for each dim. NOTE : this configuration is not saved into the index, but it's vital, and up to the application to ensure, that at search time the provided FacetsConfig matches what was used during indexing. @lucene.experimental Inheritance System.Object FacetsConfig Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetsConfig Constructors | Improve this Doc View Source FacetsConfig() Default constructor. Declaration public FacetsConfig() Fields | Improve this Doc View Source DEFAULT_DIM_CONFIG Default per-dimension configuration. Declaration public static readonly FacetsConfig.DimConfig DEFAULT_DIM_CONFIG Field Value Type Description FacetsConfig.DimConfig | Improve this Doc View Source DEFAULT_INDEX_FIELD_NAME Which Lucene field holds the drill-downs and ords (as doc values). Declaration public const string DEFAULT_INDEX_FIELD_NAME = \"$facets\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultDimConfig Get the default configuration for new dimensions. Useful when the dimension is not known beforehand and may need different global default settings, like multivalue = true . Declaration protected virtual FacetsConfig.DimConfig DefaultDimConfig { get; } Property Value Type Description FacetsConfig.DimConfig The default configuration to be used for dimensions that are not yet set in the FacetsConfig | Improve this Doc View Source DimConfigs Returns map of field name to FacetsConfig.DimConfig . Declaration public virtual IDictionary<string, FacetsConfig.DimConfig> DimConfigs { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , FacetsConfig.DimConfig > Methods | Improve this Doc View Source Build(Document) Translates any added FacetField s into normal fields for indexing; only use this version if you did not add any taxonomy-based fields ( FacetField or AssociationFacetField ). NOTE: you should add the returned document to IndexWriter , not the input one! Declaration public virtual Document Build(Document doc) Parameters Type Name Description Document doc Returns Type Description Document | Improve this Doc View Source Build(ITaxonomyWriter, Document) Translates any added FacetField s into normal fields for indexing. NOTE: you should add the returned document to IndexWriter , not the input one! Declaration public virtual Document Build(ITaxonomyWriter taxoWriter, Document doc) Parameters Type Name Description ITaxonomyWriter taxoWriter Document doc Returns Type Description Document | Improve this Doc View Source DedupAndEncode(Int32sRef) Encodes ordinals into a BytesRef ; expert: subclass can override this to change encoding. Declaration protected virtual BytesRef DedupAndEncode(Int32sRef ordinals) Parameters Type Name Description Int32sRef ordinals Returns Type Description BytesRef | Improve this Doc View Source GetDimConfig(String) Get the current configuration for a dimension. Declaration public virtual FacetsConfig.DimConfig GetDimConfig(string dimName) Parameters Type Name Description System.String dimName Returns Type Description FacetsConfig.DimConfig | Improve this Doc View Source PathToString(String, String[]) Turns a dim + path into an encoded string. Declaration public static string PathToString(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.String | Improve this Doc View Source PathToString(String[]) Turns a dim + path into an encoded string. Declaration public static string PathToString(string[] path) Parameters Type Name Description System.String [] path Returns Type Description System.String | Improve this Doc View Source PathToString(String[], Int32) Turns the first length elements of path into an encoded string. Declaration public static string PathToString(string[] path, int length) Parameters Type Name Description System.String [] path System.Int32 length Returns Type Description System.String | Improve this Doc View Source ProcessSSDVFacetFields(IDictionary<String, IList<SortedSetDocValuesFacetField>>, Document) Declaration public void ProcessSSDVFacetFields(IDictionary<string, IList<SortedSetDocValuesFacetField>> byField, Document doc) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < SortedSetDocValuesFacetField >> byField Document doc | Improve this Doc View Source SetHierarchical(String, Boolean) Pass true if this dimension is hierarchical (has depth > 1 paths). Declaration public virtual void SetHierarchical(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source SetIndexFieldName(String, String) Specify which index field name should hold the ordinals for this dimension; this is only used by the taxonomy based facet methods. Declaration public virtual void SetIndexFieldName(string dimName, string indexFieldName) Parameters Type Name Description System.String dimName System.String indexFieldName | Improve this Doc View Source SetMultiValued(String, Boolean) Pass true if this dimension may have more than one value per document. Declaration public virtual void SetMultiValued(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source SetRequireDimCount(String, Boolean) Pass true if at search time you require accurate counts of the dimension, i.e. how many hits have this dimension. Declaration public virtual void SetRequireDimCount(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source StringToPath(String) Turns an encoded string (from a previous call to PathToString(String[]) ) back into the original string[] . Declaration public static string[] StringToPath(string s) Parameters Type Name Description System.String s Returns Type Description System.String []"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.DimConfig.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsConfig.DimConfig.html",
    "title": "Class FacetsConfig.DimConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsConfig.DimConfig Holds the configuration for one dimension @lucene.experimental Inheritance System.Object FacetsConfig.DimConfig Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class DimConfig Constructors | Improve this Doc View Source DimConfig() Default constructor. Declaration public DimConfig() Properties | Improve this Doc View Source IndexFieldName Actual field where this dimension's facet labels should be indexed Declaration public string IndexFieldName { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsHierarchical True if this dimension is hierarchical. Declaration public bool IsHierarchical { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsMultiValued True if this dimension is multi-valued. Declaration public bool IsMultiValued { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source RequireDimCount True if the count/aggregate for the entire dimension is required, which is unusual (default is false). Declaration public bool RequireDimCount { get; set; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.MatchingDocs.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.FacetsCollector.MatchingDocs.html",
    "title": "Class FacetsCollector.MatchingDocs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetsCollector.MatchingDocs Holds the documents that were matched in the AtomicReaderContext . If scores were required, then Scores is not null . Inheritance System.Object FacetsCollector.MatchingDocs Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class MatchingDocs Constructors | Improve this Doc View Source MatchingDocs(AtomicReaderContext, DocIdSet, Int32, Single[]) Sole constructor. Declaration public MatchingDocs(AtomicReaderContext context, DocIdSet bits, int totalHits, float[] scores) Parameters Type Name Description AtomicReaderContext context DocIdSet bits System.Int32 totalHits System.Single [] scores Properties | Improve this Doc View Source Bits Which documents were seen. Declaration public DocIdSet Bits { get; } Property Value Type Description DocIdSet | Improve this Doc View Source Context Context for this segment. Declaration public AtomicReaderContext Context { get; } Property Value Type Description AtomicReaderContext | Improve this Doc View Source Scores Non-sparse scores array. Declaration public float[] Scores { get; } Property Value Type Description System.Single [] | Improve this Doc View Source TotalHits Total number of hits Declaration public int TotalHits { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilterFactory.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.BloomFilterFactory.html",
    "title": "Class BloomFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BloomFilterFactory Class used to create index-time FuzzySet appropriately configured for each field. Also called to right-size bitsets for serialization. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BloomFilterFactory DefaultBloomFilterFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public abstract class BloomFilterFactory Methods | Improve this Doc View Source Downsize(FieldInfo, FuzzySet) Called when downsizing bitsets for serialization. Declaration public virtual FuzzySet Downsize(FieldInfo fieldInfo, FuzzySet initialSet) Parameters Type Name Description FieldInfo fieldInfo The field with sparse set bits. FuzzySet initialSet The bits accumulated. Returns Type Description FuzzySet null or a hopefully more densely packed, smaller bitset. | Improve this Doc View Source GetSetForField(SegmentWriteState, FieldInfo) Declaration public abstract FuzzySet GetSetForField(SegmentWriteState state, FieldInfo info) Parameters Type Name Description SegmentWriteState state The content to be indexed. FieldInfo info The field requiring a BloomFilter. Returns Type Description FuzzySet An appropriately sized set or null if no BloomFiltering required. | Improve this Doc View Source IsSaturated(FuzzySet, FieldInfo) Used to determine if the given filter has reached saturation and should be retired i.e. not saved any more. Declaration public abstract bool IsSaturated(FuzzySet bloomFilter, FieldInfo fieldInfo) Parameters Type Name Description FuzzySet bloomFilter The bloomFilter being tested. FieldInfo fieldInfo The field with which this filter is associated. Returns Type Description System.Boolean true if the set has reached saturation and should be retired."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.html",
    "title": "Namespace Lucene.Net.Codecs.BlockTerms | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.BlockTerms Classes BlockTermsReader Handles a terms dict, but decouples all details of doc/freqs/positions reading to an instance of PostingsReaderBase . This class is reusable for codecs that use a different format for docs/freqs/positions (though codecs are also free to make their own terms dict impl). This class also interacts with an instance of TermsIndexReaderBase , to abstract away the specific implementation of the terms dict index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockTermsWriter Writes terms dict, block-encoding (column stride) each term's metadata for each set of terms between two index terms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedGapTermsIndexReader TermsIndexReaderBase for simple every Nth terms indexes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FixedGapTermsIndexWriter Selects every Nth term as and index term, and hold term bytes (mostly) fully expanded in memory. This terms index supports seeking by ord. See VariableGapTermsIndexWriter for a more memory efficient terms index that does not support seeking by ord. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexReaderBase BlockTermsReader interacts with an instance of this class to manage its terms index. The writer must accept indexed terms (many pairs of BytesRef text + long fileOffset), and then this reader must be able to retrieve the nearest index term to a provided term text. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsIndexReaderBase.FieldIndexEnum Similar to TermsEnum , except, the only \"metadata\" it reports for a given indexed term is the long fileOffset into the main terms dictionary file. TermsIndexWriterBase Base class for terms index implementations to plug into BlockTermsWriter . @lucene.experimental TermsIndexWriterBase.FieldWriter Terms index API for a single field. VariableGapTermsIndexReader See VariableGapTermsIndexWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableGapTermsIndexWriter Selects index terms according to provided pluggable VariableGapTermsIndexWriter.IndexTermSelector , and stores them in a prefix trie that's loaded entirely in RAM stored as an FST<T> . This terms index only supports unsigned byte term sort order (unicode codepoint order when the bytes are UTF8). This is a Lucene.NET EXPERIMENTAL API, use at your own risk VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Sets an index term when docFreq >= docFreqThresh, or every interval terms. This should reduce seek time to high docFreq terms. VariableGapTermsIndexWriter.EveryNTermSelector VariableGapTermsIndexWriter.IndexTermSelector Hook for selecting which terms should be placed in the terms index. NewField(FieldInfo) is called at the start of each new field, and IsIndexTerm(BytesRef, TermStats) for each term in that field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.IndexTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.IndexTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.IndexTermSelector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.IndexTermSelector Hook for selecting which terms should be placed in the terms index. NewField(FieldInfo) is called at the start of each new field, and IsIndexTerm(BytesRef, TermStats) for each term in that field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector VariableGapTermsIndexWriter.EveryNTermSelector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class IndexTermSelector Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Called sequentially on every term being written, returning true if this term should be indexed. Declaration public abstract bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean | Improve this Doc View Source NewField(FieldInfo) Called when a new field is started. Declaration public abstract void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.FieldWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.FieldWriter.html",
    "title": "Class TermsIndexWriterBase.FieldWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsIndexWriterBase.FieldWriter Terms index API for a single field. Inheritance System.Object TermsIndexWriterBase.FieldWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FieldWriter Methods | Improve this Doc View Source Add(BytesRef, TermStats, Int64) Declaration public abstract void Add(BytesRef text, TermStats stats, long termsFilePointer) Parameters Type Name Description BytesRef text TermStats stats System.Int64 termsFilePointer | Improve this Doc View Source CheckIndexTerm(BytesRef, TermStats) Declaration public abstract bool CheckIndexTerm(BytesRef text, TermStats stats) Parameters Type Name Description BytesRef text TermStats stats Returns Type Description System.Boolean | Improve this Doc View Source Finish(Int64) Declaration public abstract void Finish(long termsFilePointer) Parameters Type Name Description System.Int64 termsFilePointer"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.FieldIndexEnum.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexReaderBase.FieldIndexEnum.html",
    "title": "Class TermsIndexReaderBase.FieldIndexEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsIndexReaderBase.FieldIndexEnum Similar to TermsEnum , except, the only \"metadata\" it reports for a given indexed term is the long fileOffset into the main terms dictionary file. Inheritance System.Object TermsIndexReaderBase.FieldIndexEnum Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FieldIndexEnum Properties | Improve this Doc View Source Ord Declaration public abstract long Ord { get; } Property Value Type Description System.Int64 Remarks Only implemented if SupportsOrd returns true | Improve this Doc View Source Term Declaration public abstract BytesRef Term { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Next() Returns -1 at end/ Declaration public abstract long Next() Returns Type Description System.Int64 | Improve this Doc View Source Seek(BytesRef) Seeks to \"largest\" indexed term that's less than or equal to term; returns file pointer index (into the main terms index file) for that term. Declaration public abstract long Seek(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Int64 | Improve this Doc View Source Seek(Int64) Declaration public abstract long Seek(long ord) Parameters Type Name Description System.Int64 ord Returns Type Description System.Int64 Remarks Only implemented if SupportsOrd returns true"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Among.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Among.html",
    "title": "Class Among | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Among This is the rev 502 of the Snowball SVN trunk, but modified: made abstract and introduced abstract method stem to avoid expensive reflection in filter class. refactored StringBuffers to StringBuilder uses char[] as buffer instead of StringBuffer/StringBuilder eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b reflection calls (Lovins, etc) use EMPTY_ARGS/EMPTY_PARAMS Inheritance System.Object Among Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Among Constructors | Improve this Doc View Source Among(String, Int32, Int32, String, SnowballProgram) Declaration public Among(string s, int substring_i, int result, string methodname, SnowballProgram methodobject) Parameters Type Name Description System.String s System.Int32 substring_i System.Int32 result System.String methodname SnowballProgram methodobject Properties | Improve this Doc View Source Length search string Declaration public int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Method method to use if substring matches Declaration public MethodInfo Method { get; } Property Value Type Description System.Reflection.MethodInfo | Improve this Doc View Source MethodObject object to invoke method on Declaration public SnowballProgram MethodObject { get; } Property Value Type Description SnowballProgram | Improve this Doc View Source Result result of the lookup Declaration public int Result { get; } Property Value Type Description System.Int32 | Improve this Doc View Source S search string Declaration public char[] S { get; } Property Value Type Description System.Char [] | Improve this Doc View Source SubstringIndex index to longest matching substring Declaration public int SubstringIndex { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Wikipedia.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Wikipedia.html",
    "title": "Namespace Lucene.Net.Analysis.Wikipedia | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Wikipedia Classes WikipediaTokenizer Extension of StandardTokenizer that is aware of Wikipedia syntax. It is based off of the Wikipedia tutorial available at http://en.wikipedia.org/wiki/Wikipedia:Tutorial , but it may not be complete. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WikipediaTokenizerFactory Factory for WikipediaTokenizer . <fieldType name=\"text_wiki\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WikipediaTokenizerFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Util | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Util Classes AbstractAnalysisFactory Abstract parent class for analysis factories TokenizerFactory , TokenFilterFactory and CharFilterFactory . The typical lifecycle for a factory consumer is: Create factory via its constructor (or via XXXFactory.ForName) (Optional) If the factory uses resources such as files, Inform(IResourceLoader) is called to initialize those resources. Consumer calls create() to obtain instances. BufferedCharFilter LUCENENET specific class to mimic Java's BufferedReader (that is, a reader that is seekable) so it supports Mark() and Reset() (which are part of the Java Reader class), but also provide the Correct() method of BaseCharFilter. CharacterUtils CharacterUtils provides a unified interface to Character-related operations to implement backwards compatible character operations based on a LuceneVersion instance. This is a Lucene.NET INTERNAL API, use at your own risk CharacterUtils.CharacterBuffer A simple IO buffer to use with Fill(CharacterUtils.CharacterBuffer, TextReader) . CharArrayMap CharArrayMap<TValue> A simple class that stores key System.String s as char[] 's in a hash table. Note that this is not a general purpose class. For example, it cannot remove items from the map, nor does it resize its hash table to be smaller, etc. It is designed to be quick to retrieve items by char[] keys without the necessity of converting to a System.String first. You must specify the required LuceneVersion compatibility when creating CharArrayMap : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArrayMap with the behavior before Lucene 3.1 pass a LuceneVersion < 3.1 to the constructors. CharArrayMap<TValue>.EntryIterator public iterator class so efficient methods are exposed to users CharArrayMap<TValue>.EntrySet_ public EntrySet_ class so efficient methods are exposed to users NOTE: In .NET this was renamed to EntrySet_ because it conflicted with the method EntrySet(). Since there is also an extension method named IDictionary{K,V}.EntrySet() that this class needs to override, changing the name of the method was not possible because the extension method would produce incorrect results if it were inadvertently called, leading to hard-to-diagnose bugs. Another difference between this set and the Java counterpart is that it implements System.Collections.Generic.ICollection<T> rather than System.Collections.Generic.ISet<T> so we don't have to implement a bunch of methods that we aren't really interested in. The Keys and Values properties both return System.Collections.Generic.ICollection<T> , and while there is no EntrySet() method or property in .NET, if there were it would certainly return System.Collections.Generic.ICollection<T> . CharArrayMapExtensions LUCENENET specific extension methods for CharArrayMap CharArraySet A simple class that stores System.String s as char[] 's in a hash table. Note that this is not a general purpose class. For example, it cannot remove items from the set, nor does it resize its hash table to be smaller, etc. It is designed to be quick to test if a char[] is in the set without the necessity of converting it to a System.String first. You must specify the required LuceneVersion compatibility when creating CharArraySet : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArraySet with the behavior before Lucene 3.1 pass a LuceneVersion to the constructors. Please note: This class implements System.Collections.Generic.ISet<T> but does not behave like it should in all cases. The generic type is System.String , because you can add any object to it, that has a string representation (which is converted to a string). The add methods will use System.Object.ToString() and store the result using a char[] buffer. The same behavior have the Contains(String) methods. The GetEnumerator() returns an IEnumerator{char[]} CharArraySetExtensions LUCENENET specific extension methods for CharArraySet CharFilterFactory Abstract parent class for analysis factories that create CharFilter instances. CharTokenizer An abstract base class for simple, character-oriented tokenizers. You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. A new CharTokenizer API has been introduced with Lucene 3.1. This API moved from UTF-16 code units to UTF-32 codepoints to eventually add support for supplementary characters . The old char based API has been deprecated and should be replaced with the int based methods IsTokenChar(Int32) and Normalize(Int32) . As of Lucene 3.1 each CharTokenizer - constructor expects a LuceneVersion argument. Based on the given LuceneVersion either the new API or a backwards compatibility layer is used at runtime. For LuceneVersion < 3.1 the backwards compatibility layer ensures correct behavior even for indexes build with previous versions of Lucene. If a LuceneVersion >= 3.1 is used CharTokenizer requires the new API to be implemented by the instantiated class. Yet, the old char based API is not required anymore even if backwards compatibility must be preserved. CharTokenizer subclasses implementing the new API are fully backwards compatible if instantiated with LuceneVersion < 3.1. Note: If you use a subclass of CharTokenizer with LuceneVersion >= 3.1 on an index build with a version < 3.1, created tokens might not be compatible with the terms in your index. ClasspathResourceLoader Simple IResourceLoader that uses System.Reflection.Assembly.GetManifestResourceStream(System.String) and System.Reflection.Assembly.GetType(System.String) to open resources and System.Type s, respectively. ElisionFilter Removes elisions from a TokenStream . For example, \"l'avion\" (the plane) will be tokenized as \"avion\" (plane). Elision in Wikipedia ElisionFilterFactory Factory for ElisionFilter . <fieldType name=\"text_elsn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\" articles=\"stopwordarticles.txt\" ignoreCase=\"true\"/> </analyzer> </fieldType> FilesystemResourceLoader Simple IResourceLoader that opens resource files from the local file system, optionally resolving against a base directory. This loader wraps a delegate IResourceLoader that is used to resolve all files, the current base directory does not contain. NewInstance<T>(String) is always resolved against the delegate, as an System.Assembly is needed. You can chain several FilesystemResourceLoader s to allow lookup of files in more than one base directory. FilteringTokenFilter Abstract base class for TokenFilters that may remove tokens. You have to implement Accept() and return a boolean if the current token should be preserved. IncrementToken() uses this method to decide if a token should be passed to the caller. As of Lucene 4.4, an System.ArgumentException is thrown when trying to disable position increments when filtering terms. OpenStringBuilder A StringBuilder that allows one to access the array. RollingCharBuffer Acts like a forever growing char[] as you read characters into it from the provided reader, but internally it uses a circular buffer to only hold the characters that haven't been freed yet. This is like a PushbackReader, except you don't have to specify up-front the max size of the buffer, but you do have to periodically call FreeBefore(Int32) . StemmerUtil Some commonly-used stemming functions This is a Lucene.NET INTERNAL API, use at your own risk StopwordAnalyzerBase Base class for Analyzer s that need to make use of stopword sets. TokenFilterFactory Abstract parent class for analysis factories that create TokenFilter instances. TokenizerFactory Abstract parent class for analysis factories that create Tokenizer instances. WordlistLoader Loader for text files that represent a list of stopwords. IOUtils to obtain System.IO.TextReader instances. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces IMultiTermAwareComponent Add to any analysis factory component to allow returning an analysis component factory for use with partial terms in prefix queries, wildcard queries, range query endpoints, regex queries, etc. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IResourceLoader Abstraction for loading resources (streams, files, and classes). IResourceLoaderAware Interface for a component that needs to be initialized by an implementation of IResourceLoader ."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanBuilderBase.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanBuilderBase.html",
    "title": "Class SpanBuilderBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanBuilderBase Base class for building SpanQuery s Inheritance System.Object SpanBuilderBase BoostingTermBuilder SpanFirstBuilder SpanNearBuilder SpanNotBuilder SpanOrBuilder SpanOrTermsBuilder SpanTermBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SpanBuilderBase : ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query | Improve this Doc View Source GetSpanQuery(XmlElement) LUCENENET specific - must provide declaration of GetSpanQuery to satisfy contract of ISpanQueryBuilder Declaration public abstract SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanFirstBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanFirstBuilder.html",
    "title": "Class SpanFirstBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanFirstBuilder Builder for SpanFirstQuery Inheritance System.Object SpanBuilderBase SpanFirstBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanFirstBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanFirstBuilder(ISpanQueryBuilder) Declaration public SpanFirstBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNearBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNearBuilder.html",
    "title": "Class SpanNearBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNearBuilder Builder for SpanNearQuery Inheritance System.Object SpanBuilderBase SpanNearBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNearBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanNearBuilder(ISpanQueryBuilder) Declaration public SpanNearBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNotBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanNotBuilder.html",
    "title": "Class SpanNotBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNotBuilder Builder for SpanNotQuery Inheritance System.Object SpanBuilderBase SpanNotBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNotBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanNotBuilder(ISpanQueryBuilder) Declaration public SpanNotBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrBuilder.html",
    "title": "Class SpanOrBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanOrBuilder Builder for SpanOrQuery Inheritance System.Object SpanBuilderBase SpanOrBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanOrBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanOrBuilder(ISpanQueryBuilder) Declaration public SpanOrBuilder(ISpanQueryBuilder factory) Parameters Type Name Description ISpanQueryBuilder factory Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrTermsBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanOrTermsBuilder.html",
    "title": "Class SpanOrTermsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanOrTermsBuilder Builder that analyzes the text into a SpanOrQuery Inheritance System.Object SpanBuilderBase SpanOrTermsBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanOrTermsBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Constructors | Improve this Doc View Source SpanOrTermsBuilder(Analyzer) Declaration public SpanOrTermsBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanQueryBuilderFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanQueryBuilderFactory.html",
    "title": "Class SpanQueryBuilderFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanQueryBuilderFactory Factory for ISpanQueryBuilder s Inheritance System.Object SpanQueryBuilderFactory Implements ISpanQueryBuilder IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanQueryBuilderFactory : ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source AddBuilder(String, ISpanQueryBuilder) Declaration public virtual void AddBuilder(string nodeName, ISpanQueryBuilder builder) Parameters Type Name Description System.String nodeName ISpanQueryBuilder builder | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public virtual SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanTermBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.SpanTermBuilder.html",
    "title": "Class SpanTermBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanTermBuilder Builder for SpanTermQuery Inheritance System.Object SpanBuilderBase SpanTermBuilder Implements ISpanQueryBuilder IQueryBuilder Inherited Members SpanBuilderBase.GetQuery(XmlElement) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanTermBuilder : SpanBuilderBase, ISpanQueryBuilder, IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration public override SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery Overrides SpanBuilderBase.GetSpanQuery(XmlElement) Implements ISpanQueryBuilder IQueryBuilder"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IRevision.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IRevision.html",
    "title": "Interface IRevision | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRevision A revision comprises lists of files that come from different sources and need to be replicated together to e.g. guarantee that all resources are in sync. In most cases an application will replicate a single index, and so the revision will contain files from a single source. However, some applications may require to treat a collection of indexes as a single entity so that the files from all sources are replicated together, to guarantee consistency beween them. For example, an application which indexes facets will need to replicate both the search and taxonomy indexes together, to guarantee that they match at the client side. Inherited Members System.IComparable<Lucene.Net.Replicator.IRevision>.CompareTo(Lucene.Net.Replicator.IRevision) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IRevision : IComparable<IRevision> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Properties | Improve this Doc View Source SourceFiles Returns the files that comprise this revision, as a mapping from a source to a list of files. Declaration IDictionary<string, IList<RevisionFile>> SourceFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source Version Returns a string representation of the version of this revision. The version is used by CompareTo(String) as well as to serialize/deserialize revision information. Therefore it must be self descriptive as well as be able to identify one revision from another. Declaration string Version { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(String) Compares the revision to the given version string. Behaves like System.IComparable<T>.CompareTo(T) Declaration int CompareTo(string version) Parameters Type Name Description System.String version Returns Type Description System.Int32 | Improve this Doc View Source Open(String, String) Returns a System.IO.Stream for the given fileName and source . It is the caller's respnsibility to dispose the System.IO.Stream when it has been consumed. Declaration Stream Open(string source, string fileName) Parameters Type Name Description System.String source System.String fileName Returns Type Description System.IO.Stream Exceptions Type Condition System.IO.IOException | Improve this Doc View Source Release() Called when this revision can be safely released, i.e. where there are no more references to it. Declaration void Release() Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.LocalReplicator.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.LocalReplicator.html",
    "title": "Class LocalReplicator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LocalReplicator A IReplicator implementation for use by the side that publishes IRevision s, as well for clients to CheckForUpdate(String) check for updates}. When a client needs to be updated, it is returned a SessionToken through which it can ObtainFile(String, String, String) the files of that revision. As long as a revision is being replicated, this replicator guarantees that it will not be Release() . Replication sessions expire by default after , and the threshold can be configured through ExpirationThreshold . Inheritance System.Object LocalReplicator Implements IReplicator System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class LocalReplicator : IReplicator, IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields | Improve this Doc View Source DEFAULT_SESSION_EXPIRATION_THRESHOLD Threshold for expiring inactive sessions. Defaults to 30 minutes. Declaration public const long DEFAULT_SESSION_EXPIRATION_THRESHOLD = 1800000L Field Value Type Description System.Int64 Properties | Improve this Doc View Source ExpirationThreshold Gets or sets the expiration threshold in milliseconds. If a replication session is inactive this long it is automatically expired, and further attempts to operate within this session will throw a SessionExpiredException . Declaration public virtual long ExpirationThreshold { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CheckForUpdate(String) Declaration public virtual SessionToken CheckForUpdate(string currentVersion) Parameters Type Name Description System.String currentVersion Returns Type Description SessionToken | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Ensure that replicator is still open, or throw System.ObjectDisposedException otherwise. Declaration protected void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException This replicator has already been disposed. | Improve this Doc View Source ObtainFile(String, String, String) Declaration public virtual Stream ObtainFile(string sessionId, string source, string fileName) Parameters Type Name Description System.String sessionId System.String source System.String fileName Returns Type Description System.IO.Stream | Improve this Doc View Source Publish(IRevision) Declaration public virtual void Publish(IRevision revision) Parameters Type Name Description IRevision revision | Improve this Doc View Source Release(String) Declaration public virtual void Release(string sessionId) Parameters Type Name Description System.String sessionId Exceptions Type Condition System.InvalidOperationException Implements IReplicator System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.PerSessionDirectoryFactory.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.PerSessionDirectoryFactory.html",
    "title": "Class PerSessionDirectoryFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerSessionDirectoryFactory A ISourceDirectoryFactory which returns FSDirectory under a dedicated session directory. When a session is over, the entire directory is deleted. Inheritance System.Object PerSessionDirectoryFactory Implements ISourceDirectoryFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class PerSessionDirectoryFactory : ISourceDirectoryFactory Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source PerSessionDirectoryFactory(String) Constructor with the given sources mapping. Declaration public PerSessionDirectoryFactory(string workingDirectory) Parameters Type Name Description System.String workingDirectory Methods | Improve this Doc View Source CleanupSession(String) Declaration public virtual void CleanupSession(string sessionId) Parameters Type Name Description System.String sessionId | Improve this Doc View Source GetDirectory(String, String) Declaration public virtual Directory GetDirectory(string sessionId, string source) Parameters Type Name Description System.String sessionId System.String source Returns Type Description Directory Implements ISourceDirectoryFactory"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ReplicationClient.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.ReplicationClient.html",
    "title": "Class ReplicationClient | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReplicationClient A client which monitors and obtains new revisions from a IReplicator . It can be used to either periodically check for updates by invoking StartUpdateThread(Int64, String) , or manually by calling UpdateNow() . Whenever a new revision is available, the RequiredFiles(IDictionary<String, IList<RevisionFile>>) are copied to the Directory specified by PerSessionDirectoryFactory and a handler is notified. Inheritance System.Object ReplicationClient Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class ReplicationClient : IDisposable Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ReplicationClient(IReplicator, IReplicationHandler, ISourceDirectoryFactory) Constructor. Declaration public ReplicationClient(IReplicator replicator, IReplicationHandler handler, ISourceDirectoryFactory factory) Parameters Type Name Description IReplicator replicator The IReplicator used for checking for updates IReplicationHandler handler The IReplicationHandler notified when new revisions are ready ISourceDirectoryFactory factory The ISourceDirectoryFactory for returning a Directory for a given source and session Fields | Improve this Doc View Source INFO_STREAM_COMPONENT The component name to use with IsEnabled(String) Declaration public const string INFO_STREAM_COMPONENT = \"ReplicationThread\" Field Value Type Description System.String Properties | Improve this Doc View Source InfoStream Gets or sets the InfoStream to use for logging messages. Declaration public virtual InfoStream InfoStream { get; set; } Property Value Type Description InfoStream | Improve this Doc View Source IsUpdateThreadAlive Returns true if the update thread is alive. The update thread is alive if it has been StartUpdateThread(Int64, String) and not StopUpdateThread() , as well as didn't hit an error which caused it to terminate (i.e. HandleUpdateException(Exception) threw the exception further). Declaration public virtual bool IsUpdateThreadAlive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if the client has already been disposed. Declaration protected void EnsureOpen() | Improve this Doc View Source HandleUpdateException(Exception) Called when an exception is hit by the replication thread. The default implementation prints the full stacktrace to the InfoStream set in InfoStream , or the Default one. You can override to log the exception elsewhere. Declaration protected virtual void HandleUpdateException(Exception exception) Parameters Type Name Description System.Exception exception Remarks NOTE: If you override this method to throw the exception further, the replication thread will be terminated. The only way to restart it is to call StopUpdateThread() followed by StartUpdateThread(Int64, String) . | Improve this Doc View Source RequiredFiles(IDictionary<String, IList<RevisionFile>>) Returns the files required for replication. By default, this method returns all files that exist in the new revision, but not in the handler. Declaration protected virtual IDictionary<string, IList<RevisionFile>> RequiredFiles(IDictionary<string, IList<RevisionFile>> newRevisionFiles) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> newRevisionFiles Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source StartUpdateThread(Int64, String) Start the update thread with the specified interval in milliseconds. For debugging purposes, you can optionally set the name to set on Lucene.Net.Replicator.ReplicationClient.ReplicationThread.Name . If you pass null , a default name will be set. Declaration public virtual void StartUpdateThread(long intervalMillis, string threadName) Parameters Type Name Description System.Int64 intervalMillis System.String threadName Exceptions Type Condition System.InvalidOperationException if the thread has already been started | Improve this Doc View Source StopUpdateThread() Stop the update thread. If the update thread is not running, silently does nothing. This method returns after the update thread has stopped. Declaration public virtual void StopUpdateThread() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UpdateNow() Executes the update operation immediately, regardless if an update thread is running or not. Declaration public virtual void UpdateNow() Exceptions Type Condition System.IO.IOException Implements System.IDisposable"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.RevisionFile.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.RevisionFile.html",
    "title": "Class RevisionFile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RevisionFile Describes a file in a IRevision . A file has a source, which allows a single revision to contain files from multiple sources (e.g. multiple indexes). Inheritance System.Object RevisionFile Implements System.IEquatable < RevisionFile > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class RevisionFile : IEquatable<RevisionFile> Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source RevisionFile(String, Int64) Constructor with the given file name and optionally length. Declaration public RevisionFile(string fileName, long length = -1L) Parameters Type Name Description System.String fileName The name of the file System.Int64 length Optional, the length of the file. Properties | Improve this Doc View Source FileName Gets the name of the file. Declaration public string FileName { get; } Property Value Type Description System.String | Improve this Doc View Source Length Gets or sets the length of the file denoted by FileName . Declaration public long Length { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Equals(RevisionFile) Declaration public virtual bool Equals(RevisionFile other) Parameters Type Name Description RevisionFile other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IEquatable<T>"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionExpiredException.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.SessionExpiredException.html",
    "title": "Class SessionExpiredException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SessionExpiredException Exception indicating that a revision update session was expired due to lack of activity. Inheritance System.Object System.Exception System.IO.IOException SessionExpiredException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public class SessionExpiredException : IOException Remarks This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source SessionExpiredException() Declaration public SessionExpiredException() | Improve this Doc View Source SessionExpiredException(String) Declaration public SessionExpiredException(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SessionExpiredException(String, Exception) Declaration public SessionExpiredException(string message, Exception inner) Parameters Type Name Description System.String message System.Exception inner See Also DEFAULT_SESSION_EXPIRATION_THRESHOLD ExpirationThreshold"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.CodepointCountFilterFactory.html",
    "title": "Class CodepointCountFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CodepointCountFilterFactory Factory for CodepointCountFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CodepointCountFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CodepointCountFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CodepointCountFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source CodepointCountFilterFactory(IDictionary<String, String>) Creates a new CodepointCountFilterFactory Declaration public CodepointCountFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source MAX_KEY Declaration public const string MAX_KEY = \"max\" Field Value Type Description System.String | Improve this Doc View Source MIN_KEY Declaration public const string MIN_KEY = \"min\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Shingle.ShingleAnalyzerWrapper.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Shingle.ShingleAnalyzerWrapper.html",
    "title": "Class ShingleAnalyzerWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShingleAnalyzerWrapper A ShingleAnalyzerWrapper wraps a ShingleFilter around another Analyzer . A shingle is another name for a token based n-gram. Inheritance System.Object Analyzer AnalyzerWrapper ShingleAnalyzerWrapper Implements System.IDisposable Inherited Members AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Shingle Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ShingleAnalyzerWrapper : AnalyzerWrapper, IDisposable Constructors | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer) Parameters Type Name Description Analyzer defaultAnalyzer | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer, int maxShingleSize) Parameters Type Name Description Analyzer defaultAnalyzer System.Int32 maxShingleSize | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32, Int32) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer, int minShingleSize, int maxShingleSize) Parameters Type Name Description Analyzer defaultAnalyzer System.Int32 minShingleSize System.Int32 maxShingleSize | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32, Int32, String, Boolean, Boolean, String) Creates a new ShingleAnalyzerWrapper Declaration public ShingleAnalyzerWrapper(Analyzer delegate, int minShingleSize, int maxShingleSize, string tokenSeparator, bool outputUnigrams, bool outputUnigramsIfNoShingles, string fillerToken) Parameters Type Name Description Analyzer delegate Analyzer whose TokenStream is to be filtered System.Int32 minShingleSize Min shingle (token ngram) size System.Int32 maxShingleSize Max shingle size System.String tokenSeparator Used to separate input stream tokens in output shingles System.Boolean outputUnigrams Whether or not the filter shall pass the original tokens to the output stream System.Boolean outputUnigramsIfNoShingles Overrides the behavior of outputUnigrams==false for those times when no shingles are available (because there are fewer than minShingleSize tokens in the input stream)? Note that if outputUnigrams==true, then unigrams are always output, regardless of whether any shingles are available. System.String fillerToken filler token to use when positionIncrement is more than 1 | Improve this Doc View Source ShingleAnalyzerWrapper(LuceneVersion) Wraps StandardAnalyzer . Declaration public ShingleAnalyzerWrapper(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source ShingleAnalyzerWrapper(LuceneVersion, Int32, Int32) Wraps StandardAnalyzer . Declaration public ShingleAnalyzerWrapper(LuceneVersion matchVersion, int minShingleSize, int maxShingleSize) Parameters Type Name Description LuceneVersion matchVersion System.Int32 minShingleSize System.Int32 maxShingleSize Properties | Improve this Doc View Source FillerToken Declaration public string FillerToken { get; } Property Value Type Description System.String | Improve this Doc View Source MaxShingleSize The max shingle (token ngram) size Declaration public int MaxShingleSize { get; } Property Value Type Description System.Int32 The max shingle (token ngram) size | Improve this Doc View Source MinShingleSize The min shingle (token ngram) size Declaration public int MinShingleSize { get; } Property Value Type Description System.Int32 The min shingle (token ngram) size | Improve this Doc View Source OutputUnigrams Declaration public bool OutputUnigrams { get; } Property Value Type Description System.Boolean | Improve this Doc View Source OutputUnigramsIfNoShingles Declaration public bool OutputUnigramsIfNoShingles { get; } Property Value Type Description System.Boolean | Improve this Doc View Source TokenSeparator Declaration public string TokenSeparator { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override sealed Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer Overrides AnalyzerWrapper.GetWrappedAnalyzer(String) | Improve this Doc View Source WrapComponents(String, TokenStreamComponents) Declaration protected override TokenStreamComponents WrapComponents(string fieldName, TokenStreamComponents components) Parameters Type Name Description System.String fieldName TokenStreamComponents components Returns Type Description TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Shingle.ShingleFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Shingle.ShingleFilter.html",
    "title": "Class ShingleFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShingleFilter A ShingleFilter constructs shingles (token n-grams) from a token stream. In other words, it creates combinations of tokens as a single token. For example, the sentence \"please divide this sentence into shingles\" might be tokenized into shingles \"please divide\", \"divide this\", \"this sentence\", \"sentence into\", and \"into shingles\". This filter handles position increments > 1 by inserting filler tokens (tokens with termtext \"_\"). It does not handle a position increment of 0. Inheritance System.Object AttributeSource TokenStream TokenFilter ShingleFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Shingle Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ShingleFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ShingleFilter(TokenStream) Construct a ShingleFilter with default shingle size: 2. Declaration public ShingleFilter(TokenStream input) Parameters Type Name Description TokenStream input input stream | Improve this Doc View Source ShingleFilter(TokenStream, Int32) Constructs a ShingleFilter with the specified shingle size from the TokenStream input Declaration public ShingleFilter(TokenStream input, int maxShingleSize) Parameters Type Name Description TokenStream input input stream System.Int32 maxShingleSize maximum shingle size produced by the filter. | Improve this Doc View Source ShingleFilter(TokenStream, Int32, Int32) Constructs a ShingleFilter with the specified shingle size from the TokenStream input Declaration public ShingleFilter(TokenStream input, int minShingleSize, int maxShingleSize) Parameters Type Name Description TokenStream input input stream System.Int32 minShingleSize minimum shingle size produced by the filter. System.Int32 maxShingleSize maximum shingle size produced by the filter. | Improve this Doc View Source ShingleFilter(TokenStream, String) Construct a ShingleFilter with the specified token type for shingle tokens and the default shingle size: 2 Declaration public ShingleFilter(TokenStream input, string tokenType) Parameters Type Name Description TokenStream input input stream System.String tokenType token type for shingle tokens Fields | Improve this Doc View Source DEFAULT_FILLER_TOKEN filler token for when positionIncrement is more than 1 Declaration public const string DEFAULT_FILLER_TOKEN = \"_\" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_MAX_SHINGLE_SIZE default maximum shingle size is 2. Declaration public const int DEFAULT_MAX_SHINGLE_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_SHINGLE_SIZE default minimum shingle size is 2. Declaration public const int DEFAULT_MIN_SHINGLE_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_TOKEN_SEPARATOR The default string to use when joining adjacent tokens to form a shingle Declaration public const string DEFAULT_TOKEN_SEPARATOR = \" \" Field Value Type Description System.String | Improve this Doc View Source DEFAULT_TOKEN_TYPE default token type attribute value is \"shingle\" Declaration public const string DEFAULT_TOKEN_TYPE = \"shingle\" Field Value Type Description System.String Methods | Improve this Doc View Source End() Declaration public override void End() Overrides TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() | Improve this Doc View Source SetFillerToken(String) Sets the string to insert for each position at which there is no token (i.e., when position increment is greater than one). Declaration public void SetFillerToken(string fillerToken) Parameters Type Name Description System.String fillerToken string to insert at each position where there is no token | Improve this Doc View Source SetMaxShingleSize(Int32) Set the max shingle size (default: 2) Declaration public void SetMaxShingleSize(int maxShingleSize) Parameters Type Name Description System.Int32 maxShingleSize max size of output shingles | Improve this Doc View Source SetMinShingleSize(Int32) Set the min shingle size (default: 2). This method requires that the passed in minShingleSize is not greater than maxShingleSize, so make sure that maxShingleSize is set before calling this method. The unigram output option is independent of the min shingle size. Declaration public void SetMinShingleSize(int minShingleSize) Parameters Type Name Description System.Int32 minShingleSize min size of output shingles | Improve this Doc View Source SetOutputUnigrams(Boolean) Shall the output stream contain the input tokens (unigrams) as well as shingles? (default: true.) Declaration public void SetOutputUnigrams(bool outputUnigrams) Parameters Type Name Description System.Boolean outputUnigrams Whether or not the output stream shall contain the input tokens (unigrams) | Improve this Doc View Source SetOutputUnigramsIfNoShingles(Boolean) Shall we override the behavior of outputUnigrams==false for those times when no shingles are available (because there are fewer than minShingleSize tokens in the input stream)? (default: false.) Note that if outputUnigrams==true, then unigrams are always output, regardless of whether any shingles are available. Declaration public void SetOutputUnigramsIfNoShingles(bool outputUnigramsIfNoShingles) Parameters Type Name Description System.Boolean outputUnigramsIfNoShingles Whether or not to output a single unigram when no shingles are available. | Improve this Doc View Source SetTokenSeparator(String) Sets the string to use when joining adjacent tokens to form a shingle Declaration public void SetTokenSeparator(string tokenSeparator) Parameters Type Name Description System.String tokenSeparator used to separate input stream tokens in output shingles | Improve this Doc View Source SetTokenType(String) Set the type of the shingle tokens produced by this filter. (default: \"shingle\") Declaration public void SetTokenType(string tokenType) Parameters Type Name Description System.String tokenType token tokenType Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Shingle.ShingleFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Shingle.ShingleFilterFactory.html",
    "title": "Class ShingleFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ShingleFilterFactory Factory for ShingleFilter . <fieldType name=\"text_shingle\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ShingleFilterFactory\" minShingleSize=\"2\" maxShingleSize=\"2\" outputUnigrams=\"true\" outputUnigramsIfNoShingles=\"false\" tokenSeparator=\" \" fillerToken=\"_\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ShingleFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Shingle Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ShingleFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ShingleFilterFactory(IDictionary<String, String>) Creates a new ShingleFilterFactory Declaration public ShingleFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter.html",
    "title": "Class DateRecognizerSinkFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DateRecognizerSinkFilter Attempts to parse the ToString() as a Date using either the System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) or System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) methods. If a format is passed, System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) will be used, and the format must strictly match one of the specified formats as specified in the MSDN documentation. If the value is a Date, it will add it to the sink. Inheritance System.Object TeeSinkTokenFilter.SinkFilter DateRecognizerSinkFilter Inherited Members TeeSinkTokenFilter.SinkFilter.Reset() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Sinks Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DateRecognizerSinkFilter : TeeSinkTokenFilter.SinkFilter Constructors | Improve this Doc View Source DateRecognizerSinkFilter() Creates a new instance of DateRecognizerSinkFilter using the current culture and System.Globalization.DateTimeStyles.None . Loosely matches standard DateTime formats using System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter() | Improve this Doc View Source DateRecognizerSinkFilter(IFormatProvider) Creates a new instance of DateRecognizerSinkFilter using the supplied culture and System.Globalization.DateTimeStyles.None . Loosely matches standard DateTime formats using System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(IFormatProvider culture) Parameters Type Name Description System.IFormatProvider culture An object that supplies culture-specific format information | Improve this Doc View Source DateRecognizerSinkFilter(IFormatProvider, DateTimeStyles) Creates a new instance of DateRecognizerSinkFilter using the supplied culture and System.Globalization.DateTimeStyles . Loosely matches standard DateTime formats using System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(IFormatProvider culture, DateTimeStyles style) Parameters Type Name Description System.IFormatProvider culture An object that supplies culture-specific format information System.Globalization.DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is System.Globalization.DateTimeStyles.None | Improve this Doc View Source DateRecognizerSinkFilter(String) Creates a new instance of DateRecognizerSinkFilter using the current culture and System.Globalization.DateTimeStyles.None . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string format) Parameters Type Name Description System.String format The allowable format of the ToString() . If supplied, it must match the format of the date exactly to get a match. | Improve this Doc View Source DateRecognizerSinkFilter(String, IFormatProvider) Creates a new instance of DateRecognizerSinkFilter using the supplied format, culture and System.Globalization.DateTimeStyles.None . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string format, IFormatProvider culture) Parameters Type Name Description System.String format The allowable format of the ToString() . If supplied, it must match the format of the date exactly to get a match. System.IFormatProvider culture An object that supplies culture-specific format information | Improve this Doc View Source DateRecognizerSinkFilter(String, IFormatProvider, DateTimeStyles) Creates a new instance of DateRecognizerSinkFilter using the supplied format, culture and System.Globalization.DateTimeStyles . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string format, IFormatProvider culture, DateTimeStyles style) Parameters Type Name Description System.String format The allowable format of the ToString() . If supplied, it must match the format of the date exactly to get a match. System.IFormatProvider culture An object that supplies culture-specific format information System.Globalization.DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is System.Globalization.DateTimeStyles.None | Improve this Doc View Source DateRecognizerSinkFilter(String[]) Creates a new instance of DateRecognizerSinkFilter using the current culture and System.Globalization.DateTimeStyles.None . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string[] formats) Parameters Type Name Description System.String [] formats An array of allowable formats of the ToString() . If supplied, one of them must match the format of the date exactly to get a match. | Improve this Doc View Source DateRecognizerSinkFilter(String[], IFormatProvider) Creates a new instance of DateRecognizerSinkFilter using the supplied formats, culture and System.Globalization.DateTimeStyles.None . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string[] formats, IFormatProvider culture) Parameters Type Name Description System.String [] formats An array of allowable formats of the ToString() . If supplied, one of them must match the format of the date exactly to get a match. System.IFormatProvider culture An object that supplies culture-specific format information | Improve this Doc View Source DateRecognizerSinkFilter(String[], IFormatProvider, DateTimeStyles) Creates a new instance of DateRecognizerSinkFilter using the supplied formats, culture and System.Globalization.DateTimeStyles . Strictly matches the supplied DateTime formats using System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime@) . Declaration public DateRecognizerSinkFilter(string[] formats, IFormatProvider culture, DateTimeStyles style) Parameters Type Name Description System.String [] formats An array of allowable formats of the ToString() . If supplied, one of them must match the format of the date exactly to get a match. System.IFormatProvider culture An object that supplies culture-specific format information System.Globalization.DateTimeStyles style A bitwise combination of enumeration values that indicates the permitted format of s. A typical value to specify is System.Globalization.DateTimeStyles.None Fields | Improve this Doc View Source m_culture Declaration protected IFormatProvider m_culture Field Value Type Description System.IFormatProvider | Improve this Doc View Source m_formats Declaration protected string[] m_formats Field Value Type Description System.String [] | Improve this Doc View Source m_style Declaration protected DateTimeStyles m_style Field Value Type Description System.Globalization.DateTimeStyles | Improve this Doc View Source m_termAtt Declaration protected ICharTermAttribute m_termAtt Field Value Type Description ICharTermAttribute Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource)"
  },
  "api/Lucene.Net/Lucene.Net.Index.RandomAccessOrds.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.RandomAccessOrds.html",
    "title": "Class RandomAccessOrds | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomAccessOrds Extension of SortedSetDocValues that supports random access to the ordinals of a document. Operations via this API are independent of the iterator api ( NextOrd() ) and do not impact its state. Codecs can optionally extend this API if they support constant-time access to ordinals for the document. Inheritance System.Object SortedSetDocValues RandomAccessOrds Inherited Members SortedSetDocValues.NO_MORE_ORDS SortedSetDocValues.NextOrd() SortedSetDocValues.SetDocument(Int32) SortedSetDocValues.LookupOrd(Int64, BytesRef) SortedSetDocValues.ValueCount SortedSetDocValues.LookupTerm(BytesRef) SortedSetDocValues.GetTermsEnum() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class RandomAccessOrds : SortedSetDocValues Constructors | Improve this Doc View Source RandomAccessOrds() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected RandomAccessOrds() Methods | Improve this Doc View Source Cardinality() Returns the cardinality for the current document (previously set by SetDocument(Int32) . Declaration public abstract int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source OrdAt(Int32) Retrieve the ordinal for the current document (previously set by SetDocument(Int32) at the specified index. An index ranges from 0 to Cardinality()-1 . The first ordinal value is at index 0 , the next at index 1 , and so on, as for array indexing. Declaration public abstract long OrdAt(int index) Parameters Type Name Description System.Int32 index index of the ordinal for the document. Returns Type Description System.Int64 ordinal for the document at the specified index. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermsEnum.html",
    "title": "Class TermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsEnum Iterator to seek ( SeekCeil(BytesRef) , SeekExact(BytesRef) ) or step through ( Next() terms to obtain frequency information ( DocFreq ), DocsEnum or DocsAndPositionsEnum for the current term ( Docs(IBits, DocsEnum) ). Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than the one before it. The TermsEnum is unpositioned when you first obtain it and you must first successfully call Next() or one of the Seek methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsEnum FilterAtomicReader.FilterTermsEnum FilteredTermsEnum MultiTermsEnum FuzzyTermsEnum Implements IBytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class TermsEnum : IBytesRefIterator Constructors | Improve this Doc View Source TermsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermsEnum() Fields | Improve this Doc View Source EMPTY An empty TermsEnum for quickly returning an empty instance e.g. in MultiTermQuery Please note: this enum should be unmodifiable, but it is currently possible to add Attributes to it. This should not be a problem, as the enum is always empty and the existence of unused Attributes does not matter. Declaration public static readonly TermsEnum EMPTY Field Value Type Description TermsEnum Properties | Improve this Doc View Source Attributes Returns the related attributes. Declaration public virtual AttributeSource Attributes { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Comparer Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source DocFreq Returns the number of documents containing the current term. Do not call this when the enum is unpositioned. Declaration public abstract int DocFreq { get; } Property Value Type Description System.Int32 See Also END | Improve this Doc View Source Ord Returns ordinal position for current term. This is an optional property (the codec may throw System.NotSupportedException . Do not call this when the enum is unpositioned. Declaration public abstract long Ord { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Term Returns current term. Do not call this when the enum is unpositioned. Declaration public abstract BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term across all documents (the sum of the Freq for each doc that has this term). This will be -1 if the codec doesn't support this measure. Note that, like other term measures, this measure does not take deleted documents into account. Declaration public abstract long TotalTermFreq { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Docs(IBits, DocsEnum) Get DocsEnum for the current term. Do not call this when the enum is unpositioned. This method will not return null . Declaration public DocsEnum Docs(IBits liveDocs, DocsEnum reuse) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsEnum reuse Pass a prior DocsEnum for possible reuse Returns Type Description DocsEnum | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Get DocsEnum for the current term, with control over whether freqs are required. Do not call this when the enum is unpositioned. This method will not return null . Declaration public abstract DocsEnum Docs(IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsEnum reuse Pass a prior DocsEnum for possible reuse DocsFlags flags Specifies which optional per-document values you require; DocsFlags Returns Type Description DocsEnum See Also Docs(IBits, DocsEnum) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum) Get DocsAndPositionsEnum for the current term. Do not call this when the enum is unpositioned. This method will return null if positions were not indexed. Declaration public DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsAndPositionsEnum reuse Pass a prior DocsAndPositionsEnum for possible reuse Returns Type Description DocsAndPositionsEnum See Also DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Get DocsAndPositionsEnum for the current term, with control over whether offsets and payloads are required. Some codecs may be able to optimize their implementation when offsets and/or payloads are not required. Do not call this when the enum is unpositioned. This will return null if positions were not indexed. Declaration public abstract DocsAndPositionsEnum DocsAndPositions(IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits liveDocs Unset bits are documents that should not be returned DocsAndPositionsEnum reuse Pass a prior DocsAndPositionsEnum for possible reuse DocsAndPositionsFlags flags Specifies which optional per-position values you require; see DocsAndPositionsFlags . Returns Type Description DocsAndPositionsEnum | Improve this Doc View Source GetTermState() Expert: Returns the TermsEnum s internal state to position the TermsEnum without re-seeking the term dictionary. NOTE: A seek by GetTermState() might not capture the AttributeSource 's state. Callers must maintain the AttributeSource states separately Declaration public virtual TermState GetTermState() Returns Type Description TermState See Also TermState SeekExact(BytesRef, TermState) | Improve this Doc View Source Next() Declaration public abstract BytesRef Next() Returns Type Description BytesRef | Improve this Doc View Source SeekCeil(BytesRef) Seeks to the specified term, if it exists, or to the next (ceiling) term. Returns TermsEnum.SeekStatus to indicate whether exact term was found, a different term was found, or EOF was hit. The target term may be before or after the current term. If this returns END , the enum is unpositioned. Declaration public abstract TermsEnum.SeekStatus SeekCeil(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description TermsEnum.SeekStatus | Improve this Doc View Source SeekExact(BytesRef) Attempts to seek to the exact term, returning true if the term is found. If this returns false , the enum is unpositioned. For some codecs, SeekExact(BytesRef) may be substantially faster than SeekCeil(BytesRef) . Declaration public virtual bool SeekExact(BytesRef text) Parameters Type Name Description BytesRef text Returns Type Description System.Boolean | Improve this Doc View Source SeekExact(BytesRef, TermState) Expert: Seeks a specific position by TermState previously obtained from GetTermState() . Callers should maintain the TermState to use this method. Low-level implementations may position the TermsEnum without re-seeking the term dictionary. Seeking by TermState should only be used iff the state was obtained from the same TermsEnum instance. NOTE: Using this method with an incompatible TermState might leave this TermsEnum in undefined state. On a segment level TermState instances are compatible only iff the source and the target TermsEnum operate on the same field. If operating on segment level, TermState instances must not be used across segments. NOTE: A seek by TermState might not restore the AttributeSource 's state. AttributeSource states must be maintained separately if this method is used. Declaration public virtual void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term the term the TermState corresponds to TermState state the TermState | Improve this Doc View Source SeekExact(Int64) Seeks to the specified term by ordinal (position) as previously returned by Ord . The target ord may be before or after the current ord, and must be within bounds. Declaration public abstract void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Implements IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TieredMergePolicy.html",
    "title": "Class TieredMergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TieredMergePolicy Merges segments of approximately equal size, subject to an allowed number of segments per tier. This is similar to LogByteSizeMergePolicy , except this merge policy is able to merge non-adjacent segment, and separates how many segments are merged at once ( MaxMergeAtOnce ) from how many segments are allowed per tier ( SegmentsPerTier ). This merge policy also does not over-merge (i.e. cascade merges). For normal merging, this policy first computes a \"budget\" of how many segments are allowed to be in the index. If the index is over-budget, then the policy sorts segments by decreasing size (pro-rating by percent deletes), and then finds the least-cost merge. Merge cost is measured by a combination of the \"skew\" of the merge (size of largest segment divided by smallest segment), total merge size and percent deletes reclaimed, so that merges with lower skew, smaller size and those reclaiming more deletes, are favored. If a merge will produce a segment that's larger than MaxMergedSegmentMB , then the policy will merge fewer segments (down to 1 at once, if that one has deletions) to keep the segment size under budget. NOTE : This policy freely merges non-adjacent segments; if this is a problem, use LogMergePolicy . NOTE : This policy always merges by byte size of the segments, always pro-rates by percent deletes, and does not apply any maximum segment size during forceMerge (unlike LogByteSizeMergePolicy ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy TieredMergePolicy Implements System.IDisposable Inherited Members MergePolicy.DEFAULT_MAX_CFS_SEGMENT_SIZE MergePolicy.m_writer MergePolicy.m_noCFSRatio MergePolicy.m_maxCFSSegmentSize MergePolicy.Clone() MergePolicy.SetIndexWriter(IndexWriter) MergePolicy.Dispose() MergePolicy.UseCompoundFile(SegmentInfos, SegmentCommitInfo) MergePolicy.Size(SegmentCommitInfo) MergePolicy.IsMerged(SegmentInfos, SegmentCommitInfo) MergePolicy.NoCFSRatio MergePolicy.MaxCFSSegmentSizeMB System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class TieredMergePolicy : MergePolicy, IDisposable Constructors | Improve this Doc View Source TieredMergePolicy() Sole constructor, setting all settings to their defaults. Declaration public TieredMergePolicy() Fields | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default noCFSRatio. If a merge's size is >= 10% of the index, then we disable compound file for it. Declaration public static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double See Also NoCFSRatio Properties | Improve this Doc View Source FloorSegmentMB Segments smaller than this are \"rounded up\" to this size, ie treated as equal (floor) size for merge selection. this is to prevent frequent flushing of tiny segments from allowing a long tail in the index. Default is 2 MB. Declaration public virtual double FloorSegmentMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source ForceMergeDeletesPctAllowed When forceMergeDeletes is called, we only merge away a segment if its delete percentage is over this threshold. Default is 10%. Declaration public virtual double ForceMergeDeletesPctAllowed { get; set; } Property Value Type Description System.Double | Improve this Doc View Source MaxMergeAtOnce Gets or sets maximum number of segments to be merged at a time during \"normal\" merging. For explicit merging (eg, ForceMerge(Int32) or ForceMergeDeletes() was called), see MaxMergeAtOnceExplicit . Default is 10. Declaration public virtual int MaxMergeAtOnce { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxMergeAtOnceExplicit Gets or sets maximum number of segments to be merged at a time, during ForceMerge(Int32) or ForceMergeDeletes() . Default is 30. Declaration public virtual int MaxMergeAtOnceExplicit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxMergedSegmentMB Gets or sets maximum sized segment to produce during normal merging. This setting is approximate: the estimate of the merged segment size is made by summing sizes of to-be-merged segments (compensating for percent deleted docs). Default is 5 GB. Declaration public virtual double MaxMergedSegmentMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source ReclaimDeletesWeight Controls how aggressively merges that reclaim more deletions are favored. Higher values will more aggressively target merges that reclaim deletions, but be careful not to go so high that way too much merging takes place; a value of 3.0 is probably nearly too high. A value of 0.0 means deletions don't impact merge selection. Declaration public virtual double ReclaimDeletesWeight { get; set; } Property Value Type Description System.Double | Improve this Doc View Source SegmentsPerTier Gets or sets the allowed number of segments per tier. Smaller values mean more merging but fewer segments. NOTE : this value should be >= the MaxMergeAtOnce otherwise you'll force too much merging to occur. Default is 10.0. Declaration public virtual double SegmentsPerTier { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergePolicy.Dispose(Boolean) | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos infos) Parameters Type Name Description SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedDeletesMerges(SegmentInfos) | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Declaration public override MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos infos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos infos System.Int32 maxSegmentCount System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Declaration public override MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos infos) Parameters Type Name Description MergeTrigger mergeTrigger SegmentInfos infos Returns Type Description MergePolicy.MergeSpecification Overrides MergePolicy.FindMerges(MergeTrigger, SegmentInfos) | Improve this Doc View Source Score(IList<SegmentCommitInfo>, Boolean, Int64) Expert: scores one merge; subclasses can override. Declaration protected virtual TieredMergePolicy.MergeScore Score(IList<SegmentCommitInfo> candidate, bool hitTooLarge, long mergingBytes) Parameters Type Name Description System.Collections.Generic.IList < SegmentCommitInfo > candidate System.Boolean hitTooLarge System.Int64 mergingBytes Returns Type Description TieredMergePolicy.MergeScore | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.CommitFailException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.CommitFailException.html",
    "title": "Class TwoPhaseCommitTool.CommitFailException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TwoPhaseCommitTool.CommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to Commit() . Inheritance System.Object System.Exception System.IO.IOException TwoPhaseCommitTool.CommitFailException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CommitFailException : IOException Constructors | Improve this Doc View Source CommitFailException(Exception, ITwoPhaseCommit) Sole constructor. Declaration public CommitFailException(Exception cause, ITwoPhaseCommit obj) Parameters Type Name Description System.Exception cause ITwoPhaseCommit obj Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.DisjunctionMaxWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.DisjunctionMaxWeight.html",
    "title": "Class DisjunctionMaxQuery.DisjunctionMaxWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisjunctionMaxQuery.DisjunctionMaxWeight Expert: the Weight for DisjunctionMaxQuery, used to normalize, score and explain these queries. NOTE: this API and implementation is subject to change suddenly in the next release. Inheritance System.Object Weight DisjunctionMaxQuery.DisjunctionMaxWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax protected class DisjunctionMaxWeight : Weight Constructors | Improve this Doc View Source DisjunctionMaxWeight(DisjunctionMaxQuery, IndexSearcher) Construct the Weight for this Query searched by searcher . Recursively construct subquery weights. Declaration public DisjunctionMaxWeight(DisjunctionMaxQuery outerInstance, IndexSearcher searcher) Parameters Type Name Description DisjunctionMaxQuery outerInstance IndexSearcher searcher Fields | Improve this Doc View Source m_weights The Weight s for our subqueries, in 1-1 correspondence with disjuncts Declaration protected List<Weight> m_weights Field Value Type Description System.Collections.Generic.List < Weight > Properties | Improve this Doc View Source Query Return our associated DisjunctionMaxQuery Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Explain the score we computed for doc Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Create the scorer used to score our associated DisjunctionMaxQuery Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Compute the sub of squared weights of us applied to our subqueries. Used for normalization. Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Apply the computed normalization factor to our subqueries Declaration public override void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DisjunctionMaxQuery.html",
    "title": "Class DisjunctionMaxQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisjunctionMaxQuery A query that generates the union of documents produced by its subqueries, and that scores each document with the maximum score for that document as produced by any subquery, plus a tie breaking increment for any additional matching subqueries. This is useful when searching for a word in multiple fields with different boost factors (so that the fields cannot be combined equivalently into a single search field). We want the primary score to be the one associated with the highest boost, not the sum of the field scores (as BooleanQuery would give). If the query is \"albino elephant\" this ensures that \"albino\" matching one field and \"elephant\" matching another gets a higher score than \"albino\" matching both fields. To get this result, use both BooleanQuery and DisjunctionMaxQuery : for each term a DisjunctionMaxQuery searches for it in each field, while the set of these DisjunctionMaxQuery 's is combined into a BooleanQuery . The tie breaker capability allows results that include the same term in multiple fields to be judged better than results that include this term in only the best of those multiple fields, without confusing this with the better case of two different terms in the multiple fields. Collection initializer note: To create and populate a DisjunctionMaxQuery in a single statement, you can use the following example as a guide: var disjunctionMaxQuery = new DisjunctionMaxQuery(0.1f) { new TermQuery(new Term(\"field1\", \"albino\")), new TermQuery(new Term(\"field2\", \"elephant\")) }; Inheritance System.Object Query DisjunctionMaxQuery Implements System.Collections.Generic.IEnumerable < Query > System.Collections.IEnumerable Inherited Members Query.Boost Query.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class DisjunctionMaxQuery : Query, IEnumerable<Query>, IEnumerable Constructors | Improve this Doc View Source DisjunctionMaxQuery(ICollection<Query>, Single) Creates a new DisjunctionMaxQuery Declaration public DisjunctionMaxQuery(ICollection<Query> disjuncts, float tieBreakerMultiplier) Parameters Type Name Description System.Collections.Generic.ICollection < Query > disjuncts A ICollection{Query} of all the disjuncts to add System.Single tieBreakerMultiplier The weight to give to each matching non-maximum disjunct | Improve this Doc View Source DisjunctionMaxQuery(Single) Creates a new empty DisjunctionMaxQuery . Use Add(Query) to add the subqueries. Declaration public DisjunctionMaxQuery(float tieBreakerMultiplier) Parameters Type Name Description System.Single tieBreakerMultiplier The score of each non-maximum disjunct for a document is multiplied by this weight and added into the final score. If non-zero, the value should be small, on the order of 0.1, which says that 10 occurrences of word in a lower-scored field that is also in a higher scored field is just as good as a unique word in the lower scored field (i.e., one that is not in any higher scored field). Properties | Improve this Doc View Source Disjuncts Declaration public virtual IList<Query> Disjuncts { get; } Property Value Type Description System.Collections.Generic.IList < Query > The disjuncts. | Improve this Doc View Source TieBreakerMultiplier Declaration public virtual float TieBreakerMultiplier { get; } Property Value Type Description System.Single Tie breaker value for multiple matches. Methods | Improve this Doc View Source Add(Query) Add a subquery to this disjunction Declaration public virtual void Add(Query query) Parameters Type Name Description Query query The disjunct added | Improve this Doc View Source Add(ICollection<Query>) Add a collection of disjuncts to this disjunction via IEnumerable{Query} Declaration public virtual void Add(ICollection<Query> disjuncts) Parameters Type Name Description System.Collections.Generic.ICollection < Query > disjuncts A collection of queries to add as disjuncts. | Improve this Doc View Source Clone() Create a shallow copy of us -- used in rewriting if necessary Declaration public override object Clone() Returns Type Description System.Object A copy of us (but reuse, don't copy, our subqueries) Overrides Query.Clone() | Improve this Doc View Source CreateWeight(IndexSearcher) Create the Weight used to score us Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Return true if we represent the same query as o Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Another object Returns Type Description System.Boolean true if o is a DisjunctionMaxQuery with the same boost and the same subqueries, in the same order, as us Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) Exceptions Type Condition System.InvalidOperationException If this query is not yet rewritten | Improve this Doc View Source GetEnumerator() Declaration public virtual IEnumerator<Query> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < Query > An IEnumerator{Query} over the disjuncts | Improve this Doc View Source GetHashCode() Compute a hash code for hashing us Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Optimize our representation and our subqueries representations Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader The IndexReader we query Returns Type Description Query An optimized copy of us (which may not be a copy if there is nothing to optimize) Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prettyprint us. Declaration public override string ToString(string field) Parameters Type Name Description System.String field The field to which we are applied Returns Type Description System.String A string that shows what we do, of the form \"(disjunct1 | disjunct2 | ... | disjunctn)^boost\" Overrides Query.ToString(String) Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRangeFilter.html",
    "title": "Class DocTermOrdsRangeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermOrdsRangeFilter A range filter built on top of a cached multi-valued term field (in IFieldCache ). Like FieldCacheRangeFilter , this is just a specialized range query versus using a TermRangeQuery with DocTermOrdsRewriteMethod : it will only do two ordinal to term lookups. Inheritance System.Object Filter DocTermOrdsRangeFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class DocTermOrdsRangeFilter : Filter Properties | Improve this Doc View Source Field Returns the field name for this filter Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerVal Returns the lower value of this range filter Declaration public virtual BytesRef LowerVal { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperVal Returns the upper value of this range filter Declaration public virtual BytesRef UpperVal { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) This method is implemented for each data type Declaration public abstract override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source NewBytesRefRange(String, BytesRef, BytesRef, Boolean, Boolean) Creates a BytesRef range filter using GetTermsIndex(AtomicReader, String, Single) . This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null . Declaration public static DocTermOrdsRangeFilter NewBytesRefRange(string field, BytesRef lowerVal, BytesRef upperVal, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field BytesRef lowerVal BytesRef upperVal System.Boolean includeLower System.Boolean includeUpper Returns Type Description DocTermOrdsRangeFilter | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.DocTermOrdsRewriteMethod.html",
    "title": "Class DocTermOrdsRewriteMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermOrdsRewriteMethod Rewrites MultiTermQuery s into a filter, using DocTermOrds for term enumeration. This can be used to perform these queries against an unindexed docvalues field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MultiTermQuery.RewriteMethod DocTermOrdsRewriteMethod Inherited Members MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class DocTermOrdsRewriteMethod : MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public override Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Overrides MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Stempel.StempelPolishStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Stempel.StempelPolishStemFilterFactory.html",
    "title": "Class StempelPolishStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StempelPolishStemFilterFactory Factory for StempelFilter using a Polish stemming table. Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StempelPolishStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Stempel Assembly : Lucene.Net.Analysis.Stempel.dll Syntax public class StempelPolishStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source StempelPolishStemFilterFactory(IDictionary<String, String>) Creates a new StempelPolishStemFilterFactory Declaration public StempelPolishStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectPostingsFormat.html",
    "title": "Class DirectPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectPostingsFormat Wraps Lucene41PostingsFormat format for on-disk storage, but then at read time loads and stores all terms & postings directly in RAM as byte[], int[]. WARNING : This is exceptionally RAM intensive: it makes no effort to compress the postings data, storing terms as separate byte[] and postings as separate int[], but as a result it gives substantial increase in search performance. This postings format supports Ord and SeekExact(Int64) . Because this holds all term bytes as a single byte[], you cannot have more than 2.1GB worth of term bytes in a single segment. @lucene.experimental Inheritance System.Object PostingsFormat DirectPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"Direct\")] public sealed class DirectPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source DirectPostingsFormat() Declaration public DirectPostingsFormat() | Improve this Doc View Source DirectPostingsFormat(Int32, Int32) minSkipCount is how many terms in a row must have the same prefix before we put a skip pointer down. Terms with docFreq less than or equal lowFreqCutoff will use a single int[] to hold all docs, freqs, position and offsets; terms with higher docFreq will use separate arrays. Declaration public DirectPostingsFormat(int minSkipCount, int lowFreqCutoff) Parameters Type Name Description System.Int32 minSkipCount System.Int32 lowFreqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPostingsFormat.html",
    "title": "Class FSTOrdPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTOrdPostingsFormat FSTOrd term dict + Lucene41PBF Inheritance System.Object PostingsFormat FSTOrdPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"FSTOrd41\")] public sealed class FSTOrdPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTOrdPostingsFormat() Declaration public FSTOrdPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdPulsing41PostingsFormat.html",
    "title": "Class FSTOrdPulsing41PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTOrdPulsing41PostingsFormat FSTOrd + Pulsing41 @lucene.experimental Inheritance System.Object PostingsFormat FSTOrdPulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"FSTOrdPulsing41\")] public class FSTOrdPulsing41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTOrdPulsing41PostingsFormat() Declaration public FSTOrdPulsing41PostingsFormat() | Improve this Doc View Source FSTOrdPulsing41PostingsFormat(Int32) Declaration public FSTOrdPulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsReader.html",
    "title": "Class FSTOrdTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTOrdTermsReader FST-based terms dictionary reader. The FST index maps each term and its ord, and during seek the ord is used fetch metadata from a single block. The term dictionary is fully memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FSTOrdTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTOrdTermsReader : FieldsProducer, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source FSTOrdTermsReader(SegmentReadState, PostingsReaderBase) Declaration public FSTOrdTermsReader(SegmentReadState state, PostingsReaderBase postingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase postingsReader Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTOrdTermsWriter.html",
    "title": "Class FSTOrdTermsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTOrdTermsWriter FST-based term dict, using ord as FST output. The FST holds the mapping between <term, ord>, and term's metadata is delta encoded into a single byte block. Typically the byte block consists of four parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information customized by postings base. single-level skip list to speed up metadata decoding by ord. Files: .tix : Term Index .tbk : Term Block Term Index The .tix contains a list of FSTs, one for each field. The FST maps a term to its corresponding order in current field. TermIndex(.tix) --> Header, TermFST NumFields , Footer TermFST --> FST<T> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Since terms are already sorted before writing to Term Block , their ords can directly used to seek term metadata from term block. Term Block The .tbk contains all the statistics and metadata for terms, along with field summary (e.g. per-field data like number of documents in current field). For each field, there are four blocks: statistics bytes block: contains term statistics; metadata longs block: delta-encodes monotonic part of metadata; metadata bytes block: encodes other parts of metadata; skip block: contains skip data, to speed up metadata seeking and decoding File Format: TermBlock(.tbk) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, DataBlock > NumFields , Footer DataBlock --> StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, SkipBlock, StatsBlock, MetaLongsBlock, MetaBytesBlock SkipBlock --> < StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipDelta LongsSize > NumTerms StatsBlock --> < DocFreq[Same?], (TotalTermFreq-DocFreq) ? > NumTerms MetaLongsBlock --> < LongDelta LongsSize , BytesSize > NumTerms MetaBytesBlock --> Byte MetaBytesBlockLength Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) NumFields, FieldNumber, DocCount, DocFreq, LongsSize, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) NumTerms, SumTotalTermFreq, SumDocFreq, StatsBlockLength, MetaLongsBlockLength, MetaBytesBlockLength, StatsFPDelta, MetaLongsSkipFPDelta, MetaBytesSkipFPDelta, MetaLongsSkipStart, TotalTermFreq, LongDelta,--> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The format of PostingsHeader and MetaBytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). During initialization the reader will load all the blocks into memory. SkipBlock will be decoded, so that during seek term dict can lookup file pointers directly. StatsFPDelta, MetaLongsSkipFPDelta, etc. are file offset for every SkipInterval's term. MetaLongsSkipDelta is the difference from previous one, which indicates the value of preceding metadata longs for every SkipInterval's term. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. Usually these two values are the same for long tail terms, therefore one bit is stole from DocFreq to check this case, so that encoding of TotalTermFreq may be omitted. @lucene.experimental Inheritance System.Object FieldsConsumer FSTOrdTermsWriter Implements System.IDisposable Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTOrdTermsWriter : FieldsConsumer, IDisposable Constructors | Improve this Doc View Source FSTOrdTermsWriter(SegmentWriteState, PostingsWriterBase) Declaration public FSTOrdTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source SKIP_INTERVAL Declaration public const int SKIP_INTERVAL = 8 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CHECKSUM Declaration public const int TERMS_VERSION_CHECKSUM = 1 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CURRENT Declaration public const int TERMS_VERSION_CURRENT = 1 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_START Declaration public const int TERMS_VERSION_START = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPostingsFormat.html",
    "title": "Class FSTPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTPostingsFormat FST term dict + Lucene41PBF Inheritance System.Object PostingsFormat FSTPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"FST41\")] public sealed class FSTPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTPostingsFormat() Declaration public FSTPostingsFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTPulsing41PostingsFormat.html",
    "title": "Class FSTPulsing41PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTPulsing41PostingsFormat FST + Pulsing41, test only, since FST does no delta encoding here! @lucene.experimental Inheritance System.Object PostingsFormat FSTPulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ToString() PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"FSTPulsing41\")] public class FSTPulsing41PostingsFormat : PostingsFormat Constructors | Improve this Doc View Source FSTPulsing41PostingsFormat() Declaration public FSTPulsing41PostingsFormat() | Improve this Doc View Source FSTPulsing41PostingsFormat(Int32) Declaration public FSTPulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsReader.html",
    "title": "Class FSTTermsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTTermsReader FST-based terms dictionary reader. The FST directly maps each term and its metadata, it is memory resident. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Fields FieldsProducer FSTTermsReader Implements System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable System.IDisposable Inherited Members FieldsProducer.Dispose() Fields.IEnumerable.GetEnumerator() Fields.UniqueTermCount Fields.EMPTY_ARRAY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTTermsReader : FieldsProducer, IEnumerable<string>, IEnumerable, IDisposable Constructors | Improve this Doc View Source FSTTermsReader(SegmentReadState, PostingsReaderBase) Declaration public FSTTermsReader(SegmentReadState state, PostingsReaderBase postingsReader) Parameters Type Name Description SegmentReadState state PostingsReaderBase postingsReader Properties | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides Fields.Count Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides FieldsProducer.CheckIntegrity() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsProducer.Dispose(Boolean) | Improve this Doc View Source GetEnumerator() Declaration public override IEnumerator<string> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Overrides Fields.GetEnumerator() | Improve this Doc View Source GetTerms(String) Declaration public override Terms GetTerms(string field) Parameters Type Name Description System.String field Returns Type Description Terms Overrides Fields.GetTerms(String) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides FieldsProducer.RamBytesUsed() Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.FSTTermsWriter.html",
    "title": "Class FSTTermsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTTermsWriter FST-based term dict, using metadata as FST output. The FST directly holds the mapping between <term, metadata>. Term metadata consists of three parts: term statistics: docFreq, totalTermFreq; monotonic long[], e.g. the pointer to the postings list for that term; generic byte[], e.g. other information need by postings reader. File: .tst : Term Dictionary Term Dictionary The .tst contains a list of FSTs, one for each field. The FST maps a term to its corresponding statistics (e.g. docfreq) and metadata (e.g. information for postings list reader like file pointer to postings list). Typically the metadata is separated into two parts: Monotonical long array: Some metadata will always be ascending in order with the corresponding term. This part is used by FST to share outputs between arcs. Generic byte array: Used to store non-monotonic metadata. File format: TermsDict(.tst) --> Header, PostingsHeader , FieldSummary, DirOffset FieldSummary --> NumFields, <FieldNumber, NumTerms, SumTotalTermFreq?, SumDocFreq, DocCount, LongsSize, TermFST > NumFields TermFST TermData TermData --> Flag, BytesSize?, LongDelta LongsSize ?, Byte BytesSize ?, < DocFreq[Same?], (TotalTermFreq-DocFreq) > ? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) ) DocFreq, LongsSize, BytesSize, NumFields, FieldNumber, DocCount --> VInt ( WriteVInt32(Int32) ) TotalTermFreq, NumTerms, SumTotalTermFreq, SumDocFreq, LongDelta --> VLong ( WriteVInt64(Int64) ) Notes: The format of PostingsHeader and generic meta bytes are customized by the specific postings implementation: they contain arbitrary per-file data (such as parameters or versioning information), and per-term data (non-monotonic ones like pulsed postings data). The format of TermData is determined by FST, typically monotonic metadata will be dense around shallow arcs, while in deeper arcs only generic bytes and term statistics exist. The byte Flag is used to indicate which part of metadata exists on current arc. Specially the monotonic part is omitted when it is an array of 0s. Since LongsSize is per-field fixed, it is only written once in field summary. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer FSTTermsWriter Implements System.IDisposable Inherited Members FieldsConsumer.Dispose() FieldsConsumer.Merge(MergeState, Fields) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax public class FSTTermsWriter : FieldsConsumer, IDisposable Constructors | Improve this Doc View Source FSTTermsWriter(SegmentWriteState, PostingsWriterBase) Declaration public FSTTermsWriter(SegmentWriteState state, PostingsWriterBase postingsWriter) Parameters Type Name Description SegmentWriteState state PostingsWriterBase postingsWriter Fields | Improve this Doc View Source TERMS_VERSION_CHECKSUM Declaration public const int TERMS_VERSION_CHECKSUM = 1 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_CURRENT Declaration public const int TERMS_VERSION_CURRENT = 1 Field Value Type Description System.Int32 | Improve this Doc View Source TERMS_VERSION_START Declaration public const int TERMS_VERSION_START = 0 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddField(FieldInfo) Declaration public override TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer Overrides FieldsConsumer.AddField(FieldInfo) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides FieldsConsumer.Dispose(Boolean) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryDocValuesFormat.html",
    "title": "Class MemoryDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MemoryDocValuesFormat In-memory docvalues format. Inheritance System.Object DocValuesFormat MemoryDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [DocValuesFormatName(\"Memory\")] public class MemoryDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source MemoryDocValuesFormat() Calls MemoryDocValuesFormat(PackedInts.DEFAULT) ( MemoryDocValuesFormat(Single) ) Declaration public MemoryDocValuesFormat() | Improve this Doc View Source MemoryDocValuesFormat(Single) Creates a new MemoryDocValuesFormat with the specified acceptableOverheadRatio for NumericDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public MemoryDocValuesFormat(float acceptableOverheadRatio) Parameters Type Name Description System.Single acceptableOverheadRatio Compression parameter for numerics. Currently this is only used when the number of unique values is small. Fields | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.html",
    "title": "Class PathQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PathQueryNode A PathQueryNode is used to store queries like /company/USA/California /product/shoes/brown. QueryText are objects that contain the text, begin position and end position in the query. Example how the text parser creates these objects: IList<PathQueryNode.QueryText> values = new List<PathQueryNode.QueryText>(); values.Add(new PathQueryNode.QueryText(\"company\", 1, 7)); values.Add(new PathQueryNode.QueryText(\"USA\", 9, 12)); values.Add(new PathQueryNode.QueryText(\"California\", 14, 23)); QueryNode q = new PathQueryNode(values); Inheritance System.Object QueryNode PathQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PathQueryNode : QueryNode, IQueryNode Constructors | Improve this Doc View Source PathQueryNode(IList<PathQueryNode.QueryText>) Declaration public PathQueryNode(IList<PathQueryNode.QueryText> pathElements) Parameters Type Name Description System.Collections.Generic.IList < PathQueryNode.QueryText > pathElements List of QueryText objects Properties | Improve this Doc View Source PathElements Gets or Sets the a List with all QueryText elements Declaration public virtual IList<PathQueryNode.QueryText> PathElements { get; set; } Property Value Type Description System.Collections.Generic.IList < PathQueryNode.QueryText > QueryText List size Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFirstPathElement() Returns the System.String value of a specific QueryText element Declaration public virtual string GetFirstPathElement() Returns Type Description System.String The System.String for a specific QueryText element | Improve this Doc View Source GetPathElement(Int32) Returns the a specific QueryText element Declaration public virtual PathQueryNode.QueryText GetPathElement(int index) Parameters Type Name Description System.Int32 index Returns Type Description PathQueryNode.QueryText QueryText List size | Improve this Doc View Source GetPathElements(Int32) Returns a List QueryText element from position startIndex Declaration public virtual IList<PathQueryNode.QueryText> GetPathElements(int startIndex) Parameters Type Name Description System.Int32 startIndex Returns Type Description System.Collections.Generic.IList < PathQueryNode.QueryText > a List QueryText element from position startIndex | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PhraseSlopQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PhraseSlopQueryNode.html",
    "title": "Class PhraseSlopQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhraseSlopQueryNode Query node for PhraseQuery 's slop factor. Inheritance System.Object QueryNode PhraseSlopQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseSlopQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source PhraseSlopQueryNode(IQueryNode, Int32) Declaration public PhraseSlopQueryNode(IQueryNode query, int value) Parameters Type Name Description IQueryNode query System.Int32 value Exceptions Type Condition QueryNodeError throw in overridden method to disallow Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Value Declaration public virtual int Value { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.html",
    "title": "Class ProximityQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ProximityQueryNode A ProximityQueryNode represents a query where the terms should meet specific distance conditions. (a b c) WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] (\"a\" \"b\" \"c\") WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] TODO: Add this to the future standard Lucene parser/processor/builder Inheritance System.Object QueryNode BooleanQueryNode ProximityQueryNode Implements IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ProximityQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source ProximityQueryNode(IList<IQueryNode>, String, ProximityQueryNode.Type, Boolean) Declaration public ProximityQueryNode(IList<IQueryNode> clauses, string field, ProximityQueryNode.Type type, bool inorder) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses QueryNode children System.String field field name ProximityQueryNode.Type type type of proximity query System.Boolean inorder true, if the tokens should be matched in the order of the clauses | Improve this Doc View Source ProximityQueryNode(IList<IQueryNode>, String, ProximityQueryNode.Type, Int32, Boolean) Declaration public ProximityQueryNode(IList<IQueryNode> clauses, string field, ProximityQueryNode.Type type, int distance, bool inorder) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses QueryNode children System.String field field name ProximityQueryNode.Type type type of proximity query System.Int32 distance positive integer that specifies the distance System.Boolean inorder true, if the tokens should be matched in the order of the clauses Properties | Improve this Doc View Source Distance Gets the distance Declaration public virtual int Distance { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Gets or Sets the field. Returns null if the field was not specified in the query string. Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsInOrder terms must be matched in the specified order Declaration public virtual bool IsInOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source ProximityType Declaration public virtual ProximityQueryNode.Type ProximityType { get; } Property Value Type Description ProximityQueryNode.Type Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides BooleanQueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() Gets the field as a string. Returns null if the field was not specified in the query string. Declaration public virtual string GetFieldAsString() Returns Type Description System.String | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BooleanQueryNode.ToString() Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html",
    "title": "Class QueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNode A QueryNode is the default implementation of the interface IQueryNode Inheritance System.Object QueryNode BooleanQueryNode BoostQueryNode DeletedQueryNode FieldQueryNode GroupQueryNode MatchAllDocsQueryNode ModifierQueryNode OpaqueQueryNode PathQueryNode PhraseSlopQueryNode SlopQueryNode TokenizedPhraseQueryNode AbstractRangeQueryNode<T> MultiPhraseQueryNode NumericQueryNode RegexpQueryNode Implements IQueryNode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryNode : IQueryNode Fields | Improve this Doc View Source m_toQueryStringIgnoreFields If set to true the the method toQueryString will not write field names Declaration protected bool m_toQueryStringIgnoreFields Field Value Type Description System.Boolean | Improve this Doc View Source PLAINTEXT_FIELD_NAME index default field Declaration public static readonly string PLAINTEXT_FIELD_NAME Field Value Type Description System.String Properties | Improve this Doc View Source IsLeaf Declaration public virtual bool IsLeaf { get; protected set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsRoot Declaration protected virtual bool IsRoot { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parent Declaration public virtual IQueryNode Parent { get; } Property Value Type Description IQueryNode | Improve this Doc View Source TagMap Gets a map containing all tags attached to this query node. Declaration public virtual IDictionary<string, object> TagMap { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > Methods | Improve this Doc View Source Add(IQueryNode) Declaration public void Add(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source Add(IList<IQueryNode>) Declaration public void Add(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children | Improve this Doc View Source Allocate() Declaration protected virtual void Allocate() | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source CloneTree() Declaration public virtual IQueryNode CloneTree() Returns Type Description IQueryNode | Improve this Doc View Source ContainsTag(String) verify if a node contains a tag Declaration public virtual bool ContainsTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Boolean | Improve this Doc View Source GetChildren() a List for QueryNode object. Returns null, for nodes that do not contain children. All leaf Nodes return null. Declaration public IList<IQueryNode> GetChildren() Returns Type Description System.Collections.Generic.IList < IQueryNode > | Improve this Doc View Source GetTag(String) Declaration public virtual object GetTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Object | Improve this Doc View Source IsDefaultField(String) This method is use toQueryString to detect if fld is the default field Declaration protected virtual bool IsDefaultField(string fld) Parameters Type Name Description System.String fld field name Returns Type Description System.Boolean true if fld is the default field | Improve this Doc View Source RemoveFromParent() Declaration public virtual void RemoveFromParent() | Improve this Doc View Source Set(IList<IQueryNode>) Declaration public void Set(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children | Improve this Doc View Source SetTag(String, Object) Declaration public virtual void SetTag(string tagName, object value) Parameters Type Name Description System.String tagName System.Object value | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public abstract string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String | Improve this Doc View Source ToString() Every implementation of this class should return pseudo xml like this: For FieldQueryNode: <field start='1' end='2' field='subject' text='foo'/> Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also ToString () | Improve this Doc View Source UnsetTag(String) Declaration public virtual void UnsetTag(string tagName) Parameters Type Name Description System.String tagName Implements IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QuotedFieldQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.QuotedFieldQueryNode.html",
    "title": "Class QuotedFieldQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QuotedFieldQueryNode A QuotedFieldQueryNode represents phrase query. Example: \"life is great\" Inheritance System.Object QueryNode FieldQueryNode QuotedFieldQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class QuotedFieldQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source QuotedFieldQueryNode(String, ICharSequence, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source QuotedFieldQueryNode(String, String, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source QuotedFieldQueryNode(String, StringBuilder, Int32, Int32) Declaration public QuotedFieldQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.SlopQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.SlopQueryNode.html",
    "title": "Class SlopQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SlopQueryNode A SlopQueryNode represents phrase query with a slop. From Lucene FAQ: Is there a way to use a proximity operator (like near or within) with Lucene? There is a variable called slop that allows you to perform NEAR/WITHIN-like queries. By default, slop is set to 0 so that only exact phrases will match. When using TextParser you can use this syntax to specify the slop: \"doug cutting\"~2 will find documents that contain \"doug cutting\" as well as ones that contain \"cutting doug\". Inheritance System.Object QueryNode SlopQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class SlopQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source SlopQueryNode(IQueryNode, Int32) Declaration public SlopQueryNode(IQueryNode query, int value) Parameters Type Name Description IQueryNode query QueryNode Tree with the phrase System.Int32 value slop value Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Value Declaration public virtual int Value { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetChild() Declaration public virtual IQueryNode GetChild() Returns Type Description IQueryNode | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldDoc.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldDoc.html",
    "title": "Class FieldDoc | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldDoc Expert: A ScoreDoc which also contains information about how to sort the referenced document. In addition to the document number and score, this object contains an array of values for the document from the field(s) used to sort. For example, if the sort criteria was to sort by fields \"a\", \"b\" then \"c\", the fields object array will have three elements, corresponding respectively to the term values for the document in fields \"a\", \"b\" and \"c\". The class of each element in the array will be either System.Int32 , System.Single or System.String depending on the type of values in the terms of each field. Created: Feb 11, 2004 1:23:38 PM @since lucene 1.4 Inheritance System.Object ScoreDoc FieldDoc Inherited Members ScoreDoc.Score ScoreDoc.Doc ScoreDoc.ShardIndex System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FieldDoc : ScoreDoc Constructors | Improve this Doc View Source FieldDoc(Int32, Single) Expert: Creates one of these objects with empty sort information. Declaration public FieldDoc(int doc, float score) Parameters Type Name Description System.Int32 doc System.Single score | Improve this Doc View Source FieldDoc(Int32, Single, Object[]) Expert: Creates one of these objects with the given sort information. Declaration public FieldDoc(int doc, float score, object[] fields) Parameters Type Name Description System.Int32 doc System.Single score System.Object [] fields | Improve this Doc View Source FieldDoc(Int32, Single, Object[], Int32) Expert: Creates one of these objects with the given sort information. Declaration public FieldDoc(int doc, float score, object[] fields, int shardIndex) Parameters Type Name Description System.Int32 doc System.Single score System.Object [] fields System.Int32 shardIndex Properties | Improve this Doc View Source Fields Expert: The values which are used to sort the referenced document. The order of these will match the original sort criteria given by a Sort object. Each Object will have been returned from the Item[Int32] method corresponding FieldComparer used to sort this field. Declaration public object[] Fields { get; set; } Property Value Type Description System.Object [] See Also Sort Search(Query, Filter, Int32, Sort) Methods | Improve this Doc View Source ToString() A convenience method for debugging. Declaration public override string ToString() Returns Type Description System.String Overrides ScoreDoc.ToString() Extension Methods Number.IsNumber(Object) See Also ScoreDoc TopFieldDocs"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldValueFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldValueFilter.html",
    "title": "Class FieldValueFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldValueFilter A Filter that accepts all documents that have one or more values in a given field. this Filter request IBits from the IFieldCache and build the bits if not present. Inheritance System.Object Filter FieldValueFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FieldValueFilter : Filter Constructors | Improve this Doc View Source FieldValueFilter(String) Creates a new FieldValueFilter Declaration public FieldValueFilter(string field) Parameters Type Name Description System.String field The field to filter | Improve this Doc View Source FieldValueFilter(String, Boolean) Creates a new FieldValueFilter Declaration public FieldValueFilter(string field, bool negate) Parameters Type Name Description System.String field The field to filter System.Boolean negate If true all documents with no value in the given field are accepted. Properties | Improve this Doc View Source Field Returns the field this filter is applied on. Declaration public virtual string Field { get; } Property Value Type Description System.String The field this filter is applied on. | Improve this Doc View Source Negate Returns true if this filter is negated, otherwise false Declaration public virtual bool Negate { get; } Property Value Type Description System.Boolean true if this filter is negated, otherwise false Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FilteredQuery.html",
    "title": "Class FilteredQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredQuery A query that applies a filter to the results of another query. Note: the bits are retrieved from the filter each time this query is used in a search - use a CachingWrapperFilter to avoid regenerating the bits every time. @since 1.4 Inheritance System.Object Query FilteredQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FilteredQuery : Query Constructors | Improve this Doc View Source FilteredQuery(Query, Filter) Constructs a new query which applies a filter to the results of the original query. GetDocIdSet(AtomicReaderContext, IBits) will be called every time this query is used in a search. Declaration public FilteredQuery(Query query, Filter filter) Parameters Type Name Description Query query Query to be filtered, cannot be null . Filter filter Filter to apply to query results, cannot be null . | Improve this Doc View Source FilteredQuery(Query, Filter, FilteredQuery.FilterStrategy) Expert: Constructs a new query which applies a filter to the results of the original query. GetDocIdSet(AtomicReaderContext, IBits) will be called every time this query is used in a search. Declaration public FilteredQuery(Query query, Filter filter, FilteredQuery.FilterStrategy strategy) Parameters Type Name Description Query query Query to be filtered, cannot be null . Filter filter Filter to apply to query results, cannot be null . FilteredQuery.FilterStrategy strategy A filter strategy used to create a filtered scorer. See Also FilteredQuery.FilterStrategy Fields | Improve this Doc View Source LEAP_FROG_FILTER_FIRST_STRATEGY A filter strategy that uses a \"leap-frog\" approach (also called \"zig-zag join\"). The scorer and the filter take turns trying to advance to each other's next matching document, often jumping past the target document. When both land on the same document, it's collected. Note: this strategy uses the filter to lead the iteration. Declaration public static readonly FilteredQuery.FilterStrategy LEAP_FROG_FILTER_FIRST_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source LEAP_FROG_QUERY_FIRST_STRATEGY A filter strategy that uses a \"leap-frog\" approach (also called \"zig-zag join\"). The scorer and the filter take turns trying to advance to each other's next matching document, often jumping past the target document. When both land on the same document, it's collected. Note: this strategy uses the query to lead the iteration. Declaration public static readonly FilteredQuery.FilterStrategy LEAP_FROG_QUERY_FIRST_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source QUERY_FIRST_FILTER_STRATEGY A filter strategy that advances the Query or rather its Scorer first and consults the filter DocIdSet for each matched document. Note: this strategy requires a Bits to return a non-null value. Otherwise this strategy falls back to LEAP_FROG_QUERY_FIRST_STRATEGY Use this strategy if the filter computation is more expensive than document scoring or if the filter has a linear running time to compute the next matching doc like exact geo distances. Declaration public static readonly FilteredQuery.FilterStrategy QUERY_FIRST_FILTER_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy | Improve this Doc View Source RANDOM_ACCESS_FILTER_STRATEGY A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from Bits ) and UseRandomAccess(IBits, Int32) returns true . Otherwise this strategy falls back to a \"zig-zag join\" ( LEAP_FROG_FILTER_FIRST_STRATEGY ) strategy. Note: this strategy is the default strategy in FilteredQuery Declaration public static readonly FilteredQuery.FilterStrategy RANDOM_ACCESS_FILTER_STRATEGY Field Value Type Description FilteredQuery.FilterStrategy Properties | Improve this Doc View Source Filter Returns this FilteredQuery 's filter Declaration public Filter Filter { get; } Property Value Type Description Filter | Improve this Doc View Source Query Returns this FilteredQuery 's (unfiltered) Query Declaration public Query Query { get; } Property Value Type Description Query | Improve this Doc View Source Strategy Returns this FilteredQuery 's FilteredQuery.FilterStrategy Declaration public virtual FilteredQuery.FilterStrategy Strategy { get; } Property Value Type Description FilteredQuery.FilterStrategy Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Returns a Weight that applies the filter to the enclosed query's Weight . this is accomplished by overriding the Scorer returned by the Weight . Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its rewritten ( Rewrite(IndexReader) ) form. Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) Exceptions Type Condition System.InvalidOperationException If this query is not yet rewritten | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Rewrites the query. If the wrapped is an instance of MatchAllDocsQuery it returns a ConstantScoreQuery . Otherwise it returns a new FilteredQuery wrapping the rewritten query. Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string s) Parameters Type Name Description System.String s Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object) See Also CachingWrapperFilter"
  },
  "api/Lucene.Net/Lucene.Net.Search.FuzzyQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FuzzyQuery.html",
    "title": "Class FuzzyQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyQuery Implements the fuzzy search query. The similarity measurement is based on the Damerau-Levenshtein (optimal string alignment) algorithm, though you can explicitly choose classic Levenshtein by passing false to the transpositions parameter. this query uses MultiTermQuery.TopTermsScoringBooleanQueryRewrite as default. So terms will be collected and scored according to their edit distance. Only the top terms are used for building the BooleanQuery . It is not recommended to change the rewrite mode for fuzzy queries. At most, this query will match terms up to MAXIMUM_SUPPORTED_DISTANCE edits. Higher distances (especially with transpositions enabled), are generally not useful and will match a significant amount of the term dictionary. If you really want this, consider using an n-gram indexing technique (such as the SpellChecker in the suggest module ) instead. NOTE: terms of length 1 or 2 will sometimes not match because of how the scaled distance between two terms is computed. For a term to match, the edit distance between the terms must be less than the minimum length term (either the input term, or the candidate term). For example, FuzzyQuery on term \"abcd\" with maxEdits=2 will not match an indexed term \"ab\", and FuzzyQuery on term \"a\" with maxEdits=2 will not match an indexed term \"abc\". Inheritance System.Object Query MultiTermQuery FuzzyQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class FuzzyQuery : MultiTermQuery Constructors | Improve this Doc View Source FuzzyQuery(Term) Calls FuzzyQuery(Term, Int32) . Declaration public FuzzyQuery(Term term) Parameters Type Name Description Term term | Improve this Doc View Source FuzzyQuery(Term, Int32) Calls FuzzyQuery(Term, Int32, Int32) . Declaration public FuzzyQuery(Term term, int maxEdits) Parameters Type Name Description Term term System.Int32 maxEdits | Improve this Doc View Source FuzzyQuery(Term, Int32, Int32) Calls FuzzyQuery(Term, Int32, Int32, Int32, Boolean) . Declaration public FuzzyQuery(Term term, int maxEdits, int prefixLength) Parameters Type Name Description Term term System.Int32 maxEdits System.Int32 prefixLength | Improve this Doc View Source FuzzyQuery(Term, Int32, Int32, Int32, Boolean) Create a new FuzzyQuery that will match terms with an edit distance of at most maxEdits to term . If a prefixLength > 0 is specified, a common prefix of that length is also required. Declaration public FuzzyQuery(Term term, int maxEdits, int prefixLength, int maxExpansions, bool transpositions) Parameters Type Name Description Term term The term to search for System.Int32 maxEdits Must be >= 0 and <= MAXIMUM_SUPPORTED_DISTANCE . System.Int32 prefixLength Length of common (non-fuzzy) prefix System.Int32 maxExpansions The maximum number of terms to match. If this number is greater than MaxClauseCount when the query is rewritten, then the maxClauseCount will be used instead. System.Boolean transpositions true if transpositions should be treated as a primitive edit operation. If this is false , comparisons will implement the classic Levenshtein algorithm. Fields | Improve this Doc View Source DefaultMaxEdits Declaration public const int DefaultMaxEdits = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DefaultMaxExpansions Declaration public const int DefaultMaxExpansions = 50 Field Value Type Description System.Int32 | Improve this Doc View Source DefaultMinSimilarity Declaration [Obsolete(\"pass integer edit distances instead.\")] public const float DefaultMinSimilarity = 2F Field Value Type Description System.Single | Improve this Doc View Source DefaultPrefixLength Declaration public const int DefaultPrefixLength = 0 Field Value Type Description System.Int32 | Improve this Doc View Source DefaultTranspositions Declaration public const bool DefaultTranspositions = true Field Value Type Description System.Boolean Properties | Improve this Doc View Source MaxEdits Declaration public virtual int MaxEdits { get; } Property Value Type Description System.Int32 The maximum number of edit distances allowed for this query to match. | Improve this Doc View Source PrefixLength Returns the non-fuzzy prefix length. This is the number of characters at the start of a term that must be identical (not fuzzy) to the query term if the query is to match that term. Declaration public virtual int PrefixLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Term Returns the pattern term. Declaration public virtual Term Term { get; } Property Value Type Description Term | Improve this Doc View Source Transpositions Returns true if transpositions should be treated as a primitive edit operation. If this is false , comparisons will implement the classic Levenshtein algorithm. Declaration public virtual bool Transpositions { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source SingleToEdits(Single, Int32) Helper function to convert from deprecated \"minimumSimilarity\" fractions to raw edit distances. NOTE: this was floatToEdits() in Lucene Declaration [Obsolete(\"pass integer edit distances instead.\")] public static int SingleToEdits(float minimumSimilarity, int termLen) Parameters Type Name Description System.Single minimumSimilarity Scaled similarity System.Int32 termLen Length (in unicode codepoints) of the term. Returns Type Description System.Int32 Equivalent number of maxEdits | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite.html",
    "title": "Class MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , but the scores are only computed as the boost. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > TopTermsRewrite < BooleanQuery > MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite Inherited Members TopTermsRewrite<BooleanQuery>.Count TopTermsRewrite<BooleanQuery>.Rewrite(IndexReader, MultiTermQuery) TopTermsRewrite<BooleanQuery>.GetHashCode() TopTermsRewrite<BooleanQuery>.Equals(Object) TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TopTermsBoostOnlyBooleanQueryRewrite : TopTermsRewrite<BooleanQuery>, ITopTermsRewrite Constructors | Improve this Doc View Source TopTermsBoostOnlyBooleanQueryRewrite(Int32) Create a MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite for at most size terms. NOTE: if MaxClauseCount is smaller than size , then it will be used instead. Declaration public TopTermsBoostOnlyBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source MaxSize Declaration protected override int MaxSize { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Search.TopTermsRewrite<Lucene.Net.Search.BooleanQuery>.MaxSize Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docFreq, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docFreq System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | Improve this Doc View Source GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() Extension Methods Number.IsNumber(Object) See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsScoringBooleanQueryRewrite.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.TopTermsScoringBooleanQueryRewrite.html",
    "title": "Class MultiTermQuery.TopTermsScoringBooleanQueryRewrite | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQuery.TopTermsScoringBooleanQueryRewrite A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. This rewrite method only uses the top scoring terms so it will not overflow the boolean max clause count. It is the default rewrite method for FuzzyQuery . Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite < BooleanQuery > TopTermsRewrite < BooleanQuery > MultiTermQuery.TopTermsScoringBooleanQueryRewrite Inherited Members TopTermsRewrite<BooleanQuery>.Count TopTermsRewrite<BooleanQuery>.Rewrite(IndexReader, MultiTermQuery) TopTermsRewrite<BooleanQuery>.GetHashCode() TopTermsRewrite<BooleanQuery>.Equals(Object) TermCollectingRewrite<BooleanQuery>.AddClause(BooleanQuery, Term, Int32, Single) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TopTermsScoringBooleanQueryRewrite : TopTermsRewrite<BooleanQuery>, ITopTermsRewrite Constructors | Improve this Doc View Source TopTermsScoringBooleanQueryRewrite(Int32) Create a MultiTermQuery.TopTermsScoringBooleanQueryRewrite for at most size terms. NOTE: if MaxClauseCount is smaller than size , then it will be used instead. Declaration public TopTermsScoringBooleanQueryRewrite(int size) Parameters Type Name Description System.Int32 size Properties | Improve this Doc View Source MaxSize Declaration protected override int MaxSize { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Search.TopTermsRewrite<Lucene.Net.Search.BooleanQuery>.MaxSize Methods | Improve this Doc View Source AddClause(BooleanQuery, Term, Int32, Single, TermContext) Declaration protected override void AddClause(BooleanQuery topLevel, Term term, int docCount, float boost, TermContext states) Parameters Type Name Description BooleanQuery topLevel Term term System.Int32 docCount System.Single boost TermContext states Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.AddClause(Lucene.Net.Search.BooleanQuery, Lucene.Net.Index.Term, System.Int32, System.Single, Lucene.Net.Index.TermContext) | Improve this Doc View Source GetTopLevelQuery() Declaration protected override BooleanQuery GetTopLevelQuery() Returns Type Description BooleanQuery Overrides Lucene.Net.Search.TermCollectingRewrite<Lucene.Net.Search.BooleanQuery>.GetTopLevelQuery() Extension Methods Number.IsNumber(Object) See Also MultiTermRewriteMethod"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.html",
    "title": "Class MultiTermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQuery An abstract Query that matches documents containing a subset of terms provided by a FilteredTermsEnum enumeration. This query cannot be used directly; you must subclass it and define GetTermsEnum(Terms, AttributeSource) to provide a FilteredTermsEnum that iterates through the terms to be matched. NOTE : if MultiTermRewriteMethod is either CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE or SCORING_BOOLEAN_QUERY_REWRITE , you may encounter a BooleanQuery.TooManyClausesException exception during searching, which happens when the number of terms to be searched exceeds MaxClauseCount . Setting MultiTermRewriteMethod to CONSTANT_SCORE_FILTER_REWRITE prevents this. The recommended rewrite method is CONSTANT_SCORE_AUTO_REWRITE_DEFAULT : it doesn't spend CPU computing unhelpful scores, and it tries to pick the most performant rewrite method given the query. If you need scoring (like , use MultiTermQuery.TopTermsScoringBooleanQueryRewrite which uses a priority queue to only collect competitive terms and not hit this limitation. Note that QueryParsers.Classic.QueryParser produces MultiTermQuery s using CONSTANT_SCORE_AUTO_REWRITE_DEFAULT by default. Inheritance System.Object Query MultiTermQuery AutomatonQuery FuzzyQuery NumericRangeQuery<T> PrefixQuery TermRangeQuery Inherited Members Query.Boost Query.ToString(String) Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class MultiTermQuery : Query Constructors | Improve this Doc View Source MultiTermQuery(String) Constructs a query matching terms that cannot be represented with a single Term . Declaration public MultiTermQuery(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source CONSTANT_SCORE_AUTO_REWRITE_DEFAULT Read-only default instance of ConstantScoreAutoRewrite , with TermCountCutoff set to DEFAULT_TERM_COUNT_CUTOFF and DocCountPercent set to DEFAULT_DOC_COUNT_PERCENT . Note that you cannot alter the configuration of this instance; you'll need to create a private instance instead. Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_AUTO_REWRITE_DEFAULT Field Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Like SCORING_BOOLEAN_QUERY_REWRITE except scores are not computed. Instead, each matching document receives a constant score equal to the query's boost. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source CONSTANT_SCORE_FILTER_REWRITE A rewrite method that first creates a private Filter , by visiting each term in sequence and marking all docs for that term. Matching documents are assigned a constant score equal to the query's boost. This method is faster than the BooleanQuery rewrite methods when the number of matched terms or matched documents is non-trivial. Also, it will never hit an errant BooleanQuery.TooManyClausesException exception. Declaration public static readonly MultiTermQuery.RewriteMethod CONSTANT_SCORE_FILTER_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_rewriteMethod Declaration protected MultiTermQuery.RewriteMethod m_rewriteMethod Field Value Type Description MultiTermQuery.RewriteMethod | Improve this Doc View Source SCORING_BOOLEAN_QUERY_REWRITE A rewrite method that first translates each term into SHOULD clause in a BooleanQuery , and keeps the scores as computed by the query. Note that typically such scores are meaningless to the user, and require non-trivial CPU to compute, so it's almost always better to use CONSTANT_SCORE_AUTO_REWRITE_DEFAULT instead. NOTE : this rewrite method will hit BooleanQuery.TooManyClausesException if the number of terms exceeds MaxClauseCount . Declaration public static readonly MultiTermQuery.RewriteMethod SCORING_BOOLEAN_QUERY_REWRITE Field Value Type Description MultiTermQuery.RewriteMethod See Also MultiTermRewriteMethod Properties | Improve this Doc View Source Field Returns the field name for this query Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MultiTermRewriteMethod Gets or Sets the rewrite method to be used when executing the query. You can use one of the four core methods, or implement your own subclass of MultiTermQuery.RewriteMethod . Declaration public virtual MultiTermQuery.RewriteMethod MultiTermRewriteMethod { get; set; } Property Value Type Description MultiTermQuery.RewriteMethod Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms) Convenience method, if no attributes are needed: this simply passes empty attributes and is equal to: GetTermsEnum(terms, new AttributeSource()) Declaration public TermsEnum GetTermsEnum(Terms terms) Parameters Type Name Description Terms terms Returns Type Description TermsEnum | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Construct the enumeration to be used, expanding the pattern term. this method should only be called if the field exists (ie, implementations can assume the field does exist). this method should not return null (should instead return EMPTY if no terms match). The TermsEnum must already be positioned to the first matching term. The given AttributeSource is passed by the MultiTermQuery.RewriteMethod to provide attributes, the rewrite method uses to inform about e.g. maximum competitive boosts. this is currently only used by TopTermsRewrite<Q> . Declaration protected abstract TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum | Improve this Doc View Source Rewrite(IndexReader) To rewrite to a simpler form, instead return a simpler enum from GetTermsEnum(Terms, AttributeSource) . For example, to rewrite to a single term, return a SingleTermsEnum . Declaration public override sealed Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQueryWrapperFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQueryWrapperFilter-1.html",
    "title": "Class MultiTermQueryWrapperFilter<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQueryWrapperFilter<Q> A wrapper for MultiTermQuery , that exposes its functionality as a Filter . MultiTermQueryWrapperFilter<Q> is not designed to be used by itself. Normally you subclass it to provide a Filter counterpart for a MultiTermQuery subclass. For example, TermRangeFilter and PrefixFilter extend MultiTermQueryWrapperFilter<Q> . This class also provides the functionality behind CONSTANT_SCORE_FILTER_REWRITE ; this is why it is not abstract. Inheritance System.Object Filter MultiTermQueryWrapperFilter<Q> NumericRangeFilter<T> PrefixFilter TermRangeFilter Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class MultiTermQueryWrapperFilter<Q> : Filter where Q : MultiTermQuery Type Parameters Name Description Q Constructors | Improve this Doc View Source MultiTermQueryWrapperFilter(Q) Wrap a MultiTermQuery as a Filter . Declaration protected MultiTermQueryWrapperFilter(Q query) Parameters Type Name Description Q query Fields | Improve this Doc View Source m_query Declaration protected readonly Q m_query Field Value Type Description Q Properties | Improve this Doc View Source Field Returns the field name for this query Declaration public string Field { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override sealed bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Returns a DocIdSet with documents that should be permitted in search results. Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetHashCode() Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadTermQuery.html",
    "title": "Class PayloadTermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadTermQuery This class is very similar to SpanTermQuery except that it factors in the value of the payload located at each of the positions where the Term occurs. NOTE: In order to take advantage of this with the default scoring implementation ( DefaultSimilarity ), you must override ScorePayload(Int32, Int32, Int32, BytesRef) , which returns 1 by default. Payload scores are aggregated using a pluggable PayloadFunction . Inheritance System.Object Query SpanQuery SpanTermQuery PayloadTermQuery Inherited Members SpanTermQuery.m_term SpanTermQuery.Term SpanTermQuery.Field SpanTermQuery.ExtractTerms(ISet<Term>) SpanTermQuery.ToString(String) SpanTermQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadTermQuery : SpanTermQuery Constructors | Improve this Doc View Source PayloadTermQuery(Term, PayloadFunction) Declaration public PayloadTermQuery(Term term, PayloadFunction function) Parameters Type Name Description Term term PayloadFunction function | Improve this Doc View Source PayloadTermQuery(Term, PayloadFunction, Boolean) Declaration public PayloadTermQuery(Term term, PayloadFunction function, bool includeSpanScore) Parameters Type Name Description Term term PayloadFunction function System.Boolean includeSpanScore Fields | Improve this Doc View Source m_function Declaration protected PayloadFunction m_function Field Value Type Description PayloadFunction Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides SpanQuery.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides SpanTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides SpanTermQuery.GetHashCode() Extension Methods Number.IsNumber(Object) See Also ComputePayloadFactor(Int32, Int32, Int32, BytesRef)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelBE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelBE.html",
    "title": "Class BasicModelBE | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelBE Limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by tfn+1 and N is increased by F @lucene.experimental NOTE: in some corner cases this model may give poor performance with Normalizations that return large values for tfn such as NormalizationH3 . Consider using the geometric approximation ( BasicModelG ) instead, which provides the same relevance but with less practical problems. Inheritance System.Object BasicModel BasicModelBE Inherited Members BasicModel.Explain(BasicStats, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelBE : BasicModel Constructors | Improve this Doc View Source BasicModelBE() Sole constructor: parameter-free Declaration public BasicModelBE() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelD.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelD.html",
    "title": "Class BasicModelD | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelD Implements the approximation of the binomial model with the divergence for DFR. The formula used in Lucene differs slightly from the one in the original paper: to avoid underflow for small values of N and F , N is increased by 1 and F is always increased by tfn+1 . WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelD Inherited Members BasicModel.Explain(BasicStats, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelD : BasicModel Constructors | Improve this Doc View Source BasicModelD() Sole constructor: parameter-free Declaration public BasicModelD() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelG.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelG.html",
    "title": "Class BasicModelG | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelG Geometric as limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by 1 and N is increased by F . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelG Inherited Members BasicModel.Explain(BasicStats, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelG : BasicModel Constructors | Improve this Doc View Source BasicModelG() Sole constructor: parameter-free Declaration public BasicModelG() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIF.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelIF.html",
    "title": "Class BasicModelIF | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelIF An approximation of the I(n e ) model. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelIF Inherited Members BasicModel.Explain(BasicStats, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelIF : BasicModel Constructors | Improve this Doc View Source BasicModelIF() Sole constructor: parameter-free Declaration public BasicModelIF() Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.BaseDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BaseDirectory.html",
    "title": "Class BaseDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BaseDirectory Base implementation for a concrete Directory . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory CompoundFileDirectory FileSwitchDirectory FSDirectory RAMDirectory Implements System.IDisposable Inherited Members Directory.ListAll() Directory.FileExists(String) Directory.DeleteFile(String) Directory.FileLength(String) Directory.CreateOutput(String, IOContext) Directory.Sync(ICollection<String>) Directory.OpenInput(String, IOContext) Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Dispose(Boolean) Directory.GetLockID() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class BaseDirectory : Directory, IDisposable Constructors | Improve this Doc View Source BaseDirectory() Sole constructor. Declaration protected BaseDirectory() Fields | Improve this Doc View Source m_lockFactory Holds the LockFactory instance (implements locking for this Directory instance). Declaration protected LockFactory m_lockFactory Field Value Type Description LockFactory Properties | Improve this Doc View Source IsOpen Declaration protected virtual bool IsOpen { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source EnsureOpen() Declaration protected override sealed void EnsureOpen() Overrides Directory.EnsureOpen() | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedChecksum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedChecksum.html",
    "title": "Class BufferedChecksum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedChecksum Wraps another IChecksum with an internal buffer to speed up checksum calculations. Inheritance System.Object BufferedChecksum Implements IChecksum Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class BufferedChecksum : IChecksum Constructors | Improve this Doc View Source BufferedChecksum(IChecksum) Create a new BufferedChecksum with DEFAULT_BUFFERSIZE Declaration public BufferedChecksum(IChecksum in) Parameters Type Name Description IChecksum in | Improve this Doc View Source BufferedChecksum(IChecksum, Int32) Create a new BufferedChecksum with the specified bufferSize Declaration public BufferedChecksum(IChecksum in, int bufferSize) Parameters Type Name Description IChecksum in System.Int32 bufferSize Fields | Improve this Doc View Source DEFAULT_BUFFERSIZE Default buffer size: 256 Declaration public const int DEFAULT_BUFFERSIZE = 256 Field Value Type Description System.Int32 Properties | Improve this Doc View Source Value Declaration public virtual long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Reset() Declaration public virtual void Reset() | Improve this Doc View Source Update(Byte[]) Declaration public virtual void Update(byte[] b) Parameters Type Name Description System.Byte [] b | Improve this Doc View Source Update(Byte[], Int32, Int32) Declaration public virtual void Update(byte[] b, int off, int len) Parameters Type Name Description System.Byte [] b System.Int32 off System.Int32 len | Improve this Doc View Source Update(Int32) Declaration public virtual void Update(int b) Parameters Type Name Description System.Int32 b Implements IChecksum Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedChecksumIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedChecksumIndexInput.html",
    "title": "Class BufferedChecksumIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedChecksumIndexInput Simple implementation of ChecksumIndexInput that wraps another input and delegates calls. Inheritance System.Object DataInput IndexInput ChecksumIndexInput BufferedChecksumIndexInput Implements System.IDisposable Inherited Members ChecksumIndexInput.Seek(Int64) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class BufferedChecksumIndexInput : ChecksumIndexInput, IDisposable Constructors | Improve this Doc View Source BufferedChecksumIndexInput(IndexInput) Creates a new BufferedChecksumIndexInput Declaration public BufferedChecksumIndexInput(IndexInput main) Parameters Type Name Description IndexInput main Properties | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides ChecksumIndexInput.Checksum | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IDictionary-2.html",
    "title": "Interface IDictionary<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDictionary<K, V> A dictionary with keys of type K and values of type V. Equivalent to a finite partial map from K to V. Inherited Members ICollectionValue<KeyValuePair<K, V>>.ListenableEvents ICollectionValue<KeyValuePair<K, V>>.ActiveEvents ICollectionValue<KeyValuePair<K, V>>.CollectionChanged ICollectionValue<KeyValuePair<K, V>>.CollectionCleared ICollectionValue<KeyValuePair<K, V>>.ItemsAdded ICollectionValue<KeyValuePair<K, V>>.ItemInserted ICollectionValue<KeyValuePair<K, V>>.ItemsRemoved ICollectionValue<KeyValuePair<K, V>>.ItemRemovedAt ICollectionValue<KeyValuePair<K, V>>.IsEmpty ICollectionValue<KeyValuePair<K, V>>.Count ICollectionValue<KeyValuePair<K, V>>.CountSpeed ICollectionValue<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) ICollectionValue<KeyValuePair<K, V>>.ToArray() ICollectionValue<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) ICollectionValue<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) ICollectionValue<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) ICollectionValue<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) ICollectionValue<KeyValuePair<K, V>>.Choose() ICollectionValue<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) System.Collections.Generic.IEnumerable<Lucene.Net.Support.C5.KeyValuePair<K, V>>.GetEnumerator() System.Collections.IEnumerable.GetEnumerator() IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IDictionary<K, V> : ICollectionValue<KeyValuePair<K, V>>, IEnumerable<KeyValuePair<K, V>>, IEnumerable, IShowable, IFormattable Type Parameters Name Description K V Properties | Improve this Doc View Source ContainsSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). See C5.Speed for the set of symbols. Declaration Speed ContainsSpeed { get; } Property Value Type Description Speed A characterization of the speed of lookup operations ( Contains() etc.) of the implementation of this dictionary. | Improve this Doc View Source EqualityComparer The key equalityComparer. Declaration IEqualityComparer<K> EqualityComparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <K> | Improve this Doc View Source Func Declaration Func<K, V> Func { get; } Property Value Type Description System.Func <K, V> A delegate of type Func`2 defining the partial function from K to V give by the dictionary. | Improve this Doc View Source IsReadOnly Declaration bool IsReadOnly { get; } Property Value Type Description System.Boolean True if dictionary is read-only | Improve this Doc View Source Item[K] Indexer for dictionary. Declaration V this[K key] { get; set; } Parameters Type Name Description K key Property Value Type Description V The value corresponding to the key Exceptions Type Condition NoSuchItemException if no entry is found. | Improve this Doc View Source Keys Declaration ICollectionValue<K> Keys { get; } Property Value Type Description ICollectionValue <K> A collection containing all the keys of the dictionary | Improve this Doc View Source Values Declaration ICollectionValue<V> Values { get; } Property Value Type Description ICollectionValue <V> A collection containing all the values of the dictionary Methods | Improve this Doc View Source Add(K, V) Add a new (key, value) pair (a mapping) to the dictionary. Declaration void Add(K key, V val) Parameters Type Name Description K key Key to add V val Value to add Exceptions Type Condition DuplicateNotAllowedException if there already is an entry with the same key. | Improve this Doc View Source AddAll<U, W>(IEnumerable<KeyValuePair<U, W>>) Add the entries from a collection of C5.KeyValuePair`2 pairs to this dictionary. Declaration void AddAll<U, W>(IEnumerable<KeyValuePair<U, W>> entries) where U : K where W : V Parameters Type Name Description System.Collections.Generic.IEnumerable < KeyValuePair <U, W>> entries Type Parameters Name Description U W Exceptions Type Condition DuplicateNotAllowedException If the input contains duplicate keys or a key already present in this dictionary. | Improve this Doc View Source Check() Check the integrity of the internal data structures of this dictionary. Only available in DEBUG builds??? Declaration bool Check() Returns Type Description System.Boolean True if check does not fail. | Improve this Doc View Source Clear() Remove all entries from the dictionary Declaration void Clear() | Improve this Doc View Source Contains(K) Check if there is an entry with a specified key Declaration bool Contains(K key) Parameters Type Name Description K key The key to look for Returns Type Description System.Boolean True if key was found | Improve this Doc View Source ContainsAll<H>(IEnumerable<H>) Check whether this collection contains all the values in another collection. If this collection has bag semantics ( AllowsDuplicates==true ) the check is made with respect to multiplicities, else multiplicities are not taken into account. Declaration bool ContainsAll<H>(IEnumerable<H> items) where H : K Parameters Type Name Description System.Collections.Generic.IEnumerable <H> items The Returns Type Description System.Boolean True if all values in items is in this collection. Type Parameters Name Description H | Improve this Doc View Source Find(ref K, out V) Check if there is an entry with a specified key and report the corresponding value if found. This can be seen as a safe form of \"val = this[key]\". Declaration bool Find(ref K key, out V val) Parameters Type Name Description K key The key to look for V val On exit, the value of the entry Returns Type Description System.Boolean True if key was found | Improve this Doc View Source FindOrAdd(K, ref V) Look for a specific key in the dictionary. If found, report the corresponding value, else add an entry with the key and the supplied value. Declaration bool FindOrAdd(K key, ref V val) Parameters Type Name Description K key The key to look for V val On entry the value to add if the key is not found. On exit the value found if any. Returns Type Description System.Boolean True if key was found | Improve this Doc View Source Remove(K) Remove an entry with a given key from the dictionary Declaration bool Remove(K key) Parameters Type Name Description K key The key of the entry to remove Returns Type Description System.Boolean True if an entry was found (and removed) | Improve this Doc View Source Remove(K, out V) Remove an entry with a given key from the dictionary and report its value. Declaration bool Remove(K key, out V val) Parameters Type Name Description K key The key of the entry to remove V val On exit, the value of the removed entry Returns Type Description System.Boolean True if an entry was found (and removed) | Improve this Doc View Source Update(K, V) Look for a specific key in the dictionary and if found replace the value with a new one. This can be seen as a non-adding version of \"this[key] = val\". Declaration bool Update(K key, V val) Parameters Type Name Description K key The key to look for V val The new value Returns Type Description System.Boolean True if key was found | Improve this Doc View Source Update(K, V, out V) Look for a specific key in the dictionary and if found replace the value with a new one. This can be seen as a non-adding version of \"this[key] = val\" reporting the old value. Declaration bool Update(K key, V val, out V oldval) Parameters Type Name Description K key The key to look for V val The new value V oldval The old value if any Returns Type Description System.Boolean True if key was found | Improve this Doc View Source UpdateOrAdd(K, V) Update value in dictionary corresponding to key if found, else add new entry. More general than \"this[key] = val;\" by reporting if key was found. Declaration bool UpdateOrAdd(K key, V val) Parameters Type Name Description K key The key to look for V val The value to add or replace with. Returns Type Description System.Boolean True if key was found and value updated. | Improve this Doc View Source UpdateOrAdd(K, V, out V) Update value in dictionary corresponding to key if found, else add new entry. More general than \"this[key] = val;\" by reporting if key was found. Declaration bool UpdateOrAdd(K key, V val, out V oldval) Parameters Type Name Description K key The key to look for V val The value to add or replace with. V oldval The old value if any Returns Type Description System.Boolean True if key was found and value updated. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IDirectedCollectionValue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IDirectedCollectionValue-1.html",
    "title": "Interface IDirectedCollectionValue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDirectedCollectionValue<T> A sized generic collection, that can be enumerated backwards. Inherited Members ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IDirectedCollectionValue<T> : ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Methods | Improve this Doc View Source Backwards() Create a collection containing the same items as this collection, but whose enumerator will enumerate the items backwards. The new collection will become invalid if the original is modified. Method typically used as in foreach (T x in coll.Backwards()) {...} Declaration IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> The backwards collection. | Improve this Doc View Source FindLast(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration bool FindLast(Func<T, bool> predicate, out T item) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IDirectedEnumerable-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IDirectedEnumerable-1.html",
    "title": "Interface IDirectedEnumerable<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDirectedEnumerable<T> A generic collection, that can be enumerated backwards. Inherited Members System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IDirectedEnumerable<T> : IEnumerable<T>, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source Direction Forwards if same, else Backwards Declaration EnumerationDirection Direction { get; } Property Value Type Description EnumerationDirection The enumeration direction relative to the original collection. Methods | Improve this Doc View Source Backwards() Create a collection containing the same items as this collection, but whose enumerator will enumerate the items backwards. The new collection will become invalid if the original is modified. Method typically used as in foreach (T x in coll.Backwards()) {...} Declaration IDirectedEnumerable<T> Backwards() Returns Type Description IDirectedEnumerable <T> The backwards collection. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IExtensible-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IExtensible-1.html",
    "title": "Interface IExtensible<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IExtensible<T> A generic collection to which one may add items. This is just the intersection of the main stream generic collection interfaces and the priority queue interface, C5.ICollection`1 and C5.IPriorityQueue`1 . Inherited Members ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) System.Collections.Generic.IEnumerable<T>.GetEnumerator() IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IExtensible<T> : ICollectionValue<T>, IEnumerable<T>, IEnumerable, IShowable, IFormattable Type Parameters Name Description T Properties | Improve this Doc View Source AllowsDuplicates Declaration bool AllowsDuplicates { get; } Property Value Type Description System.Boolean False if this collection has set semantics, true if bag semantics. | Improve this Doc View Source DuplicatesByCounting By convention this is true for any collection with set semantics. Declaration bool DuplicatesByCounting { get; } Property Value Type Description System.Boolean True if only one representative of a group of equal items is kept in the collection together with the total count. | Improve this Doc View Source EqualityComparer (Here should be a discussion of the role of equalityComparers. Any ). Declaration IEqualityComparer<T> EqualityComparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <T> The equalityComparer used by this collection to check equality of items. Or null (????) if collection does not check equality at all or uses a comparer. | Improve this Doc View Source IsReadOnly If true any call of an updating operation will throw an ReadOnlyCollectionException Declaration bool IsReadOnly { get; } Property Value Type Description System.Boolean True if this collection is read-only. Methods | Improve this Doc View Source Add(T) Add an item to this collection if possible. If this collection has set semantics, the item will be added if not already in the collection. If bag semantics, the item will always be added. Declaration bool Add(T item) Parameters Type Name Description T item The item to add. Returns Type Description System.Boolean True if item was added. | Improve this Doc View Source AddAll(IEnumerable<T>) Add the elements from another collection with a more specialized item type to this collection. If this collection has set semantics, only items not already in the collection will be added. Declaration void AddAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to add | Improve this Doc View Source Check() Check the integrity of the internal data structures of this collection. This is only relevant for developers of the library Declaration bool Check() Returns Type Description System.Boolean True if check was passed. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IStack-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IStack-1.html",
    "title": "Interface IStack<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStack<T> The interface describing the operations of a LIFO stack data structure. Inherited Members IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.Count ICollectionValue<T>.CountSpeed ICollectionValue<T>.CopyTo(T[], Int32) ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IStack<T> : IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T The item type Properties | Improve this Doc View Source AllowsDuplicates Declaration bool AllowsDuplicates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Get the index 'th element of the stack. The bottom of the stack has index 0. Declaration T this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description T Methods | Improve this Doc View Source Pop() Pop the item at the top of the stack from the stack. Declaration T Pop() Returns Type Description T The popped item. | Improve this Doc View Source Push(T) Push an item to the top of the stack. Declaration void Push(T item) Parameters Type Name Description T item The item Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemAtEventArgs-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemAtEventArgs-1.html",
    "title": "Class ItemAtEventArgs<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItemAtEventArgs<T> Inheritance System.Object System.EventArgs ItemAtEventArgs<T> Inherited Members System.EventArgs.Empty System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ItemAtEventArgs<T> : EventArgs Type Parameters Name Description T Constructors | Improve this Doc View Source ItemAtEventArgs(T, Int32) Declaration public ItemAtEventArgs(T item, int index) Parameters Type Name Description T item System.Int32 index Fields | Improve this Doc View Source Index Declaration public readonly int Index Field Value Type Description System.Int32 | Improve this Doc View Source Item Declaration public readonly T Item Field Value Type Description T Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemCountEventArgs-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemCountEventArgs-1.html",
    "title": "Class ItemCountEventArgs<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItemCountEventArgs<T> Inheritance System.Object System.EventArgs ItemCountEventArgs<T> Inherited Members System.EventArgs.Empty System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ItemCountEventArgs<T> : EventArgs Type Parameters Name Description T Constructors | Improve this Doc View Source ItemCountEventArgs(T, Int32) Declaration public ItemCountEventArgs(T item, int count) Parameters Type Name Description T item System.Int32 count Fields | Improve this Doc View Source Count Declaration public readonly int Count Field Value Type Description System.Int32 | Improve this Doc View Source Item Declaration public readonly T Item Field Value Type Description T Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ConcurrentHashMapWrapper-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ConcurrentHashMapWrapper-2.html",
    "title": "Class ConcurrentHashMapWrapper<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConcurrentHashMapWrapper<TKey, TValue> Inheritance System.Object ConcurrentHashMapWrapper<TKey, TValue> Implements System.Collections.Generic.IDictionary <TKey, TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class ConcurrentHashMapWrapper<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source ConcurrentHashMapWrapper(IDictionary<TKey, TValue>) Declaration public ConcurrentHashMapWrapper(IDictionary<TKey, TValue> wrapped) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> wrapped Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public ICollection<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <TKey> | Improve this Doc View Source Values Declaration public ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(TKey) Declaration public bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue>[] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> | Improve this Doc View Source Remove(TKey) Declaration public bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods DictionaryExtensions.PutAll<TKey, TValue>(IDictionary<TKey, TValue>, IEnumerable<KeyValuePair<TKey, TValue>>) DictionaryExtensions.EntrySet<TKey, TValue>(IDictionary<TKey, TValue>) DictionaryExtensions.Put<TKey, TValue>(IDictionary<TKey, TValue>, TKey, TValue) EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ConcurrentHashSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ConcurrentHashSet-1.html",
    "title": "Class ConcurrentHashSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConcurrentHashSet<T> Inheritance System.Object ConcurrentHashSet<T> Implements System.Collections.Generic.ISet <T> System.Collections.Generic.ICollection <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public sealed class ConcurrentHashSet<T> : ISet<T>, ICollection<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Constructors | Improve this Doc View Source ConcurrentHashSet() Declaration public ConcurrentHashSet() | Improve this Doc View Source ConcurrentHashSet(IEnumerable<T>) Declaration public ConcurrentHashSet(IEnumerable<T> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> collection | Improve this Doc View Source ConcurrentHashSet(IEnumerable<T>, IEqualityComparer<T>) Declaration public ConcurrentHashSet(IEnumerable<T> collection, IEqualityComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> collection System.Collections.Generic.IEqualityComparer <T> comparer | Improve this Doc View Source ConcurrentHashSet(IEqualityComparer<T>) Declaration public ConcurrentHashSet(IEqualityComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> comparer Properties | Improve this Doc View Source Count Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public bool IsReadOnly { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Add(T) Declaration public bool Add(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source Clear() Declaration public void Clear() | Improve this Doc View Source Contains(T) Declaration public bool Contains(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(T[], Int32) Declaration public void CopyTo(T[] array, int arrayIndex) Parameters Type Name Description T[] array System.Int32 arrayIndex | Improve this Doc View Source ExceptWith(IEnumerable<T>) Declaration public void ExceptWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other | Improve this Doc View Source GetEnumerator() Declaration public IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> | Improve this Doc View Source IntersectWith(IEnumerable<T>) Declaration public void IntersectWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other | Improve this Doc View Source IsProperSubsetOf(IEnumerable<T>) Declaration public bool IsProperSubsetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source IsProperSupersetOf(IEnumerable<T>) Declaration public bool IsProperSupersetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source IsSubsetOf(IEnumerable<T>) Declaration public bool IsSubsetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source IsSupersetOf(IEnumerable<T>) Declaration public bool IsSupersetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source Overlaps(IEnumerable<T>) Declaration public bool Overlaps(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source Remove(T) Declaration public bool Remove(T item) Parameters Type Name Description T item Returns Type Description System.Boolean | Improve this Doc View Source SetEquals(IEnumerable<T>) Declaration public bool SetEquals(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other Returns Type Description System.Boolean | Improve this Doc View Source SymmetricExceptWith(IEnumerable<T>) Declaration public void SymmetricExceptWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other | Improve this Doc View Source UnionWith(IEnumerable<T>) Declaration public void UnionWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other Explicit Interface Implementations | Improve this Doc View Source ICollection<T>.Add(T) Declaration void ICollection<T>.Add(T item) Parameters Type Name Description T item | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.ISet<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityComparer-1.html",
    "title": "Class IdentityComparer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityComparer<T> Inheritance System.Object IdentityComparer<T> Implements System.Collections.Generic.IEqualityComparer <T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityComparer<T> : IEqualityComparer<T> Type Parameters Name Description T Methods | Improve this Doc View Source Equals(T, T) Declaration public bool Equals(T x, T y) Parameters Type Name Description T x T y Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode(T) Declaration public int GetHashCode(T obj) Parameters Type Name Description T obj Returns Type Description System.Int32 Implements System.Collections.Generic.IEqualityComparer<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityComparer.html",
    "title": "Class IdentityComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityComparer Inheritance System.Object IdentityComparer Implements System.Collections.IEqualityComparer Inherited Members System.Object.Equals(System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityComparer : IEqualityComparer Methods | Improve this Doc View Source Equals(Object, Object) Declaration public bool Equals(object x, object y) Parameters Type Name Description System.Object x System.Object y Returns Type Description System.Boolean | Improve this Doc View Source GetHashCode(Object) Declaration public int GetHashCode(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Int32 Implements System.Collections.IEqualityComparer Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IdentityHashMap-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IdentityHashMap-2.html",
    "title": "Class IdentityHashMap<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IdentityHashMap<TKey, TValue> Inheritance System.Object HashMap <TKey, TValue> IdentityHashMap<TKey, TValue> Implements System.Collections.Generic.IDictionary <TKey, TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerable Inherited Members HashMap<TKey, TValue>.ContainsValue(TValue) HashMap<TKey, TValue>.AddIfAbsent(TKey, TValue) HashMap<TKey, TValue>.Equals(Object) HashMap<TKey, TValue>.GetHashCode() HashMap<TKey, TValue>.ToString() HashMap<TKey, TValue>.GetEnumerator() HashMap<TKey, TValue>.IEnumerable.GetEnumerator() HashMap<TKey, TValue>.Add(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.Clear() HashMap<TKey, TValue>.Contains(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.CopyTo(KeyValuePair<TKey, TValue>[], Int32) HashMap<TKey, TValue>.Remove(KeyValuePair<TKey, TValue>) HashMap<TKey, TValue>.Count HashMap<TKey, TValue>.IsReadOnly HashMap<TKey, TValue>.ContainsKey(TKey) HashMap<TKey, TValue>.Add(TKey, TValue) HashMap<TKey, TValue>.Remove(TKey) HashMap<TKey, TValue>.TryGetValue(TKey, TValue) HashMap<TKey, TValue>.Item[TKey] HashMap<TKey, TValue>.Keys HashMap<TKey, TValue>.Values System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class IdentityHashMap<TKey, TValue> : HashMap<TKey, TValue>, IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source IdentityHashMap() Declaration public IdentityHashMap() | Improve this Doc View Source IdentityHashMap(IDictionary<TKey, TValue>) Declaration public IdentityHashMap(IDictionary<TKey, TValue> wrappedDictionary) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> wrappedDictionary | Improve this Doc View Source IdentityHashMap(Int32) Declaration public IdentityHashMap(int initialCapacity) Parameters Type Name Description System.Int32 initialCapacity Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods DictionaryExtensions.PutAll<TKey, TValue>(IDictionary<TKey, TValue>, IEnumerable<KeyValuePair<TKey, TValue>>) DictionaryExtensions.EntrySet<TKey, TValue>(IDictionary<TKey, TValue>) DictionaryExtensions.Put<TKey, TValue>(IDictionary<TKey, TValue>, TKey, TValue) EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.PriorityQueue-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.PriorityQueue-1.html",
    "title": "Class PriorityQueue<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PriorityQueue<T> A PriorityQueue<T> holds elements on a priority heap, which orders the elements according to their natural order or according to the comparator specified at construction time. If the queue uses natural ordering, only elements that are comparable are permitted to be inserted into the queue. The least element of the specified ordering is stored at the head of the queue and the greatest element is stored at the tail of the queue. A PriorityQueue<T> is not synchronized. Inheritance System.Object PriorityQueue<T> Implements System.Collections.Generic.ICollection <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class PriorityQueue<T> : ICollection<T>, IEnumerable<T>, IEnumerable where T : class Type Parameters Name Description T Type of elements Constructors | Improve this Doc View Source PriorityQueue() Constructs a priority queue with an initial capacity of 11 and natural ordering. Declaration public PriorityQueue() | Improve this Doc View Source PriorityQueue(PriorityQueue<T>) Creates a PriorityQueue<T> containing the elements in the specified priority queue. This priority queue will be ordered according to the same ordering as the given priority queue. Declaration public PriorityQueue(PriorityQueue<T> collection) Parameters Type Name Description PriorityQueue <T> collection the priority queue whose elements are to be placed into this priority queue Exceptions Type Condition System.InvalidCastException if elements of collection cannot be compared to one another according to collection 's ordering | Improve this Doc View Source PriorityQueue(TreeSet<T>) Creates a PriorityQueue<T> containing the elements in the specified TreeSet<T> . This priority queue will be ordered according to the same ordering as the given TreeSet<T> . The constructed priority queue has the initial capacity of 110% of the size of the sorted set. The priority queue will have the same comparator as the sorted set. Declaration public PriorityQueue(TreeSet<T> collection) Parameters Type Name Description TreeSet <T> collection the sorted set whose elements are to be placed into this priority queue Exceptions Type Condition System.InvalidCastException if elements of collection cannot be compared to one another according to collection 's ordering System.ArgumentNullException if the specified collection or any of its elements are null | Improve this Doc View Source PriorityQueue(ICollection<T>) Creates a PriorityQueue<T> containing the elements in the specified collection. If the specified collection is an instance of a System.Collections.Generic.SortedSet<T> , TreeSet<T> , or is another PriorityQueue<T> , this priority queue will be ordered according to the same ordering. Otherwise, this priority queue will be ordered according to the System.IComparable<T> natural ordering of its elements. Declaration public PriorityQueue(ICollection<T> collection) Parameters Type Name Description System.Collections.Generic.ICollection <T> collection collection to be inserted into priority queue Exceptions Type Condition System.InvalidCastException if elements of the specified collection cannot be compared to one another according to the priority queue's ordering | Improve this Doc View Source PriorityQueue(IComparer<T>) Constructs a priority queue with the specified capacity and comparer. Declaration public PriorityQueue(IComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The System.Collections.Generic.IComparer<T> that will be used to order this priority queue. If null , the System.IComparable<T> natural ordering of the elements will be used. | Improve this Doc View Source PriorityQueue(SortedSet<T>) Creates a PriorityQueue<T> containing the elements in the specified System.Collections.Generic.SortedSet<T> . This priority queue will be ordered according to the same ordering as the given System.Collections.Generic.SortedSet<T> . The constructed priority queue has the initial capacity of 110% of the size of the sorted set. The priority queue will have the same comparator as the sorted set. Declaration public PriorityQueue(SortedSet<T> collection) Parameters Type Name Description System.Collections.Generic.SortedSet <T> collection the sorted set whose elements are to be placed into this priority queue Exceptions Type Condition System.InvalidCastException if elements of collection cannot be compared to one another according to collection 's ordering System.ArgumentNullException if the specified collection or any of its elements are null | Improve this Doc View Source PriorityQueue(Int32) Constructs a priority queue with the specified capacity and natural ordering. Declaration public PriorityQueue(int initialCapacity) Parameters Type Name Description System.Int32 initialCapacity initial capacity Exceptions Type Condition System.ArgumentOutOfRangeException if the initialCapacity is less than 1. | Improve this Doc View Source PriorityQueue(Int32, IComparer<T>) Creates a PriorityQueue<T> with the specified initial capacity that orders its elements according to the specified comparer. Declaration public PriorityQueue(int initialCapacity, IComparer<T> comparer) Parameters Type Name Description System.Int32 initialCapacity the initial capacity for this priority queue System.Collections.Generic.IComparer <T> comparer The System.Collections.Generic.IComparer<T> that will be used to order this priority queue. If null , the System.IComparable<T> natural ordering of the elements will be used. Exceptions Type Condition System.ArgumentOutOfRangeException if the initialCapacity is less than 1 Properties | Improve this Doc View Source Comparer Gets the System.Collections.Generic.IComparer<T> used to order the elements in this queue, or Lucene.Net.Util.ArrayUtil.NaturalComparer`1 if this queue is sorted according to the System.IComparable<T> natural ordering of its elements. Declaration public virtual IComparer<T> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <T> | Improve this Doc View Source Count Gets the size of the priority queue. If the size of the queue is greater than the System.Int32.MaxValue , then it returns System.Int32.MaxValue . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Gets a value indicating whether the collection is read-only. Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean Remarks For priority queue this property returns false . Methods | Improve this Doc View Source Add(T) Adds the specified object to the priority queue. Declaration public virtual void Add(T item) Parameters Type Name Description T item the object to be added. Exceptions Type Condition System.InvalidCastException if the specified element cannot be compared with elements currently in this priority queue according to the priority queue's ordering System.ArgumentNullException if item is null . | Improve this Doc View Source AddAll(ICollection<T>) Declaration public virtual bool AddAll(ICollection<T> collection) Parameters Type Name Description System.Collections.Generic.ICollection <T> collection Returns Type Description System.Boolean | Improve this Doc View Source Clear() Removes all of the elements from this priority queue. Declaration public virtual void Clear() | Improve this Doc View Source Contains(T) Returns true if this queue contains the specified element. More formally, returns true if and only if this queue contains at least one element item such that o.Equals(item) . Declaration public virtual bool Contains(T item) Parameters Type Name Description T item The object to locate in the priority queue Returns Type Description System.Boolean true if item is found in the priority queue; otherwise, false. | Improve this Doc View Source CopyTo(T[], Int32) Copies the elements of the priority queue to an Array, starting at a particular Array index. Declaration public virtual void CopyTo(T[] array, int arrayIndex) Parameters Type Name Description T[] array The one-dimensional Array that is the destination of the elements copied from the priority queue. The Array must have zero-based indexing. System.Int32 arrayIndex The zero-based index in array at which copying begins. Remarks It is not guaranteed that items will be copied in the sorted order. | Improve this Doc View Source Element() Retrieves, but does not remove, the head of this queue. This method differs from Peek() only in that it throws an exception if this queue is empty. This implementation returns the result of Peek() unless the queue is empty. Declaration public virtual T Element() Returns Type Description T the head of this queue Exceptions Type Condition System.Collections.Generic.KeyNotFoundException if this queue is empty | Improve this Doc View Source GetEnumerator() Gets the enumerator of the priority queue, which will not return elements in any specified ordering. Declaration public virtual IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> The enumerator of the priority queue. Remarks Returned enumerator does not iterate elements in sorted order. | Improve this Doc View Source Offer(T) Inserts the specified element into this priority queue. Declaration public virtual bool Offer(T item) Parameters Type Name Description T item the element to add to the priority queue. Returns Type Description System.Boolean always true Exceptions Type Condition System.InvalidCastException if the specified element cannot be compared with elements currently in this priority queue according to the priority queue's ordering System.ArgumentNullException if the specified element is null | Improve this Doc View Source Peek() Gets but does not remove the head of the queue. Declaration public virtual T Peek() Returns Type Description T the head of the queue or null if the queue is empty. | Improve this Doc View Source Poll() Gets and removes the head of the queue. Declaration public virtual T Poll() Returns Type Description T the head of the queue or null if the queue is empty. | Improve this Doc View Source Remove() Retrieves and removes the head of this queue. This method differs from Poll() only in that it throws an exception if this queue is empty. This implementation returns the result of Poll() unless the queue is empty. Declaration public virtual T Remove() Returns Type Description T the head of this queue Exceptions Type Condition System.Collections.Generic.KeyNotFoundException if this queue is empty | Improve this Doc View Source Remove(T) Removes the specified object from the priority queue. Declaration public virtual bool Remove(T item) Parameters Type Name Description T item the object to be removed. Returns Type Description System.Boolean true if the object was in the priority queue, false if the object Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the collection. Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Enumerator Remarks Returned enumerator does not iterate elements in sorted order. Implements System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.SignedZeroComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SignedZeroComparer.html",
    "title": "Class SignedZeroComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SignedZeroComparer LUCENENET specific comparer to handle the special case of comparing negative zero with positive zero. For IEEE floating-point numbers, there is a distinction of negative and positive zero. Reference: http://stackoverflow.com/a/3139636 Inheritance System.Object SignedZeroComparer Implements System.Collections.Generic.IComparer < System.Double > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class SignedZeroComparer : IComparer<double> Methods | Improve this Doc View Source Compare(Double, Double) Declaration public int Compare(double v1, double v2) Parameters Type Name Description System.Double v1 System.Double v2 Returns Type Description System.Int32 Implements System.Collections.Generic.IComparer<T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilter.html",
    "title": "Class PatternReplaceCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternReplaceCharFilter CharFilter that uses a regular expression for the target of replace string. The pattern match will be done in each \"block\" in char stream. ex1) source=\"aa bb aa bb\", pattern=\"(aa)\\s+(bb)\" replacement=\"$1#$2\" output=\"aa#bb aa#bb\" NOTE: If you produce a phrase that has different length to source string and the field is used for highlighting for a term of the phrase, you will face a trouble. ex2) source=\"aa123bb\", pattern=\"(aa)\\d+(bb)\" replacement=\"$1 $2\" output=\"aa bb\" and you want to search bb and highlight it, you will get highlight snippet=\"aa1<em>23bb</em>\" @since Solr 1.5 Inheritance System.Object System.IO.TextReader CharFilter BaseCharFilter PatternReplaceCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternReplaceCharFilter : BaseCharFilter, IDisposable Constructors | Improve this Doc View Source PatternReplaceCharFilter(Regex, String, Int32, String, TextReader) Declaration [Obsolete] public PatternReplaceCharFilter(Regex pattern, string replacement, int maxBlockChars, string blockDelimiter, TextReader in) Parameters Type Name Description System.Text.RegularExpressions.Regex pattern System.String replacement System.Int32 maxBlockChars System.String blockDelimiter System.IO.TextReader in | Improve this Doc View Source PatternReplaceCharFilter(Regex, String, TextReader) Declaration public PatternReplaceCharFilter(Regex pattern, string replacement, TextReader in) Parameters Type Name Description System.Text.RegularExpressions.Regex pattern System.String replacement System.IO.TextReader in Fields | Improve this Doc View Source DEFAULT_MAX_BLOCK_CHARS Declaration [Obsolete] public const int DEFAULT_MAX_BLOCK_CHARS = 10000 Field Value Type Description System.Int32 Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides BaseCharFilter.Correct(Int32) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternReplaceCharFilterFactory.html",
    "title": "Class PatternReplaceCharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternReplaceCharFilterFactory Factory for PatternReplaceCharFilter . <fieldType name=\"text_ptnreplace\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PatternReplaceCharFilterFactory\" pattern=\"([^a-z])\" replacement=\"\"/> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 3.1 Inheritance System.Object AbstractAnalysisFactory CharFilterFactory PatternReplaceCharFilterFactory Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternReplaceCharFilterFactory : CharFilterFactory Constructors | Improve this Doc View Source PatternReplaceCharFilterFactory(IDictionary<String, String>) Creates a new PatternReplaceCharFilterFactory Declaration public PatternReplaceCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternReplaceFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternReplaceFilter.html",
    "title": "Class PatternReplaceFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternReplaceFilter A TokenFilter which applies a System.Text.RegularExpressions.Regex to each token in the stream, replacing match occurances with the specified replacement string. Note: Depending on the input and the pattern used and the input TokenStream , this TokenFilter may produce Token s whose text is the empty string. Inheritance System.Object AttributeSource TokenStream TokenFilter PatternReplaceFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternReplaceFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PatternReplaceFilter(TokenStream, Regex, String, Boolean) Constructs an instance to replace either the first, or all occurances Declaration public PatternReplaceFilter(TokenStream in, Regex pattern, string replacement, bool all) Parameters Type Name Description TokenStream in the TokenStream to process System.Text.RegularExpressions.Regex pattern the pattern (a System.Text.RegularExpressions.Regex object) to apply to each Token System.String replacement the \"replacement string\" to substitute, if null a blank string will be used. Note that this is not the literal string that will be used, '$' and '&apos; have special meaning. System.Boolean all if true, all matches will be replaced otherwise just the first match. See Also System.Text.RegularExpressions.Regex.Replace(System.String,System.String) Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also System.Text.RegularExpressions.Regex"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MatchAllDocsQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MatchAllDocsQueryNodeProcessor.html",
    "title": "Class MatchAllDocsQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MatchAllDocsQueryNodeProcessor This processor converts every WildcardQueryNode that is \" : \" to MatchAllDocsQueryNode . Inheritance System.Object QueryNodeProcessor MatchAllDocsQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MatchAllDocsQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source MatchAllDocsQueryNodeProcessor() Declaration public MatchAllDocsQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also MatchAllDocsQueryNode MatchAllDocsQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiFieldQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiFieldQueryNodeProcessor.html",
    "title": "Class MultiFieldQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFieldQueryNodeProcessor This processor is used to expand terms so the query looks for the same term in different fields. It also boosts a query based on its field. This processor looks for every IFieldableNode contained in the query node tree. If a IFieldableNode is found, it checks if there is a MULTI_FIELDS defined in the QueryConfigHandler . If there is, the IFieldableNode is cloned N times and the clones are added to a BooleanQueryNode together with the original node. N is defined by the number of fields that it will be expanded to. The BooleanQueryNode is returned. Inheritance System.Object QueryNodeProcessor MultiFieldQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiFieldQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source MultiFieldQueryNodeProcessor() Declaration public MultiFieldQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected override void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Overrides QueryNodeProcessor.ProcessChildren(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also MULTI_FIELDS"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiTermRewriteMethodProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.MultiTermRewriteMethodProcessor.html",
    "title": "Class MultiTermRewriteMethodProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermRewriteMethodProcessor This processor instates the default MultiTermQuery.RewriteMethod , CONSTANT_SCORE_AUTO_REWRITE_DEFAULT , for multi-term query nodes. Inheritance System.Object QueryNodeProcessor MultiTermRewriteMethodProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class MultiTermRewriteMethodProcessor : QueryNodeProcessor, IQueryNodeProcessor Fields | Improve this Doc View Source TAG_ID Declaration public static readonly string TAG_ID Field Value Type Description System.String Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericQueryNodeProcessor.html",
    "title": "Class NumericQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericQueryNodeProcessor This processor is used to convert FieldQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every FieldQueryNode found. If NUMERIC_CONFIG is found, it considers that FieldQueryNode to be a numeric query and convert it to NumericRangeQueryNode with upper and lower inclusive and lower and upper equals to the value represented by the FieldQueryNode converted to System.Object representing a .NET numeric type. It means that field:1 is converted to field:[1 TO 1] . Note that FieldQueryNode s children of a IRangeQueryNode are ignored. Inheritance System.Object QueryNodeProcessor NumericQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NumericQueryNodeProcessor() Constructs a NumericQueryNodeProcessor object. Declaration public NumericQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also NUMERIC_CONFIG FieldQueryNode NumericConfig NumericQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.NumericRangeQueryNodeProcessor.html",
    "title": "Class NumericRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQueryNodeProcessor This processor is used to convert TermRangeQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every TermRangeQueryNode found. If NUMERIC_CONFIG is found, it considers that TermRangeQueryNode to be a numeric range query and convert it to NumericRangeQueryNode . Inheritance System.Object QueryNodeProcessor NumericRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NumericRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NumericRangeQueryNodeProcessor() Constructs an empty NumericRangeQueryNode object. Declaration public NumericRangeQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also NUMERIC_CONFIG TermRangeQueryNode NumericConfig NumericRangeQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.OpenRangeQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.OpenRangeQueryNodeProcessor.html",
    "title": "Class OpenRangeQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenRangeQueryNodeProcessor Processes TermRangeQuery s with open ranges. Inheritance System.Object QueryNodeProcessor OpenRangeQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class OpenRangeQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source OpenRangeQueryNodeProcessor() Declaration public OpenRangeQueryNodeProcessor() Fields | Improve this Doc View Source OPEN_RANGE_TOKEN Declaration public static readonly string OPEN_RANGE_TOKEN Field Value Type Description System.String Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.PhraseSlopQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.PhraseSlopQueryNodeProcessor.html",
    "title": "Class PhraseSlopQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhraseSlopQueryNodeProcessor This processor removes invalid SlopQueryNode objects in the query node tree. A SlopQueryNode is invalid if its child is neither a TokenizedPhraseQueryNode nor a MultiPhraseQueryNode . Inheritance System.Object QueryNodeProcessor PhraseSlopQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class PhraseSlopQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source PhraseSlopQueryNodeProcessor() Declaration public PhraseSlopQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also SlopQueryNode"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.FrenchStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.FrenchStemmer.html",
    "title": "Class FrenchStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram FrenchStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.German2Stemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.German2Stemmer.html",
    "title": "Class German2Stemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class German2Stemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram German2Stemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class German2Stemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.GermanStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.GermanStemmer.html",
    "title": "Class GermanStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram GermanStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.HungarianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Tartarus.Snowball.Ext.HungarianStemmer.html",
    "title": "Class HungarianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HungarianStemmer This class was automatically generated by a Snowball to Java compiler It implements the stemming algorithm defined by a snowball script. Inheritance System.Object SnowballProgram HungarianStemmer Inherited Members SnowballProgram.SetCurrent(String) SnowballProgram.Current SnowballProgram.SetCurrent(Char[], Int32) SnowballProgram.CurrentBuffer SnowballProgram.CurrentBufferLength SnowballProgram.m_current SnowballProgram.m_cursor SnowballProgram.m_limit SnowballProgram.m_limit_backward SnowballProgram.m_bra SnowballProgram.m_ket SnowballProgram.CopyFrom(SnowballProgram) SnowballProgram.InGrouping(Char[], Int32, Int32) SnowballProgram.InGroupingB(Char[], Int32, Int32) SnowballProgram.OutGrouping(Char[], Int32, Int32) SnowballProgram.OutGroupingB(Char[], Int32, Int32) SnowballProgram.InRange(Int32, Int32) SnowballProgram.InRangeB(Int32, Int32) SnowballProgram.OutRange(Int32, Int32) SnowballProgram.OutRangeB(Int32, Int32) SnowballProgram.Eq_S(Int32, String) SnowballProgram.Eq_S_B(Int32, String) SnowballProgram.Eq_V(String) SnowballProgram.Eq_V_B(String) SnowballProgram.FindAmong(Among[], Int32) SnowballProgram.FindAmongB(Among[], Int32) SnowballProgram.ReplaceS(Int32, Int32, String) SnowballProgram.SliceCheck() SnowballProgram.SliceFrom(String) SnowballProgram.SliceDel() SnowballProgram.Insert(Int32, Int32, String) SnowballProgram.SliceTo(StringBuilder) SnowballProgram.AssignTo(StringBuilder) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Tartarus.Snowball.Ext Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HungarianStemmer : SnowballProgram Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Stem() Declaration public override bool Stem() Returns Type Description System.Boolean Overrides SnowballProgram.Stem()"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedIndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedIndexOutput.html",
    "title": "Class BufferedIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedIndexOutput Base implementation class for buffered IndexOutput . Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput FSDirectory.FSIndexOutput Implements System.IDisposable Inherited Members IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class BufferedIndexOutput : IndexOutput, IDisposable Constructors | Improve this Doc View Source BufferedIndexOutput() Creates a new BufferedIndexOutput with the default buffer size ( DEFAULT_BUFFER_SIZE bytes see DEFAULT_BUFFER_SIZE ) Declaration public BufferedIndexOutput() | Improve this Doc View Source BufferedIndexOutput(Int32) Creates a new BufferedIndexOutput with the given buffer size. Declaration public BufferedIndexOutput(int bufferSize) Parameters Type Name Description System.Int32 bufferSize the buffer size in bytes used to buffer writes internally. Exceptions Type Condition System.ArgumentException if the given buffer size is less or equal to 0 Fields | Improve this Doc View Source DEFAULT_BUFFER_SIZE The default buffer size in bytes ( DEFAULT_BUFFER_SIZE ). Declaration public const int DEFAULT_BUFFER_SIZE = 16384 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BufferSize Returns size of the used output buffer in bytes. Declaration public int BufferSize { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Checksum Declaration public override long Checksum { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Checksum | Improve this Doc View Source Length Declaration public abstract override long Length { get; } Property Value Type Description System.Int64 Overrides IndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexOutput.Dispose(Boolean) | Improve this Doc View Source Flush() Declaration public override void Flush() Overrides IndexOutput.Flush() | Improve this Doc View Source FlushBuffer(Byte[], Int32, Int32) Expert: implements buffer write. Writes bytes at the current position in the output. Declaration protected abstract void FlushBuffer(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 offset the offset in the byte array System.Int32 len the number of bytes to write | Improve this Doc View Source GetFilePointer() Declaration public override long GetFilePointer() Returns Type Description System.Int64 Overrides IndexOutput.GetFilePointer() | Improve this Doc View Source Seek(Int64) Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexOutput.Seek(Int64) | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataInput.html",
    "title": "Class ByteArrayDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteArrayDataInput DataInput backed by a byte array. WARNING: this class omits all low-level checks. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DataInput ByteArrayDataInput Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class ByteArrayDataInput : DataInput Constructors | Improve this Doc View Source ByteArrayDataInput() Declaration public ByteArrayDataInput() | Improve this Doc View Source ByteArrayDataInput(Byte[]) Declaration public ByteArrayDataInput(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source ByteArrayDataInput(Byte[], Int32, Int32) Declaration public ByteArrayDataInput(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Properties | Improve this Doc View Source Eof Declaration public bool Eof { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Position Declaration public int Position { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadInt16() LUCENENET NOTE: Important - always cast to ushort (System.UInt16) before using to ensure the value is positive! NOTE: this was readShort() in Lucene Declaration public override short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source ReadVInt32() NOTE: this was readVInt() in Lucene Declaration public override int ReadVInt32() Returns Type Description System.Int32 Overrides DataInput.ReadVInt32() | Improve this Doc View Source ReadVInt64() NOTE: this was readVLong() in Lucene Declaration public override long ReadVInt64() Returns Type Description System.Int64 Overrides DataInput.ReadVInt64() | Improve this Doc View Source Reset(Byte[]) Declaration public void Reset(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public void Reset(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len | Improve this Doc View Source Rewind() NOTE: sets pos to 0, which is not right if you had called reset w/ non-zero offset!! Declaration public void Rewind() | Improve this Doc View Source SkipBytes(Int64) Declaration public override void SkipBytes(long count) Parameters Type Name Description System.Int64 count Overrides DataInput.SkipBytes(Int64) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteArrayDataOutput.html",
    "title": "Class ByteArrayDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteArrayDataOutput DataOutput backed by a byte array. WARNING: this class omits most low-level checks, so be sure to test heavily with assertions enabled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DataOutput ByteArrayDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class ByteArrayDataOutput : DataOutput Constructors | Improve this Doc View Source ByteArrayDataOutput() Declaration public ByteArrayDataOutput() | Improve this Doc View Source ByteArrayDataOutput(Byte[]) Declaration public ByteArrayDataOutput(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source ByteArrayDataOutput(Byte[], Int32, Int32) Declaration public ByteArrayDataOutput(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Properties | Improve this Doc View Source Position Declaration public virtual int Position { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Reset(Byte[]) Declaration public virtual void Reset(byte[] bytes) Parameters Type Name Description System.Byte [] bytes | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public virtual void Reset(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.ByteBufferIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ByteBufferIndexInput.html",
    "title": "Class ByteBufferIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteBufferIndexInput Base IndexInput implementation that uses an array of ByteBuffer s to represent a file. Because Java's ByteBuffer uses an System.Int32 to address the values, it's necessary to access a file greater System.Int32.MaxValue in size using multiple byte buffers. For efficiency, this class requires that the buffers are a power-of-two ( chunkSizePower ). Inheritance System.Object DataInput IndexInput ByteBufferIndexInput MMapDirectory.MMapIndexInput Implements System.IDisposable Inherited Members IndexInput.Dispose() DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadVInt32() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class ByteBufferIndexInput : IndexInput, IDisposable Properties | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override sealed object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source FreeBuffer(ByteBuffer) Called when the contents of a buffer will be no longer needed. Declaration protected abstract void FreeBuffer(ByteBuffer b) Parameters Type Name Description ByteBuffer b | Improve this Doc View Source GetFilePointer() Declaration public override sealed long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source ReadByte() Declaration public override sealed byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadInt16() NOTE: this was readShort() in Lucene Declaration public override sealed short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override sealed int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override sealed long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source Seek(Int64) Declaration public override sealed void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) | Improve this Doc View Source Slice(String, Int64, Int64) Creates a slice of this index input, with the given description, offset, and length. The slice is seeked to the beginning. Declaration public ByteBufferIndexInput Slice(string sliceDescription, long offset, long length) Parameters Type Name Description System.String sliceDescription System.Int64 offset System.Int64 length Returns Type Description ByteBufferIndexInput | Improve this Doc View Source ToString() Declaration public override sealed string ToString() Returns Type Description System.String Overrides IndexInput.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.ChecksumIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.ChecksumIndexInput.html",
    "title": "Class ChecksumIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChecksumIndexInput Extension of IndexInput , computing checksum as it goes. Callers can retrieve the checksum via Checksum . Inheritance System.Object DataInput IndexInput ChecksumIndexInput BufferedChecksumIndexInput Implements System.IDisposable Inherited Members IndexInput.Dispose() IndexInput.Dispose(Boolean) IndexInput.GetFilePointer() IndexInput.Length IndexInput.ToString() IndexInput.Clone() DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class ChecksumIndexInput : IndexInput, IDisposable Constructors | Improve this Doc View Source ChecksumIndexInput(String) resourceDescription should be a non-null, opaque string describing this resource; it's returned from System.Object.ToString() . Declaration protected ChecksumIndexInput(string resourceDescription) Parameters Type Name Description System.String resourceDescription Properties | Improve this Doc View Source Checksum Returns the current checksum value Declaration public abstract long Checksum { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Seek(Int64) Sets current position in this file, where the next read will occur. ChecksumIndexInput can only seek forward and seeks are expensive since they imply to read bytes in-between the current position and the target position in order to update the checksum. Declaration public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.CompoundFileDirectory.html",
    "title": "Class CompoundFileDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundFileDirectory Class for accessing a compound stream. This class implements a directory, but is limited to only read operations. Directory methods that would normally modify data throw an exception. All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats used by the Codec . When using the Compound File format these files are collapsed into a single .cfs file (except for the LiveDocsFormat , with a corresponding .cfe file indexing its sub-files. Files: .cfs : An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. .cfe : The \"virtual\" compound file's entry table holding all entries in the corresponding .cfs file. Description: Compound (.cfs) --> Header, FileData FileCount Compound Entry Table (.cfe) --> Header, FileCount, <FileName, DataOffset, DataLength> FileCount , Footer Header --> WriteHeader(DataOutput, String, Int32) FileCount --> WriteVInt32(Int32) DataOffset,DataLength --> WriteInt64(Int64) FileName --> WriteString(String) FileData --> raw file data Footer --> WriteFooter(IndexOutput) Notes: FileCount indicates how many files are contained in this compound file. The entry table that follows has that many entries. Each directory entry contains a long pointer to the start of this file's data section, the files length, and a System.String with that file's name. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory CompoundFileDirectory Implements System.IDisposable Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.GetLockID() Directory.Copy(Directory, String, String, IOContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class CompoundFileDirectory : BaseDirectory, IDisposable Constructors | Improve this Doc View Source CompoundFileDirectory(Directory, String, IOContext, Boolean) Create a new CompoundFileDirectory . Declaration public CompoundFileDirectory(Directory directory, string fileName, IOContext context, bool openForWrite) Parameters Type Name Description Directory directory System.String fileName IOContext context System.Boolean openForWrite Properties | Improve this Doc View Source Directory Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source Name Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Not implemented Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) Exceptions Type Condition System.NotSupportedException always: not supported by CFS | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Returns true iff a file with the given name exists. Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length of a file in the directory. Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) Exceptions Type Condition System.IO.IOException if the file does not exist | Improve this Doc View Source ListAll() Returns an array of strings, one for each file in the directory. Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source MakeLock(String) Not implemented Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides BaseDirectory.MakeLock(String) Exceptions Type Condition System.NotSupportedException always: not supported by CFS | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source RenameFile(String, String) Not implemented Declaration public void RenameFile(string from, string to) Parameters Type Name Description System.String from System.String to Exceptions Type Condition System.NotSupportedException always: not supported by CFS | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.SimpleFSLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SimpleFSLockFactory.html",
    "title": "Class SimpleFSLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFSLockFactory Implements LockFactory using System.IO.File.WriteAllText(System.String,System.String,System.Text.Encoding) (writes the file with UTF8 encoding and no byte order mark). Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change to all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that this or any other LockFactory is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory SimpleFSLockFactory Inherited Members FSLockFactory.m_lockDir FSLockFactory.SetLockDir(DirectoryInfo) FSLockFactory.LockDir FSLockFactory.ToString() LockFactory.m_lockPrefix LockFactory.LockPrefix System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class SimpleFSLockFactory : FSLockFactory Constructors | Improve this Doc View Source SimpleFSLockFactory() Create a SimpleFSLockFactory instance, with null (unset) lock directory. When you pass this factory to a FSDirectory subclass, the lock directory is automatically set to the directory itself. Be sure to create one instance for each directory your create! Declaration public SimpleFSLockFactory() | Improve this Doc View Source SimpleFSLockFactory(DirectoryInfo) Instantiate using the provided directory (as a System.IO.DirectoryInfo instance). Declaration public SimpleFSLockFactory(DirectoryInfo lockDir) Parameters Type Name Description System.IO.DirectoryInfo lockDir where lock files should be created. | Improve this Doc View Source SimpleFSLockFactory(String) Instantiate using the provided directory name ( System.String ). Declaration public SimpleFSLockFactory(string lockDirName) Parameters Type Name Description System.String lockDirName where lock files should be created. Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) Extension Methods Number.IsNumber(Object) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.SingleInstanceLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.SingleInstanceLockFactory.html",
    "title": "Class SingleInstanceLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleInstanceLockFactory Implements LockFactory for a single in-process instance, meaning all locking will take place through this one instance. Only use this LockFactory when you are certain all IndexReader s and IndexWriter s for a given index are running against a single shared in-process Directory instance. This is currently the default locking for RAMDirectory . Inheritance System.Object LockFactory SingleInstanceLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class SingleInstanceLockFactory : LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) Extension Methods Number.IsNumber(Object) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.TrackingDirectoryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.TrackingDirectoryWrapper.html",
    "title": "Class TrackingDirectoryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrackingDirectoryWrapper A delegating Directory that records which files were written to and deleted. Inheritance System.Object Directory FilterDirectory TrackingDirectoryWrapper Implements System.IDisposable Inherited Members FilterDirectory.m_input FilterDirectory.Delegate FilterDirectory.ListAll() FilterDirectory.FileExists(String) FilterDirectory.FileLength(String) FilterDirectory.Sync(ICollection<String>) FilterDirectory.OpenInput(String, IOContext) FilterDirectory.MakeLock(String) FilterDirectory.ClearLock(String) FilterDirectory.Dispose(Boolean) FilterDirectory.SetLockFactory(LockFactory) FilterDirectory.GetLockID() FilterDirectory.LockFactory FilterDirectory.ToString() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.EnsureOpen() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public sealed class TrackingDirectoryWrapper : FilterDirectory, IDisposable Constructors | Improve this Doc View Source TrackingDirectoryWrapper(Directory) Declaration public TrackingDirectoryWrapper(Directory in) Parameters Type Name Description Directory in Properties | Improve this Doc View Source CreatedFiles Declaration public ISet<string> CreatedFiles { get; } Property Value Type Description System.Collections.Generic.ISet < System.String > Methods | Improve this Doc View Source Copy(Directory, String, String, IOContext) Declaration public override void Copy(Directory to, string src, string dest, IOContext context) Parameters Type Name Description Directory to System.String src System.String dest IOContext context Overrides Directory.Copy(Directory, String, String, IOContext) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides FilterDirectory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides FilterDirectory.DeleteFile(String) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.VerifyingLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.VerifyingLockFactory.html",
    "title": "Class VerifyingLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VerifyingLockFactory A LockFactory that wraps another LockFactory and verifies that each lock obtain/release is \"correct\" (never results in two processes holding the lock at the same time). It does this by contacting an external server ( LockVerifyServer ) to assert that at most one process holds the lock at a time. To use this, you should also run LockVerifyServer on the host & port matching what you pass to the constructor. Inheritance System.Object LockFactory VerifyingLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class VerifyingLockFactory : LockFactory Constructors | Improve this Doc View Source VerifyingLockFactory(LockFactory, Stream) Creates a new VerifyingLockFactory instance. Declaration public VerifyingLockFactory(LockFactory lf, Stream stream) Parameters Type Name Description LockFactory lf the LockFactory that we are testing System.IO.Stream stream the socket's stream input/output to LockVerifyServer Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) Extension Methods Number.IsNumber(Object) See Also LockVerifyServer LockStressTest"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.DistanceFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.DistanceFacetsExample.html",
    "title": "Class DistanceFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistanceFacetsExample Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. Inheritance System.Object DistanceFacetsExample Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class DistanceFacetsExample : IDisposable Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Expressions; using Lucene.Net.Expressions.JS; using Lucene.Net.Facet; using Lucene.Net.Facet.Range; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Index; using Lucene.Net.Queries; using Lucene.Net.Queries.Function; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Support; using Lucene.Net.Util; using System; using System.Diagnostics; using System.Globalization; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of dynamic range faceting, using the /// expressions module to calculate distance. /// </summary> public class DistanceFacetsExample : IDisposable { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; internal static readonly DoubleRange ONE_KM = new DoubleRange(\"< 1 km\", 0.0, true, 1.0, false); internal static readonly DoubleRange TWO_KM = new DoubleRange(\"< 2 km\", 0.0, true, 2.0, false); internal static readonly DoubleRange FIVE_KM = new DoubleRange(\"< 5 km\", 0.0, true, 5.0, false); internal static readonly DoubleRange TEN_KM = new DoubleRange(\"< 10 km\", 0.0, true, 10.0, false); private readonly Directory indexDir = new RAMDirectory(); private IndexSearcher searcher; private readonly FacetsConfig config = new FacetsConfig(); /// <summary>The \"home\" latitude.</summary> public readonly static double ORIGIN_LATITUDE = 40.7143528; /// <summary>The \"home\" longitude.</summary> public readonly static double ORIGIN_LONGITUDE = -74.0059731; /// <summary> /// Radius of the Earth in KM /// <para/> /// NOTE: this is approximate, because the earth is a bit /// wider at the equator than the poles. See /// http://en.wikipedia.org/wiki/Earth_radius /// </summary> public readonly static double EARTH_RADIUS_KM = 6371.01; /// <summary>Build the example index.</summary> public void Index() { using (IndexWriter writer = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { // TODO: we could index in radians instead ... saves all the conversions in GetBoundingBoxFilter // Add documents with latitude/longitude location: Document doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.759011, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -73.9844722, Field.Store.NO)); writer.AddDocument(doc); doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.718266, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -74.007819, Field.Store.NO)); writer.AddDocument(doc); doc = new Document(); doc.Add(new DoubleField(\"latitude\", 40.7051157, Field.Store.NO)); doc.Add(new DoubleField(\"longitude\", -74.0088305, Field.Store.NO)); writer.AddDocument(doc); // Open near-real-time searcher searcher = new IndexSearcher(DirectoryReader.Open(writer, true)); } // Disposes writer } private ValueSource GetDistanceValueSource() { Expression distance = JavascriptCompiler.Compile( string.Format(CultureInfo.InvariantCulture, \"haversin({0:R},{1:R},latitude,longitude)\", ORIGIN_LATITUDE, ORIGIN_LONGITUDE)); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"latitude\", SortFieldType.DOUBLE)); bindings.Add(new SortField(\"longitude\", SortFieldType.DOUBLE)); return distance.GetValueSource(bindings); } /// <summary> /// Given a latitude and longitude (in degrees) and the /// maximum great circle (surface of the earth) distance, /// returns a simple Filter bounding box to \"fast match\" /// candidates. /// </summary> public static Filter GetBoundingBoxFilter(double originLat, double originLng, double maxDistanceKM) { // Basic bounding box geo math from // http://JanMatuschek.de/LatitudeLongitudeBoundingCoordinates, // licensed under creative commons 3.0: // http://creativecommons.org/licenses/by/3.0 // TODO: maybe switch to recursive prefix tree instead // (in lucene/spatial)? It should be more efficient // since it's a 2D trie... // Degrees -> Radians: double originLatRadians = originLat.ToRadians(); double originLngRadians = originLng.ToRadians(); double angle = maxDistanceKM / (SloppyMath.EarthDiameter(originLat) / 2.0); double minLat = originLatRadians - angle; double maxLat = originLatRadians + angle; double minLng; double maxLng; if (minLat > -90.ToRadians() && maxLat < 90.ToRadians()) { double delta = Math.Asin(Math.Sin(angle) / Math.Cos(originLatRadians)); minLng = originLngRadians - delta; if (minLng < -180.ToRadians()) { minLng += 2 * Math.PI; } maxLng = originLngRadians + delta; if (maxLng > 180.ToRadians()) { maxLng -= 2 * Math.PI; } } else { // The query includes a pole! minLat = Math.Max(minLat, -90.ToRadians()); maxLat = Math.Min(maxLat, 90.ToRadians()); minLng = -180.ToRadians(); maxLng = 180.ToRadians(); } BooleanFilter f = new BooleanFilter(); // Add latitude range filter: f.Add(NumericRangeFilter.NewDoubleRange(\"latitude\", minLat.ToDegrees(), maxLat.ToDegrees(), true, true), Occur.MUST); // Add longitude range filter: if (minLng > maxLng) { // The bounding box crosses the international date // line: BooleanFilter lonF = new BooleanFilter(); lonF.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", minLng.ToDegrees(), null, true, true), Occur.SHOULD); lonF.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", null, maxLng.ToDegrees(), true, true), Occur.SHOULD); f.Add(lonF, Occur.MUST); } else { f.Add(NumericRangeFilter.NewDoubleRange(\"longitude\", minLng.ToDegrees(), maxLng.ToDegrees(), true, true), Occur.MUST); } return f; } /// <summary>User runs a query and counts facets.</summary> public FacetResult Search() { FacetsCollector fc = new FacetsCollector(); searcher.Search(new MatchAllDocsQuery(), fc); Facets facets = new DoubleRangeFacetCounts(\"field\", GetDistanceValueSource(), fc, GetBoundingBoxFilter(ORIGIN_LATITUDE, ORIGIN_LONGITUDE, 10.0), ONE_KM, TWO_KM, FIVE_KM, TEN_KM); return facets.GetTopChildren(10, \"field\"); } /// <summary>User drills down on the specified range.</summary> public TopDocs DrillDown(DoubleRange range) { // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(null); ValueSource vs = GetDistanceValueSource(); q.Add(\"field\", range.GetFilter(GetBoundingBoxFilter(ORIGIN_LATITUDE, ORIGIN_LONGITUDE, range.Max), vs)); DrillSideways ds = new SearchDrillSideways(searcher, config, vs); return ds.Search(q, 10).Hits; } private class SearchDrillSideways : DrillSideways { private readonly ValueSource vs; public SearchDrillSideways(IndexSearcher indexSearcher, FacetsConfig facetsConfig, ValueSource valueSource) : base(indexSearcher, facetsConfig, (TaxonomyReader)null) { this.vs = valueSource; } protected override Facets BuildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, string[] drillSidewaysDims) { Debug.Assert(drillSideways.Length == 1); return new DoubleRangeFacetCounts(\"field\", vs, drillSideways[0], ONE_KM, TWO_KM, FIVE_KM, TEN_KM); } } public void Dispose() { searcher?.IndexReader?.Dispose(); indexDir?.Dispose(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { using (DistanceFacetsExample example = new DistanceFacetsExample()) { example.Index(); Console.WriteLine(\"Distance facet counting example:\"); Console.WriteLine(\"-----------------------\"); Console.WriteLine(example.Search()); Console.WriteLine(\"\\n\"); Console.WriteLine(\"Distance facet drill-down example (field/< 2 km):\"); Console.WriteLine(\"---------------------------------------------\"); TopDocs hits = example.DrillDown(TWO_KM); Console.WriteLine(hits.TotalHits + \" totalHits\"); } // Disposes example } } } Fields | Improve this Doc View Source EARTH_RADIUS_KM Radius of the Earth in KM NOTE: this is approximate, because the earth is a bit wider at the equator than the poles. See http://en.wikipedia.org/wiki/Earth_radius Declaration public static readonly double EARTH_RADIUS_KM Field Value Type Description System.Double | Improve this Doc View Source ORIGIN_LATITUDE The \"home\" latitude. Declaration public static readonly double ORIGIN_LATITUDE Field Value Type Description System.Double | Improve this Doc View Source ORIGIN_LONGITUDE The \"home\" longitude. Declaration public static readonly double ORIGIN_LONGITUDE Field Value Type Description System.Double Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source DrillDown(DoubleRange) User drills down on the specified range. Declaration public TopDocs DrillDown(DoubleRange range) Parameters Type Name Description DoubleRange range Returns Type Description TopDocs | Improve this Doc View Source GetBoundingBoxFilter(Double, Double, Double) Given a latitude and longitude (in degrees) and the maximum great circle (surface of the earth) distance, returns a simple Filter bounding box to \"fast match\" candidates. Declaration public static Filter GetBoundingBoxFilter(double originLat, double originLng, double maxDistanceKM) Parameters Type Name Description System.Double originLat System.Double originLng System.Double maxDistanceKM Returns Type Description Filter | Improve this Doc View Source Index() Build the example index. Declaration public void Index() | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Search() User runs a query and counts facets. Declaration public FacetResult Search() Returns Type Description FacetResult Implements System.IDisposable"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.RangeFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.RangeFacetsExample.html",
    "title": "Class RangeFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RangeFacetsExample Shows simple usage of dynamic range faceting. Inheritance System.Object RangeFacetsExample Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class RangeFacetsExample : IDisposable Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Range; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of dynamic range faceting. /// </summary> public class RangeFacetsExample : IDisposable { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private IndexSearcher searcher; private readonly long nowSec = DateTime.Now.Ticks; internal readonly Int64Range PAST_HOUR; internal readonly Int64Range PAST_SIX_HOURS; internal readonly Int64Range PAST_DAY; /// <summary>Constructor</summary> public RangeFacetsExample() { PAST_HOUR = new Int64Range(\"Past hour\", nowSec - 3600, true, nowSec, true); PAST_SIX_HOURS = new Int64Range(\"Past six hours\", nowSec - 6 * 3600, true, nowSec, true); PAST_DAY = new Int64Range(\"Past day\", nowSec - 24 * 3600, true, nowSec, true); } /// <summary>Build the example index.</summary> public void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { // Add documents with a fake timestamp, 1000 sec before // \"now\", 2000 sec before \"now\", ...: for (int i = 0; i < 100; i++) { Document doc = new Document(); long then = nowSec - i * 1000; // Add as doc values field, so we can compute range facets: doc.Add(new NumericDocValuesField(\"timestamp\", then)); // Add as numeric field so we can drill-down: doc.Add(new Int64Field(\"timestamp\", then, Field.Store.NO)); indexWriter.AddDocument(doc); } // Open near-real-time searcher searcher = new IndexSearcher(DirectoryReader.Open(indexWriter, true)); } // Disposes indexWriter } private FacetsConfig GetConfig() { return new FacetsConfig(); } /// <summary>User runs a query and counts facets.</summary> public FacetResult Search() { // Aggregates the facet counts FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); Facets facets = new Int64RangeFacetCounts(\"timestamp\", fc, PAST_HOUR, PAST_SIX_HOURS, PAST_DAY); return facets.GetTopChildren(10, \"timestamp\"); } /// <summary>User drills down on the specified range.</summary> public TopDocs DrillDown(Int64Range range) { // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(GetConfig()); q.Add(\"timestamp\", NumericRangeQuery.NewInt64Range(\"timestamp\", range.Min, range.Max, range.MinInclusive, range.MaxInclusive)); return searcher.Search(q, 10); } public void Dispose() { searcher?.IndexReader?.Dispose(); indexDir?.Dispose(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { using (RangeFacetsExample example = new RangeFacetsExample()) { example.Index(); Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); Console.WriteLine(example.Search()); Console.WriteLine(\"\\n\"); Console.WriteLine(\"Facet drill-down example (timestamp/Past six hours):\"); Console.WriteLine(\"---------------------------------------------\"); TopDocs hits = example.DrillDown(example.PAST_SIX_HOURS); Console.WriteLine(hits.TotalHits + \" TotalHits\"); } // Disposes example } } } Constructors | Improve this Doc View Source RangeFacetsExample() Constructor Declaration public RangeFacetsExample() Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source DrillDown(Int64Range) User drills down on the specified range. Declaration public TopDocs DrillDown(Int64Range range) Parameters Type Name Description Int64Range range Returns Type Description TopDocs | Improve this Doc View Source Index() Build the example index. Declaration public void Index() | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Search() User runs a query and counts facets. Declaration public FacetResult Search() Returns Type Description FacetResult Implements System.IDisposable"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DualSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.DualSingleFunction.html",
    "title": "Class DualSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DualSingleFunction Abstract ValueSource implementation which wraps two ValueSource s and applies an extendible System.Single function to their values. NOTE: This was DualFloatFunction in Lucene Inheritance System.Object ValueSource DualSingleFunction DivSingleFunction PowSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class DualSingleFunction : ValueSource Constructors | Improve this Doc View Source DualSingleFunction(ValueSource, ValueSource) Declaration public DualSingleFunction(ValueSource a, ValueSource b) Parameters Type Name Description ValueSource a the base. ValueSource b the exponent. Fields | Improve this Doc View Source m_a Declaration protected readonly ValueSource m_a Field Value Type Description ValueSource | Improve this Doc View Source m_b Declaration protected readonly ValueSource m_b Field Value Type Description ValueSource Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues, FunctionValues) Declaration protected abstract float Func(int doc, FunctionValues aVals, FunctionValues bVals) Parameters Type Name Description System.Int32 doc FunctionValues aVals FunctionValues bVals Returns Type Description System.Single | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.EnumFieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.EnumFieldSource.html",
    "title": "Class EnumFieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnumFieldSource Obtains System.Int32 field values from GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. StrVal of the value is not the System.Int32 value, but its System.String (displayed) value Inheritance System.Object ValueSource FieldCacheSource EnumFieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class EnumFieldSource : FieldCacheSource Constructors | Improve this Doc View Source EnumFieldSource(String, FieldCache.IInt32Parser, IDictionary<Nullable<Int32>, String>, IDictionary<String, Nullable<Int32>>) Declaration public EnumFieldSource(string field, FieldCache.IInt32Parser parser, IDictionary<int?, string> enumIntToStringMap, IDictionary<string, int?> enumStringToIntMap) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser System.Collections.Generic.IDictionary < System.Nullable < System.Int32 >, System.String > enumIntToStringMap System.Collections.Generic.IDictionary < System.String , System.Nullable < System.Int32 >> enumStringToIntMap Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.FieldCacheSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.FieldCacheSource.html",
    "title": "Class FieldCacheSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheSource A base class for ValueSource implementations that retrieve values for a single field from the FieldCache . Inheritance System.Object ValueSource FieldCacheSource ByteFieldSource BytesRefFieldSource DoubleFieldSource EnumFieldSource Int16FieldSource Int32FieldSource Int64FieldSource JoinDocFreqValueSource SingleFieldSource Inherited Members ValueSource.GetValues(IDictionary, AtomicReaderContext) ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class FieldCacheSource : ValueSource Constructors | Improve this Doc View Source FieldCacheSource(String) Declaration public FieldCacheSource(string field) Parameters Type Name Description System.String field Fields | Improve this Doc View Source m_cache Declaration protected readonly IFieldCache m_cache Field Value Type Description IFieldCache | Improve this Doc View Source m_field Declaration protected readonly string m_field Field Value Type Description System.String Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; } Property Value Type Description System.String | Improve this Doc View Source FieldCache Declaration public virtual IFieldCache FieldCache { get; } Property Value Type Description IFieldCache Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode()"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IDFValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IDFValueSource.html",
    "title": "Class IDFValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IDFValueSource Function that returns Idf(Int64, Int64) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal Inheritance System.Object ValueSource DocFreqValueSource IDFValueSource Inherited Members DocFreqValueSource.m_field DocFreqValueSource.m_indexedField DocFreqValueSource.m_val DocFreqValueSource.m_indexedBytes DocFreqValueSource.GetDescription() DocFreqValueSource.CreateWeight(IDictionary, IndexSearcher) DocFreqValueSource.GetHashCode() DocFreqValueSource.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class IDFValueSource : DocFreqValueSource Constructors | Improve this Doc View Source IDFValueSource(String, String, String, BytesRef) Declaration public IDFValueSource(string field, string val, string indexedField, BytesRef indexedBytes) Parameters Type Name Description System.String field System.String val System.String indexedField BytesRef indexedBytes Properties | Improve this Doc View Source Name Declaration public override string Name { get; } Property Value Type Description System.String Overrides DocFreqValueSource.Name Methods | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides DocFreqValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IfFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.IfFunction.html",
    "title": "Class IfFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IfFunction Depending on the System.Boolean value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.ifSource function, returns the value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.trueSource or Lucene.Net.Queries.Function.ValueSources.IfFunction.falseSource function. Inheritance System.Object ValueSource BoolFunction IfFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class IfFunction : BoolFunction Constructors | Improve this Doc View Source IfFunction(ValueSource, ValueSource, ValueSource) Declaration public IfFunction(ValueSource ifSource, ValueSource trueSource, ValueSource falseSource) Parameters Type Name Description ValueSource ifSource ValueSource trueSource ValueSource falseSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int16FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int16FieldSource.html",
    "title": "Class Int16FieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int16FieldSource Obtains System.Int16 field values from the FieldCache using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was ShortFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int16FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax [Obsolete] public class Int16FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int16FieldSource(String) Declaration public Int16FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int16FieldSource(String, FieldCache.IInt16Parser) Declaration public Int16FieldSource(string field, FieldCache.IInt16Parser parser) Parameters Type Name Description System.String field FieldCache.IInt16Parser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int32FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int32FieldSource.html",
    "title": "Class Int32FieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32FieldSource Obtains System.Int32 field values from GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was IntFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int32FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Int32FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int32FieldSource(String) Declaration public Int32FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int32FieldSource(String, FieldCache.IInt32Parser) Declaration public Int32FieldSource(string field, FieldCache.IInt32Parser parser) Parameters Type Name Description System.String field FieldCache.IInt32Parser parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int64FieldSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.Int64FieldSource.html",
    "title": "Class Int64FieldSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64FieldSource Obtains System.Int64 field values from GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was LongFieldSource in Lucene Inheritance System.Object ValueSource FieldCacheSource Int64FieldSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Int64FieldSource : FieldCacheSource Constructors | Improve this Doc View Source Int64FieldSource(String) Declaration public Int64FieldSource(string field) Parameters Type Name Description System.String field | Improve this Doc View Source Int64FieldSource(String, FieldCache.IInt64Parser) Declaration public Int64FieldSource(string field, FieldCache.IInt64Parser parser) Parameters Type Name Description System.String field FieldCache.IInt64Parser parser Fields | Improve this Doc View Source m_parser Declaration protected readonly FieldCache.IInt64Parser m_parser Field Value Type Description FieldCache.IInt64Parser Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source ExternalToInt64(String) NOTE: This was externalToLong() in Lucene Declaration public virtual long ExternalToInt64(string extVal) Parameters Type Name Description System.String extVal Returns Type Description System.Int64 | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext) | Improve this Doc View Source Int64ToObject(Int64) NOTE: This was longToObject() in Lucene Declaration public virtual object Int64ToObject(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.Object | Improve this Doc View Source Int64ToString(Int64) NOTE: This was longToString() in Lucene Declaration public virtual string Int64ToString(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.String | Improve this Doc View Source NewMutableValueInt64() NOTE: This was longToString() in Lucene Declaration protected virtual MutableValueInt64 NewMutableValueInt64() Returns Type Description MutableValueInt64"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.JoinDocFreqValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.JoinDocFreqValueSource.html",
    "title": "Class JoinDocFreqValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JoinDocFreqValueSource Use a field value and find the Document Frequency within another field. @since solr 4.0 Inheritance System.Object ValueSource FieldCacheSource JoinDocFreqValueSource Inherited Members FieldCacheSource.m_field FieldCacheSource.m_cache FieldCacheSource.FieldCache FieldCacheSource.Field ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class JoinDocFreqValueSource : FieldCacheSource Constructors | Improve this Doc View Source JoinDocFreqValueSource(String, String) Declaration public JoinDocFreqValueSource(string field, string qfield) Parameters Type Name Description System.String field System.String qfield Fields | Improve this Doc View Source m_qfield Declaration protected readonly string m_qfield Field Value Type Description System.String | Improve this Doc View Source NAME Declaration public const string NAME = \"joindf\" Field Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides FieldCacheSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides FieldCacheSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides FieldCacheSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LinearSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LinearSingleFunction.html",
    "title": "Class LinearSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LinearSingleFunction LinearSingleFunction implements a linear function over another ValueSource . Normally Used as an argument to a FunctionQuery NOTE: This was LinearFloatFunction in Lucene Inheritance System.Object ValueSource LinearSingleFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class LinearSingleFunction : ValueSource Constructors | Improve this Doc View Source LinearSingleFunction(ValueSource, Single, Single) Declaration public LinearSingleFunction(ValueSource source, float slope, float intercept) Parameters Type Name Description ValueSource source System.Single slope System.Single intercept Fields | Improve this Doc View Source m_intercept Declaration protected readonly float m_intercept Field Value Type Description System.Single | Improve this Doc View Source m_slope Declaration protected readonly float m_slope Field Value Type Description System.Single | Improve this Doc View Source m_source Declaration protected readonly ValueSource m_source Field Value Type Description ValueSource Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LiteralValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.LiteralValueSource.html",
    "title": "Class LiteralValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LiteralValueSource Pass a the field value through as a System.String , no matter the type // Q: doesn't this mean it's a \"str\"? Inheritance System.Object ValueSource LiteralValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class LiteralValueSource : ValueSource Constructors | Improve this Doc View Source LiteralValueSource(String) Declaration public LiteralValueSource(string str) Parameters Type Name Description System.String str Fields | Improve this Doc View Source hash Declaration public static readonly int hash Field Value Type Description System.Int32 | Improve this Doc View Source m_bytesRef Declaration protected readonly BytesRef m_bytesRef Field Value Type Description BytesRef | Improve this Doc View Source m_str Declaration protected readonly string m_str Field Value Type Description System.String Properties | Improve this Doc View Source Value returns the literal value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxDocValueSource.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxDocValueSource.html",
    "title": "Class MaxDocValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MaxDocValueSource Returns the value of MaxDoc for every document. This is the number of documents including deletions. Inheritance System.Object ValueSource MaxDocValueSource Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MaxDocValueSource : ValueSource Properties | Improve this Doc View Source Name Declaration public virtual string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MaxSingleFunction.html",
    "title": "Class MaxSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MaxSingleFunction MaxSingleFunction returns the max of it's components. NOTE: This was MaxFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MaxSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MaxSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source MaxSingleFunction(ValueSource[]) Declaration public MaxSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MinSingleFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MinSingleFunction.html",
    "title": "Class MinSingleFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MinSingleFunction MinSingleFunction returns the min of it's components. NOTE: This was MinFloatFunction in Lucene Inheritance System.Object ValueSource MultiSingleFunction MinSingleFunction Inherited Members MultiSingleFunction.m_sources MultiSingleFunction.GetDescription() MultiSingleFunction.GetValues(IDictionary, AtomicReaderContext) MultiSingleFunction.CreateWeight(IDictionary, IndexSearcher) MultiSingleFunction.GetHashCode() MultiSingleFunction.Equals(Object) ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class MinSingleFunction : MultiSingleFunction Constructors | Improve this Doc View Source MinSingleFunction(ValueSource[]) Declaration public MinSingleFunction(ValueSource[] sources) Parameters Type Name Description ValueSource [] sources Properties | Improve this Doc View Source Name Declaration protected override string Name { get; } Property Value Type Description System.String Overrides MultiSingleFunction.Name Methods | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected override float Func(int doc, FunctionValues[] valsArr) Parameters Type Name Description System.Int32 doc FunctionValues [] valsArr Returns Type Description System.Single Overrides MultiSingleFunction.Func(Int32, FunctionValues[])"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiBoolFunction.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiBoolFunction.html",
    "title": "Class MultiBoolFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiBoolFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible System.Boolean function to their values. Inheritance System.Object ValueSource BoolFunction MultiBoolFunction Inherited Members ValueSource.ToString() ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public abstract class MultiBoolFunction : BoolFunction Constructors | Improve this Doc View Source MultiBoolFunction(IList<ValueSource>) Declaration public MultiBoolFunction(IList<ValueSource> sources) Parameters Type Name Description System.Collections.Generic.IList < ValueSource > sources Fields | Improve this Doc View Source m_sources Declaration protected readonly IList<ValueSource> m_sources Field Value Type Description System.Collections.Generic.IList < ValueSource > Properties | Improve this Doc View Source Name Declaration protected abstract string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CreateWeight(IDictionary, IndexSearcher) Declaration public override void CreateWeight(IDictionary context, IndexSearcher searcher) Parameters Type Name Description System.Collections.IDictionary context IndexSearcher searcher Overrides ValueSource.CreateWeight(IDictionary, IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source Func(Int32, FunctionValues[]) Declaration protected abstract bool Func(int doc, FunctionValues[] vals) Parameters Type Name Description System.Int32 doc FunctionValues [] vals Returns Type Description System.Boolean | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.Values.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.MultiFunction.Values.html",
    "title": "Class MultiFunction.Values | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiFunction.Values Inheritance System.Object FunctionValues MultiFunction.Values Inherited Members FunctionValues.ByteVal(Int32) FunctionValues.Int16Val(Int32) FunctionValues.SingleVal(Int32) FunctionValues.Int32Val(Int32) FunctionValues.Int64Val(Int32) FunctionValues.DoubleVal(Int32) FunctionValues.StrVal(Int32) FunctionValues.BoolVal(Int32) FunctionValues.BytesVal(Int32, BytesRef) FunctionValues.ObjectVal(Int32) FunctionValues.Exists(Int32) FunctionValues.OrdVal(Int32) FunctionValues.NumOrd FunctionValues.GetValueFiller() FunctionValues.ByteVal(Int32, Byte[]) FunctionValues.Int16Val(Int32, Int16[]) FunctionValues.SingleVal(Int32, Single[]) FunctionValues.Int32Val(Int32, Int32[]) FunctionValues.Int64Val(Int32, Int64[]) FunctionValues.DoubleVal(Int32, Double[]) FunctionValues.StrVal(Int32, String[]) FunctionValues.Explain(Int32) FunctionValues.GetScorer(IndexReader) FunctionValues.GetRangeScorer(IndexReader, String, String, Boolean, Boolean) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Function.ValueSources Assembly : Lucene.Net.Queries.dll Syntax public class Values : FunctionValues Constructors | Improve this Doc View Source Values(MultiFunction, FunctionValues[]) Declaration public Values(MultiFunction outerInstance, FunctionValues[] valsArr) Parameters Type Name Description MultiFunction outerInstance FunctionValues [] valsArr Methods | Improve this Doc View Source ToString(Int32) Declaration public override string ToString(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description System.String Overrides FunctionValues.ToString(Int32)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldValuePairQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IFieldValuePairQueryNode-1.html",
    "title": "Interface IFieldValuePairQueryNode<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFieldValuePairQueryNode<T> This interface should be implemented by IQueryNode that holds a field and an arbitrary value. Inherited Members IFieldableNode.Field IValueQueryNode<T>.Value IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFieldValuePairQueryNode<T> : IFieldableNode, IValueQueryNode<T>, IQueryNode Type Parameters Name Description T See Also IFieldableNode IValueQueryNode <T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode-1.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode-1.html",
    "title": "Interface IRangeQueryNode<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRangeQueryNode<T> This interface should be implemented by an IQueryNode that represents some kind of range query. Inherited Members IRangeQueryNode.IsLowerInclusive IRangeQueryNode.IsUpperInclusive IFieldableNode.Field IQueryNode.ToQueryString(IEscapeQuerySyntax) IQueryNode.ToString() IQueryNode.GetChildren() IQueryNode.IsLeaf IQueryNode.ContainsTag(String) IQueryNode.GetTag(String) IQueryNode.Parent IQueryNode.CloneTree() IQueryNode.Add(IQueryNode) IQueryNode.Add(IList<IQueryNode>) IQueryNode.Set(IList<IQueryNode>) IQueryNode.SetTag(String, Object) IQueryNode.UnsetTag(String) IQueryNode.TagMap IQueryNode.RemoveFromParent() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IRangeQueryNode<T> : IRangeQueryNode, IFieldableNode, IQueryNode where T : IFieldableNode Type Parameters Name Description T Properties | Improve this Doc View Source LowerBound Declaration T LowerBound { get; } Property Value Type Description T | Improve this Doc View Source UpperBound Declaration T UpperBound { get; } Property Value Type Description T"
  },
  "api/Lucene.Net/Lucene.Net.Store.FileSwitchDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FileSwitchDirectory.html",
    "title": "Class FileSwitchDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileSwitchDirectory Expert: A Directory instance that switches files between two other Directory instances. Files with the specified extensions are placed in the primary directory; others are placed in the secondary directory. The provided ISet{string} must not change once passed to this class, and must allow multiple threads to call contains at once. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory BaseDirectory FileSwitchDirectory Implements System.IDisposable Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.GetLockID() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class FileSwitchDirectory : BaseDirectory, IDisposable Constructors | Improve this Doc View Source FileSwitchDirectory(ISet<String>, Directory, Directory, Boolean) Declaration public FileSwitchDirectory(ISet<string> primaryExtensions, Directory primaryDir, Directory secondaryDir, bool doClose) Parameters Type Name Description System.Collections.Generic.ISet < System.String > primaryExtensions Directory primaryDir Directory secondaryDir System.Boolean doClose Properties | Improve this Doc View Source PrimaryDir Return the primary directory Declaration public virtual Directory PrimaryDir { get; } Property Value Type Description Directory | Improve this Doc View Source SecondaryDir Return the secondary directory Declaration public virtual Directory SecondaryDir { get; } Property Value Type Description Directory Methods | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetExtension(String) Utility method to return a file's extension. Declaration public static string GetExtension(string name) Parameters Type Name Description System.String name Returns Type Description System.String | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.FilterDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FilterDirectory.html",
    "title": "Class FilterDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterDirectory Directory implementation that delegates calls to another directory. This class can be used to add limitations on top of an existing Directory implementation such as rate limiting ( RateLimitedDirectoryWrapper ) or to add additional sanity checks for tests. However, if you plan to write your own Directory implementation, you should consider extending directly Directory or BaseDirectory rather than try to reuse functionality of existing Directory s by extending this class. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Directory FilterDirectory RateLimitedDirectoryWrapper TrackingDirectoryWrapper Implements System.IDisposable Inherited Members Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) Directory.EnsureOpen() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class FilterDirectory : Directory, IDisposable Constructors | Improve this Doc View Source FilterDirectory(Directory) Sole constructor, typically called from sub-classes. Declaration protected FilterDirectory(Directory in) Parameters Type Name Description Directory in Fields | Improve this Doc View Source m_input Declaration protected readonly Directory m_input Field Value Type Description Directory Properties | Improve this Doc View Source Delegate Return the wrapped Directory . Declaration public Directory Delegate { get; } Property Value Type Description Directory | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.FSDirectory.FSIndexOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FSDirectory.FSIndexOutput.html",
    "title": "Class FSDirectory.FSIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSDirectory.FSIndexOutput Writes output with System.IO.FileStream.Write(System.Byte[],System.Int32,System.Int32) Inheritance System.Object DataOutput IndexOutput BufferedIndexOutput FSDirectory.FSIndexOutput Implements System.IDisposable Inherited Members BufferedIndexOutput.DEFAULT_BUFFER_SIZE BufferedIndexOutput.WriteByte(Byte) BufferedIndexOutput.WriteBytes(Byte[], Int32, Int32) BufferedIndexOutput.Flush() BufferedIndexOutput.GetFilePointer() BufferedIndexOutput.BufferSize BufferedIndexOutput.Checksum IndexOutput.Dispose() DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax protected class FSIndexOutput : BufferedIndexOutput, IDisposable Constructors | Improve this Doc View Source FSIndexOutput(FSDirectory, String) Declaration public FSIndexOutput(FSDirectory parent, string name) Parameters Type Name Description FSDirectory parent System.String name Properties | Improve this Doc View Source Length Declaration public override long Length { get; } Property Value Type Description System.Int64 Overrides BufferedIndexOutput.Length Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides BufferedIndexOutput.Dispose(Boolean) | Improve this Doc View Source FlushBuffer(Byte[], Int32, Int32) Declaration protected override void FlushBuffer(byte[] b, int offset, int size) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 size Overrides BufferedIndexOutput.FlushBuffer(Byte[], Int32, Int32) | Improve this Doc View Source Seek(Int64) Random-access methods Declaration [Obsolete(\"(4.1) this method will be removed in Lucene 5.0\")] public override void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides BufferedIndexOutput.Seek(Int64) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.CollectionValueBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.CollectionValueBase-1.html",
    "title": "Class CollectionValueBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionValueBase<T> Base class for classes implementing ICollectionValue[T] Inheritance System.Object EnumerableBase <T> CollectionValueBase<T> CollectionBase<T> DictionaryBase<K, V> DirectedCollectionValueBase<T> Implements ICollectionValue <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable IShowable System.IFormattable Inherited Members EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(IEnumerable<T>) EnumerableBase<T>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class CollectionValueBase<T> : EnumerableBase<T>, ICollectionValue<T>, IEnumerable<T>, IEnumerable, IShowable, IFormattable Type Parameters Name Description T Properties | Improve this Doc View Source ActiveEvents A flag bitmap of the events currently subscribed to by this collection. Declaration public virtual EventTypeEnum ActiveEvents { get; } Property Value Type Description EventTypeEnum | Improve this Doc View Source Count The number of items in this collection. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source CountSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). Declaration public abstract Speed CountSpeed { get; } Property Value Type Description Speed A characterization of the speed of the Count property in this collection. | Improve this Doc View Source IsEmpty Check if collection is empty. Declaration public abstract bool IsEmpty { get; } Property Value Type Description System.Boolean True if empty | Improve this Doc View Source ListenableEvents Declaration public virtual EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Methods | Improve this Doc View Source All(Func<T, Boolean>) Check if all items in this collection satisfies a specific predicate. Declaration public virtual bool All(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R = bool ) defining the predicate Returns Type Description System.Boolean True if all items satisfies the predicate | Improve this Doc View Source Apply(Action<T>) Apply an single argument action, Action`1 to this enumerable Declaration public virtual void Apply(Action<T> action) Parameters Type Name Description System.Action <T> action The action delegate | Improve this Doc View Source Choose() Choose some item of this collection. Declaration public abstract T Choose() Returns Type Description T Exceptions Type Condition NoSuchItemException if collection is empty. | Improve this Doc View Source CopyTo(T[], Int32) Copy the items of this collection to part of an array. Declaration public virtual void CopyTo(T[] array, int index) Parameters Type Name Description T[] array The array to copy to. System.Int32 index The starting index. Exceptions Type Condition System.ArgumentOutOfRangeException if index is not a valid index into the array (i.e. negative or greater than the size of the array) or the array does not have room for the items. | Improve this Doc View Source Exists(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection. Declaration public virtual bool Exists(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R = bool ) defining the predicate Returns Type Description System.Boolean True if such an item exists | Improve this Doc View Source Filter(Func<T, Boolean>) Create an enumerable, enumerating the items of this collection that satisfies a certain condition. Declaration public virtual IEnumerable<T> Filter(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R = bool ) defining the predicate Returns Type Description System.Collections.Generic.IEnumerable <T> The filtered enumerable | Improve this Doc View Source Find(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration public virtual bool Find(Func<T, bool> predicate, out T item) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists | Improve this Doc View Source raiseCollectionChanged() Fire the CollectionChanged event Declaration protected virtual void raiseCollectionChanged() | Improve this Doc View Source raiseCollectionCleared(Boolean, Int32) Fire the CollectionCleared event Declaration protected virtual void raiseCollectionCleared(bool full, int count) Parameters Type Name Description System.Boolean full System.Int32 count | Improve this Doc View Source raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) Fire the CollectionCleared event Declaration protected virtual void raiseCollectionCleared(bool full, int count, int? offset) Parameters Type Name Description System.Boolean full System.Int32 count System.Nullable < System.Int32 > offset | Improve this Doc View Source raiseForAdd(T) Declaration protected virtual void raiseForAdd(T item) Parameters Type Name Description T item | Improve this Doc View Source raiseForInsert(Int32, T) Declaration protected virtual void raiseForInsert(int i, T item) Parameters Type Name Description System.Int32 i T item | Improve this Doc View Source raiseForRemove(T) Declaration protected void raiseForRemove(T item) Parameters Type Name Description T item | Improve this Doc View Source raiseForRemove(T, Int32) Declaration protected void raiseForRemove(T item, int count) Parameters Type Name Description T item System.Int32 count | Improve this Doc View Source raiseForRemoveAll(ICollectionValue<T>) Declaration protected virtual void raiseForRemoveAll(ICollectionValue<T> wasRemoved) Parameters Type Name Description ICollectionValue <T> wasRemoved | Improve this Doc View Source raiseForRemoveAt(Int32, T) Declaration protected void raiseForRemoveAt(int index, T item) Parameters Type Name Description System.Int32 index T item | Improve this Doc View Source raiseForSetThis(Int32, T, T) Declaration protected virtual void raiseForSetThis(int index, T value, T item) Parameters Type Name Description System.Int32 index T value T item | Improve this Doc View Source raiseForUpdate(T, T) Declaration protected virtual void raiseForUpdate(T newitem, T olditem) Parameters Type Name Description T newitem T olditem | Improve this Doc View Source raiseForUpdate(T, T, Int32) Declaration protected virtual void raiseForUpdate(T newitem, T olditem, int count) Parameters Type Name Description T newitem T olditem System.Int32 count | Improve this Doc View Source raiseItemInserted(T, Int32) Fire the ItemInserted event Declaration protected virtual void raiseItemInserted(T item, int index) Parameters Type Name Description T item The item that was added System.Int32 index | Improve this Doc View Source raiseItemRemovedAt(T, Int32) Fire the ItemRemovedAt event Declaration protected virtual void raiseItemRemovedAt(T item, int index) Parameters Type Name Description T item The item that was removed System.Int32 index | Improve this Doc View Source raiseItemsAdded(T, Int32) Fire the ItemsAdded event Declaration protected virtual void raiseItemsAdded(T item, int count) Parameters Type Name Description T item The item that was added System.Int32 count | Improve this Doc View Source raiseItemsRemoved(T, Int32) Fire the ItemsRemoved event Declaration protected virtual void raiseItemsRemoved(T item, int count) Parameters Type Name Description T item The item that was removed System.Int32 count | Improve this Doc View Source Show(StringBuilder, ref Int32, IFormatProvider) Declaration public virtual bool Show(StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest System.IFormatProvider formatProvider Returns Type Description System.Boolean | Improve this Doc View Source ToArray() Create an array with the items of this collection (in the same order as an enumerator would output them). Declaration public virtual T[] ToArray() Returns Type Description T[] The array | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public virtual string ToString(string format, IFormatProvider formatProvider) Parameters Type Name Description System.String format System.IFormatProvider formatProvider Returns Type Description System.String Events | Improve this Doc View Source CollectionChanged The change event. Will be raised for every change operation on the collection. Declaration public virtual event CollectionChangedHandler<T> CollectionChanged Event Type Type Description CollectionChangedHandler <T> | Improve this Doc View Source CollectionCleared The clear event. Will be raised for every Clear operation on the collection. Declaration public virtual event CollectionClearedHandler<T> CollectionCleared Event Type Type Description CollectionClearedHandler <T> | Improve this Doc View Source ItemInserted The item added event. Will be raised for every individual addition to the collection. Declaration public virtual event ItemInsertedHandler<T> ItemInserted Event Type Type Description ItemInsertedHandler <T> | Improve this Doc View Source ItemRemovedAt The item removed event. Will be raised for every individual removal from the collection. Declaration public virtual event ItemRemovedAtHandler<T> ItemRemovedAt Event Type Type Description ItemRemovedAtHandler <T> | Improve this Doc View Source ItemsAdded The item added event. Will be raised for every individual addition to the collection. Declaration public virtual event ItemsAddedHandler<T> ItemsAdded Event Type Type Description ItemsAddedHandler <T> | Improve this Doc View Source ItemsRemoved The item removed event. Will be raised for every individual removal from the collection. Declaration public virtual event ItemsRemovedHandler<T> ItemsRemoved Event Type Type Description ItemsRemovedHandler <T> Implements ICollectionValue<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable IShowable System.IFormattable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ConcurrentEnumerationException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ConcurrentEnumerationException.html",
    "title": "Class ConcurrentEnumerationException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConcurrentEnumerationException An exception thrown by the MemorySafeEnumerator if the collection is enumerated by multiple threads concurrently Inheritance System.Object System.Exception ConcurrentEnumerationException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class ConcurrentEnumerationException : Exception Constructors | Improve this Doc View Source ConcurrentEnumerationException() Create a simple exception with no further explanation. Declaration public ConcurrentEnumerationException() | Improve this Doc View Source ConcurrentEnumerationException(String) Create a simple exception with the an explanation contained in the error message. Declaration public ConcurrentEnumerationException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.DictionaryBase-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.DictionaryBase-2.html",
    "title": "Class DictionaryBase<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryBase<K, V> A base class for implementing a dictionary based on a set collection implementation. See the source code for C5.HashDictionary`2 for an example Inheritance System.Object EnumerableBase < KeyValuePair <K, V>> CollectionValueBase < KeyValuePair <K, V>> DictionaryBase<K, V> HashDictionary<K, V> SortedDictionaryBase<K, V> Implements IDictionary <K, V> ICollectionValue < KeyValuePair <K, V>> System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> System.Collections.IEnumerable IShowable System.IFormattable Inherited Members CollectionValueBase<KeyValuePair<K, V>>.ListenableEvents CollectionValueBase<KeyValuePair<K, V>>.ActiveEvents CollectionValueBase<KeyValuePair<K, V>>.CollectionChanged CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionChanged() CollectionValueBase<KeyValuePair<K, V>>.CollectionCleared CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<KeyValuePair<K, V>>.ItemsAdded CollectionValueBase<KeyValuePair<K, V>>.raiseItemsAdded(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemsRemoved CollectionValueBase<KeyValuePair<K, V>>.raiseItemsRemoved(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemInserted CollectionValueBase<KeyValuePair<K, V>>.raiseItemInserted(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemRemovedAt CollectionValueBase<KeyValuePair<K, V>>.raiseItemRemovedAt(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForSetThis(Int32, KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForInsert(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAt(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForAdd(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAll(ICollectionValue<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.IsEmpty CollectionValueBase<KeyValuePair<K, V>>.Count CollectionValueBase<KeyValuePair<K, V>>.CountSpeed CollectionValueBase<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) CollectionValueBase<KeyValuePair<K, V>>.ToArray() CollectionValueBase<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Choose() CollectionValueBase<KeyValuePair<K, V>>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString(String, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString() EnumerableBase<KeyValuePair<K, V>>.GetEnumerator() EnumerableBase<KeyValuePair<K, V>>.countItems(IEnumerable<KeyValuePair<K, V>>) EnumerableBase<KeyValuePair<K, V>>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class DictionaryBase<K, V> : CollectionValueBase<KeyValuePair<K, V>>, IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, IEnumerable<KeyValuePair<K, V>>, IEnumerable, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source DictionaryBase(IEqualityComparer<K>, MemoryType) Declaration protected DictionaryBase(IEqualityComparer<K> keyequalityComparer, MemoryType memoryType) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <K> keyequalityComparer MemoryType memoryType Fields | Improve this Doc View Source pairs The set collection of entries underlying this dictionary implementation Declaration protected ICollection<KeyValuePair<K, V>> pairs Field Value Type Description ICollection < KeyValuePair <K, V>> Properties | Improve this Doc View Source ActiveEvents Declaration public override EventTypeEnum ActiveEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.ActiveEvents | Improve this Doc View Source ContainsSpeed Declaration public virtual Speed ContainsSpeed { get; } Property Value Type Description Speed | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 The number of entries in the dictionary Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.Count | Improve this Doc View Source CountSpeed Declaration public override Speed CountSpeed { get; } Property Value Type Description Speed The number of entries in the dictionary Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.CountSpeed | Improve this Doc View Source EqualityComparer Declaration public virtual IEqualityComparer<K> EqualityComparer { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <K> | Improve this Doc View Source Func Declaration public virtual Func<K, V> Func { get; } Property Value Type Description System.Func <K, V> | Improve this Doc View Source IsEmpty Declaration public override bool IsEmpty { get; } Property Value Type Description System.Boolean True if this collection is empty. Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.IsEmpty | Improve this Doc View Source IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean True if dictionary is read only | Improve this Doc View Source Item[K] Indexer by key for dictionary. The get method will throw an exception if no entry is found. The set method behaves like C5.DictionaryBase`2.UpdateOrAdd(`0,`1) . Declaration public virtual V this[K key] { get; set; } Parameters Type Name Description K key Property Value Type Description V The value corresponding to the key Exceptions Type Condition NoSuchItemException On get if no entry is found. | Improve this Doc View Source Keys Declaration public virtual ICollectionValue<K> Keys { get; } Property Value Type Description ICollectionValue <K> A collection containing all the keys of the dictionary | Improve this Doc View Source ListenableEvents Declaration public override EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.ListenableEvents | Improve this Doc View Source Values Declaration public virtual ICollectionValue<V> Values { get; } Property Value Type Description ICollectionValue <V> A collection containing all the values of the dictionary Methods | Improve this Doc View Source Add(K, V) Add a new (key, value) pair (a mapping) to the dictionary. Declaration public virtual void Add(K key, V value) Parameters Type Name Description K key Key to add V value Value to add Exceptions Type Condition DuplicateNotAllowedException if there already is an entry with the same key. | Improve this Doc View Source AddAll<L, W>(IEnumerable<KeyValuePair<L, W>>) Add the entries from a collection of C5.KeyValuePair`2 pairs to this dictionary. TODO: add restrictions L:K and W:V when the .Net SDK allows it Declaration public virtual void AddAll<L, W>(IEnumerable<KeyValuePair<L, W>> entries) where L : K where W : V Parameters Type Name Description System.Collections.Generic.IEnumerable < KeyValuePair <L, W>> entries Type Parameters Name Description L W Exceptions Type Condition DuplicateNotAllowedException If the input contains duplicate keys or a key already present in this dictionary. | Improve this Doc View Source Check() Check the integrity of the internal data structures of this dictionary. Declaration public virtual bool Check() Returns Type Description System.Boolean True if check does not fail. | Improve this Doc View Source Choose() Choose some entry in this Dictionary. Declaration public override KeyValuePair<K, V> Choose() Returns Type Description KeyValuePair <K, V> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.Choose() Exceptions Type Condition NoSuchItemException if collection is empty. | Improve this Doc View Source Clear() Remove all entries from the dictionary Declaration public virtual void Clear() | Improve this Doc View Source Contains(K) Check if there is an entry with a specified key Declaration public virtual bool Contains(K key) Parameters Type Name Description K key The key to look for Returns Type Description System.Boolean True if key was found | Improve this Doc View Source ContainsAll<H>(IEnumerable<H>) Declaration public virtual bool ContainsAll<H>(IEnumerable<H> keys) where H : K Parameters Type Name Description System.Collections.Generic.IEnumerable <H> keys Returns Type Description System.Boolean Type Parameters Name Description H | Improve this Doc View Source Find(ref K, out V) Check if there is an entry with a specified key and report the corresponding value if found. This can be seen as a safe form of \"val = this[key]\". Declaration public virtual bool Find(ref K key, out V value) Parameters Type Name Description K key The key to look for V value On exit, the value of the entry Returns Type Description System.Boolean True if key was found | Improve this Doc View Source FindOrAdd(K, ref V) Look for a specific key in the dictionary. If found, report the corresponding value, else add an entry with the key and the supplied value. Declaration public virtual bool FindOrAdd(K key, ref V value) Parameters Type Name Description K key On entry the key to look for V value On entry the value to add if the key is not found. On exit the value found if any. Returns Type Description System.Boolean True if key was found | Improve this Doc View Source GetEnumerator() Create an enumerator for the collection of entries of the dictionary Declaration public override IEnumerator<KeyValuePair<K, V>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < KeyValuePair <K, V>> The enumerator Overrides Lucene.Net.Support.C5.EnumerableBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.GetEnumerator() | Improve this Doc View Source Remove(K) Remove an entry with a given key from the dictionary Declaration public virtual bool Remove(K key) Parameters Type Name Description K key The key of the entry to remove Returns Type Description System.Boolean True if an entry was found (and removed) | Improve this Doc View Source Remove(K, out V) Remove an entry with a given key from the dictionary and report its value. Declaration public virtual bool Remove(K key, out V value) Parameters Type Name Description K key The key of the entry to remove V value On exit, the value of the removed entry Returns Type Description System.Boolean True if an entry was found (and removed) | Improve this Doc View Source Show(StringBuilder, ref Int32, IFormatProvider) Declaration public override bool Show(StringBuilder stringbuilder, ref int rest, IFormatProvider formatProvider) Parameters Type Name Description System.Text.StringBuilder stringbuilder System.Int32 rest System.IFormatProvider formatProvider Returns Type Description System.Boolean Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.Show(System.Text.StringBuilder, System.Int32, System.IFormatProvider) | Improve this Doc View Source Update(K, V) Look for a specific key in the dictionary and if found replace the value with a new one. This can be seen as a non-adding version of \"this[key] = val\". Declaration public virtual bool Update(K key, V value) Parameters Type Name Description K key The key to look for V value The new value Returns Type Description System.Boolean True if key was found | Improve this Doc View Source Update(K, V, out V) Declaration public virtual bool Update(K key, V value, out V oldvalue) Parameters Type Name Description K key V value V oldvalue Returns Type Description System.Boolean | Improve this Doc View Source UpdateOrAdd(K, V) Update value in dictionary corresponding to key if found, else add new entry. More general than \"this[key] = val;\" by reporting if key was found. Declaration public virtual bool UpdateOrAdd(K key, V value) Parameters Type Name Description K key The key to look for V value The value to add or replace with. Returns Type Description System.Boolean True if entry was updated. | Improve this Doc View Source UpdateOrAdd(K, V, out V) Update value in dictionary corresponding to key if found, else add new entry. More general than \"this[key] = val;\" by reporting if key was found and the old value if any. Declaration public virtual bool UpdateOrAdd(K key, V value, out V oldvalue) Parameters Type Name Description K key V value V oldvalue Returns Type Description System.Boolean Events | Improve this Doc View Source CollectionChanged The change event. Will be raised for every change operation on the collection. Declaration public override event CollectionChangedHandler<KeyValuePair<K, V>> CollectionChanged Event Type Type Description CollectionChangedHandler < KeyValuePair <K, V>> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.CollectionChanged | Improve this Doc View Source CollectionCleared The change event. Will be raised for every change operation on the collection. Declaration public override event CollectionClearedHandler<KeyValuePair<K, V>> CollectionCleared Event Type Type Description CollectionClearedHandler < KeyValuePair <K, V>> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.CollectionCleared | Improve this Doc View Source ItemsAdded The item added event. Will be raised for every individual addition to the collection. Declaration public override event ItemsAddedHandler<KeyValuePair<K, V>> ItemsAdded Event Type Type Description ItemsAddedHandler < KeyValuePair <K, V>> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.ItemsAdded | Improve this Doc View Source ItemsRemoved The item added event. Will be raised for every individual removal from the collection. Declaration public override event ItemsRemovedHandler<KeyValuePair<K, V>> ItemsRemoved Event Type Type Description ItemsRemovedHandler < KeyValuePair <K, V>> Overrides Lucene.Net.Support.C5.CollectionValueBase<Lucene.Net.Support.C5.KeyValuePair<K, V>>.ItemsRemoved Implements IDictionary<K, V> ICollectionValue<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable IShowable System.IFormattable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.DirectedCollectionBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.DirectedCollectionBase-1.html",
    "title": "Class DirectedCollectionBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectedCollectionBase<T> Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> DirectedCollectionBase<T> SequencedBase<T> Implements IDirectedCollectionValue <T> ICollectionValue <T> IShowable System.IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ListenableEvents CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Choose() CollectionValueBase<T>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(IEnumerable<T>) EnumerableBase<T>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class DirectedCollectionBase<T> : CollectionBase<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Constructors | Improve this Doc View Source DirectedCollectionBase(IEqualityComparer<T>, MemoryType) Declaration protected DirectedCollectionBase(IEqualityComparer<T> itemequalityComparer, MemoryType memoryType) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> itemequalityComparer MemoryType memoryType The type of memory for the enumerator used to iterate the collection Properties | Improve this Doc View Source Direction Forwards if same, else Backwards Declaration public virtual EnumerationDirection Direction { get; } Property Value Type Description EnumerationDirection The enumeration direction relative to the original collection. Methods | Improve this Doc View Source Backwards() Declaration public abstract IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> | Improve this Doc View Source FindLast(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration public virtual bool FindLast(Func<T, bool> predicate, out T item) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists Explicit Interface Implementations | Improve this Doc View Source IDirectedEnumerable<T>.Backwards() Declaration IDirectedEnumerable<T> IDirectedEnumerable<T>.Backwards() Returns Type Description IDirectedEnumerable <T> Implements IDirectedCollectionValue<T> ICollectionValue<T> IShowable System.IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.DirectedCollectionValueBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.DirectedCollectionValueBase-1.html",
    "title": "Class DirectedCollectionValueBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectedCollectionValueBase<T> Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> DirectedCollectionValueBase<T> Implements IDirectedCollectionValue <T> ICollectionValue <T> IShowable System.IFormattable IDirectedEnumerable <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members CollectionValueBase<T>.ListenableEvents CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.IsEmpty CollectionValueBase<T>.Count CollectionValueBase<T>.CountSpeed CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Choose() CollectionValueBase<T>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.GetEnumerator() EnumerableBase<T>.countItems(IEnumerable<T>) EnumerableBase<T>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class DirectedCollectionValueBase<T> : CollectionValueBase<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source Direction Forwards if same, else Backwards Declaration public virtual EnumerationDirection Direction { get; } Property Value Type Description EnumerationDirection The enumeration direction relative to the original collection. Methods | Improve this Doc View Source Backwards() Declaration public abstract IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> | Improve this Doc View Source FindLast(Func<T, Boolean>, out T) Check if there exists an item that satisfies a specific predicate in this collection and return the first one in enumeration order. Declaration public virtual bool FindLast(Func<T, bool> predicate, out T item) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate T item Returns Type Description System.Boolean True is such an item exists Explicit Interface Implementations | Improve this Doc View Source IDirectedEnumerable<T>.Backwards() Declaration IDirectedEnumerable<T> IDirectedEnumerable<T>.Backwards() Returns Type Description IDirectedEnumerable <T> Implements IDirectedCollectionValue<T> ICollectionValue<T> IShowable System.IFormattable IDirectedEnumerable<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.DuplicateNotAllowedException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.DuplicateNotAllowedException.html",
    "title": "Class DuplicateNotAllowedException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DuplicateNotAllowedException An exception thrown when an operation attempts to create a duplicate in a collection with set semantics ( C5.IExtensible`1.AllowsDuplicates is false) or attempts to create a duplicate key in a dictionary. With collections this can only happen with Insert operations on lists, since the Add operations will not try to create duplictes and either ignore the failure or report it in a bool return value. With dictionaries this can happen with the C5.IDictionary`2.Add(`0,`1) metod. Inheritance System.Object System.Exception DuplicateNotAllowedException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public class DuplicateNotAllowedException : Exception Constructors | Improve this Doc View Source DuplicateNotAllowedException() Create a simple exception with no further explanation. Declaration public DuplicateNotAllowedException() | Improve this Doc View Source DuplicateNotAllowedException(String) Create the exception with an explanation of the reason. Declaration public DuplicateNotAllowedException(string message) Parameters Type Name Description System.String message Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.EnumerableBase-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.EnumerableBase-1.html",
    "title": "Class EnumerableBase<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnumerableBase<T> A base class for implementing an IEnumerable<T> Inheritance System.Object EnumerableBase<T> CollectionValueBase<T> Implements System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public abstract class EnumerableBase<T> : IEnumerable<T>, IEnumerable Type Parameters Name Description T Methods | Improve this Doc View Source countItems(IEnumerable<T>) Count the number of items in an enumerable by enumeration Declaration protected static int countItems(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The enumerable to count Returns Type Description System.Int32 The size of the enumerable | Improve this Doc View Source GetEnumerator() Create an enumerator for this collection. Declaration public abstract IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> The enumerator Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.ByteRunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.ByteRunAutomaton.html",
    "title": "Class ByteRunAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteRunAutomaton Automaton representation for matching UTF-8 byte[] . Inheritance System.Object RunAutomaton ByteRunAutomaton Inherited Members RunAutomaton.m_accept RunAutomaton.m_initial RunAutomaton.m_transitions RunAutomaton.ToString() RunAutomaton.Count RunAutomaton.IsAccept(Int32) RunAutomaton.InitialState RunAutomaton.GetCharIntervals() RunAutomaton.Step(Int32, Int32) RunAutomaton.GetHashCode() RunAutomaton.Equals(Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class ByteRunAutomaton : RunAutomaton Constructors | Improve this Doc View Source ByteRunAutomaton(Automaton) Declaration public ByteRunAutomaton(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source ByteRunAutomaton(Automaton, Boolean) Expert: if utf8 is true, the input is already byte-based Declaration public ByteRunAutomaton(Automaton a, bool utf8) Parameters Type Name Description Automaton a System.Boolean utf8 Methods | Improve this Doc View Source Run(Byte[], Int32, Int32) Returns true if the given byte array is accepted by this automaton. Declaration public virtual bool Run(byte[] s, int offset, int length) Parameters Type Name Description System.Byte [] s System.Int32 offset System.Int32 length Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CharacterRunAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CharacterRunAutomaton.html",
    "title": "Class CharacterRunAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterRunAutomaton Automaton representation for matching char[] . Inheritance System.Object RunAutomaton CharacterRunAutomaton Inherited Members RunAutomaton.m_accept RunAutomaton.m_initial RunAutomaton.m_transitions RunAutomaton.ToString() RunAutomaton.Count RunAutomaton.IsAccept(Int32) RunAutomaton.InitialState RunAutomaton.GetCharIntervals() RunAutomaton.Step(Int32, Int32) RunAutomaton.GetHashCode() RunAutomaton.Equals(Object) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class CharacterRunAutomaton : RunAutomaton Constructors | Improve this Doc View Source CharacterRunAutomaton(Automaton) Declaration public CharacterRunAutomaton(Automaton a) Parameters Type Name Description Automaton a Methods | Improve this Doc View Source Run(Char[], Int32, Int32) Returns true if the given string is accepted by this automaton. Declaration public virtual bool Run(char[] s, int offset, int length) Parameters Type Name Description System.Char [] s System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source Run(String) Returns true if the given string is accepted by this automaton. Declaration public virtual bool Run(string s) Parameters Type Name Description System.String s Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.FST.BytesReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.FST.BytesReader.html",
    "title": "Class FST.BytesReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FST.BytesReader Reads bytes stored in an FST. Inheritance System.Object DataInput FST.BytesReader Inherited Members DataInput.ReadByte() DataInput.ReadBytes(Byte[], Int32, Int32) DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class BytesReader : DataInput Properties | Improve this Doc View Source IsReversed Returns true if this reader uses reversed bytes under-the-hood. Declaration public abstract bool IsReversed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Position Current read position Declaration public abstract long Position { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source SkipBytes(Int32) Skips bytes. Declaration public abstract void SkipBytes(int count) Parameters Type Name Description System.Int32 count Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32SequenceOutputs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32SequenceOutputs.html",
    "title": "Class Int32SequenceOutputs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32SequenceOutputs An FST Outputs<T> implementation where each output is a sequence of System.Int32 s. NOTE: This was IntSequenceOutputs in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Outputs < Int32sRef > Int32SequenceOutputs Inherited Members Outputs<Int32sRef>.WriteFinalOutput(Int32sRef, DataOutput) Outputs<Int32sRef>.ReadFinalOutput(DataInput) Outputs<Int32sRef>.Merge(Int32sRef, Int32sRef) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32SequenceOutputs : Outputs<Int32sRef> Properties | Improve this Doc View Source NoOutput Declaration public override Int32sRef NoOutput { get; } Property Value Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.NoOutput | Improve this Doc View Source Singleton Declaration public static Int32SequenceOutputs Singleton { get; } Property Value Type Description Int32SequenceOutputs Methods | Improve this Doc View Source Add(Int32sRef, Int32sRef) Declaration public override Int32sRef Add(Int32sRef prefix, Int32sRef output) Parameters Type Name Description Int32sRef prefix Int32sRef output Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Add(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Common(Int32sRef, Int32sRef) Declaration public override Int32sRef Common(Int32sRef output1, Int32sRef output2) Parameters Type Name Description Int32sRef output1 Int32sRef output2 Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Common(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source OutputToString(Int32sRef) Declaration public override string OutputToString(Int32sRef output) Parameters Type Name Description Int32sRef output Returns Type Description System.String Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.OutputToString(Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Read(DataInput) Declaration public override Int32sRef Read(DataInput in) Parameters Type Name Description DataInput in Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Read(Lucene.Net.Store.DataInput) | Improve this Doc View Source Subtract(Int32sRef, Int32sRef) Declaration public override Int32sRef Subtract(Int32sRef output, Int32sRef inc) Parameters Type Name Description Int32sRef output Int32sRef inc Returns Type Description Int32sRef Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Subtract(Lucene.Net.Util.Int32sRef, Lucene.Net.Util.Int32sRef) | Improve this Doc View Source Write(Int32sRef, DataOutput) Declaration public override void Write(Int32sRef prefix, DataOutput out) Parameters Type Name Description Int32sRef prefix DataOutput out Overrides Lucene.Net.Util.Fst.Outputs<Lucene.Net.Util.Int32sRef>.Write(Lucene.Net.Util.Int32sRef, Lucene.Net.Store.DataOutput) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Int32sRefFSTEnum-1.html",
    "title": "Class Int32sRefFSTEnum<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32sRefFSTEnum<T> Enumerates all input ( Int32sRef ) + output pairs in an FST. NOTE: This was IntsRefFSTEnum{T} in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FSTEnum <T> Int32sRefFSTEnum<T> Inherited Members FSTEnum<T>.m_fst FSTEnum<T>.m_arcs FSTEnum<T>.m_output FSTEnum<T>.NO_OUTPUT FSTEnum<T>.m_fstReader FSTEnum<T>.m_scratchArc FSTEnum<T>.m_upto FSTEnum<T>.m_targetLength FSTEnum<T>.RewindPrefix() FSTEnum<T>.DoNext() FSTEnum<T>.DoSeekCeil() FSTEnum<T>.DoSeekFloor() FSTEnum<T>.DoSeekExact() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public sealed class Int32sRefFSTEnum<T> : FSTEnum<T> Type Parameters Name Description T Constructors | Improve this Doc View Source Int32sRefFSTEnum(FST<T>) doFloor controls the behavior of advance: if it's true doFloor is true, advance positions to the biggest term before target. Declaration public Int32sRefFSTEnum(FST<T> fst) Parameters Type Name Description FST <T> fst Properties | Improve this Doc View Source Current Declaration public Int32sRefFSTEnum.InputOutput<T> Current { get; } Property Value Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source CurrentLabel Declaration protected override int CurrentLabel { get; set; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.CurrentLabel | Improve this Doc View Source TargetLabel Declaration protected override int TargetLabel { get; } Property Value Type Description System.Int32 Overrides Lucene.Net.Util.Fst.FSTEnum<T>.TargetLabel Methods | Improve this Doc View Source Grow() Declaration protected override void Grow() Overrides Lucene.Net.Util.Fst.FSTEnum<T>.Grow() | Improve this Doc View Source Next() Declaration public Int32sRefFSTEnum.InputOutput<T> Next() Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekCeil(Int32sRef) Seeks to smallest term that's >= target. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekCeil(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekExact(Int32sRef) Seeks to exactly this term, returning null if the term doesn't exist. This is faster than using SeekFloor(Int32sRef) or SeekCeil(Int32sRef) because it short-circuits as soon the match is not found. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekExact(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T> | Improve this Doc View Source SeekFloor(Int32sRef) Seeks to biggest term that's <= target. Declaration public Int32sRefFSTEnum.InputOutput<T> SeekFloor(Int32sRef target) Parameters Type Name Description Int32sRef target Returns Type Description Int32sRefFSTEnum.InputOutput <T> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataInput.html",
    "title": "Class PagedBytes.PagedBytesDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedBytes.PagedBytesDataInput Inheritance System.Object DataInput PagedBytes.PagedBytesDataInput Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytesDataInput : DataInput Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides DataInput.Clone() | Improve this Doc View Source GetPosition() Returns the current byte position. Declaration public long GetPosition() Returns Type Description System.Int64 | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source SetPosition(Int64) Seek to a position previously obtained from GetPosition() . Declaration public void SetPosition(long position) Parameters Type Name Description System.Int64 position Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PagedBytes.PagedBytesDataOutput.html",
    "title": "Class PagedBytes.PagedBytesDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PagedBytes.PagedBytesDataOutput Inheritance System.Object DataOutput PagedBytes.PagedBytesDataOutput Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class PagedBytesDataOutput : DataOutput Constructors | Improve this Doc View Source PagedBytesDataOutput(PagedBytes) Declaration public PagedBytesDataOutput(PagedBytes outerInstance) Parameters Type Name Description PagedBytes outerInstance Methods | Improve this Doc View Source GetPosition() Return the current byte position. Declaration public long GetPosition() Returns Type Description System.Int64 | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.Phoneme.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.Phoneme.html",
    "title": "Class Phoneme | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Phoneme Inheritance System.Object Phoneme Implements IPhonemeExpr Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.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(Phoneme, Phoneme) Declaration public Phoneme(Phoneme phonemeLeft, Phoneme phonemeRight) Parameters Type Name Description Phoneme phonemeLeft Phoneme phonemeRight | Improve this Doc View Source Phoneme(Phoneme, Phoneme, LanguageSet) Declaration public Phoneme(Phoneme phonemeLeft, Phoneme phonemeRight, LanguageSet languages) Parameters Type Name Description Phoneme phonemeLeft Phoneme phonemeRight LanguageSet languages | Improve this Doc View Source Phoneme(ICharSequence, LanguageSet) Declaration public Phoneme(ICharSequence phonemeText, LanguageSet languages) Parameters Type Name Description ICharSequence phonemeText LanguageSet languages | Improve this Doc View Source Phoneme(String, LanguageSet) Declaration public Phoneme(string phonemeText, LanguageSet languages) Parameters Type Name Description System.String phonemeText LanguageSet languages | Improve this Doc View Source Phoneme(StringBuilder, LanguageSet) Declaration public Phoneme(StringBuilder phonemeText, LanguageSet languages) Parameters Type Name Description System.Text.StringBuilder phonemeText LanguageSet languages Fields | Improve this Doc View Source COMPARER Declaration public static readonly IComparer<Phoneme> COMPARER Field Value Type Description System.Collections.Generic.IComparer < Phoneme > Properties | Improve this Doc View Source Languages Declaration public LanguageSet Languages { get; } Property Value Type Description LanguageSet | Improve this Doc View Source Phonemes Declaration public IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme > Methods | Improve this Doc View Source Append(String) Declaration public Phoneme Append(string str) Parameters Type Name Description System.String str Returns Type Description Phoneme | Improve this Doc View Source GetPhonemeText() Declaration public string GetPhonemeText() Returns Type Description System.String | Improve this Doc View Source Join(Phoneme) Declaration [Obsolete(\"since 1.9\")] public Phoneme Join(Phoneme right) Parameters Type Name Description Phoneme right Returns Type Description Phoneme Implements IPhonemeExpr"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.PhonemeList.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.PhonemeList.html",
    "title": "Class PhonemeList | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PhonemeList Inheritance System.Object PhonemeList Implements IPhonemeExpr Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class PhonemeList : IPhonemeExpr Constructors | Improve this Doc View Source PhonemeList(IList<Phoneme>) Declaration public PhonemeList(IList<Phoneme> phonemes) Parameters Type Name Description System.Collections.Generic.IList < Phoneme > phonemes Properties | Improve this Doc View Source Phonemes Declaration public IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme > Implements IPhonemeExpr"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.SomeLanguages.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.SomeLanguages.html",
    "title": "Class SomeLanguages | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SomeLanguages Some languages, explicitly enumerated. Inheritance System.Object LanguageSet SomeLanguages Inherited Members LanguageSet.From(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public sealed class SomeLanguages : LanguageSet Properties | Improve this Doc View Source IsEmpty Declaration public override bool IsEmpty { get; } Property Value Type Description System.Boolean Overrides LanguageSet.IsEmpty | Improve this Doc View Source IsSingleton Declaration public override bool IsSingleton { get; } Property Value Type Description System.Boolean Overrides LanguageSet.IsSingleton Methods | Improve this Doc View Source Contains(String) Declaration public override bool Contains(string language) Parameters Type Name Description System.String language Returns Type Description System.Boolean Overrides LanguageSet.Contains(String) | Improve this Doc View Source GetAny() Declaration public override string GetAny() Returns Type Description System.String Overrides LanguageSet.GetAny() | Improve this Doc View Source GetLanguages() Declaration public ISet<string> GetLanguages() Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source RestrictTo(LanguageSet) Declaration public override LanguageSet RestrictTo(LanguageSet other) Parameters Type Name Description LanguageSet other Returns Type Description LanguageSet Overrides LanguageSet.RestrictTo(LanguageSet) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Caverphone1.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Caverphone1.html",
    "title": "Class Caverphone1 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Caverphone1 Encodes a string into a Caverphone 1.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 1.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 1.0 specification This class is immutable and thread-safe. since 1.5 Inheritance System.Object AbstractCaverphone Caverphone1 Implements IStringEncoder Inherited Members AbstractCaverphone.IsEncodeEqual(String, String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Caverphone1 : AbstractCaverphone, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes the given string into a Caverphone value. Declaration public override string Encode(string source) Parameters Type Name Description System.String source The source string. Returns Type Description System.String A caverphone code for the given string. Overrides AbstractCaverphone.Encode(String) Implements IStringEncoder"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Caverphone2.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Caverphone2.html",
    "title": "Class Caverphone2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Caverphone2 Encodes a string into a Caverphone 2.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 2.0 specification This class is immutable and thread-safe. Inheritance System.Object AbstractCaverphone Caverphone2 Implements IStringEncoder Inherited Members AbstractCaverphone.IsEncodeEqual(String, String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class Caverphone2 : AbstractCaverphone, IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes the given string into a Caverphone 2.0 value. Declaration public override string Encode(string source) Parameters Type Name Description System.String source The source string. Returns Type Description System.String A caverphone code for the given string. Overrides AbstractCaverphone.Encode(String) Implements IStringEncoder"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.MurmurHash2.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Bloom.MurmurHash2.html",
    "title": "Class MurmurHash2 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MurmurHash2 This is a very fast, non-cryptographic hash suitable for general hash-based lookup. See http://murmurhash.googlepages.com/ for more details. The C version of MurmurHash 2.0 found at that site was ported to Java by Andrzej Bialecki (ab at getopt org). The code from getopt.org was adapted by Mark Harwood in the form here as one of a pluggable choice of hashing functions as the core function had to be adapted to work with BytesRef s with offsets and lengths rather than raw byte arrays. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object HashFunction MurmurHash2 Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Bloom Assembly : Lucene.Net.Codecs.dll Syntax public sealed class MurmurHash2 : HashFunction Fields | Improve this Doc View Source INSTANCE Declaration public static readonly MurmurHash2 INSTANCE Field Value Type Description MurmurHash2 Methods | Improve this Doc View Source Hash(BytesRef) Declaration public override int Hash(BytesRef br) Parameters Type Name Description BytesRef br Returns Type Description System.Int32 Overrides HashFunction.Hash(BytesRef) | Improve this Doc View Source Hash(Byte[], Int32, Int32, Int32) Declaration public static int Hash(byte[] data, int seed, int offset, int len) Parameters Type Name Description System.Byte [] data System.Int32 seed System.Int32 offset System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source Hash32(Byte[], Int32, Int32) Generates 32 bit hash from byte array with default seed value. Declaration public static int Hash32(byte[] data, int offset, int len) Parameters Type Name Description System.Byte [] data Byte array to hash. System.Int32 offset The start position in the array to hash. System.Int32 len Length of the array elements to hash. Returns Type Description System.Int32 32 bit hash of the given array."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskDocValuesFormat.html",
    "title": "Class DiskDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DiskDocValuesFormat DocValues format that keeps most things on disk. Only things like disk offsets are loaded into ram. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat DiskDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.DiskDV Assembly : Lucene.Net.Codecs.dll Syntax [DocValuesFormatName(\"Disk\")] public sealed class DiskDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source DiskDocValuesFormat() Declaration public DiskDocValuesFormat() Fields | Improve this Doc View Source DATA_CODEC Declaration public static readonly string DATA_CODEC Field Value Type Description System.String | Improve this Doc View Source DATA_EXTENSION Declaration public static readonly string DATA_EXTENSION Field Value Type Description System.String | Improve this Doc View Source META_CODEC Declaration public static readonly string META_CODEC Field Value Type Description System.String | Improve this Doc View Source META_EXTENSION Declaration public static readonly string META_EXTENSION Field Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskNormsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.DiskDV.DiskNormsFormat.html",
    "title": "Class DiskNormsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DiskNormsFormat Norms format that keeps all norms on disk. Inheritance System.Object NormsFormat DiskNormsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.DiskDV Assembly : Lucene.Net.Codecs.dll Syntax public sealed class DiskNormsFormat : NormsFormat Methods | Improve this Doc View Source NormsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer NormsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides NormsFormat.NormsConsumer(SegmentWriteState) | Improve this Doc View Source NormsProducer(SegmentReadState) Declaration public override DocValuesProducer NormsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides NormsFormat.NormsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexInput.html",
    "title": "Class FixedInt32BlockIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedInt32BlockIndexInput Abstract base class that reads fixed-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was FixedIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput FixedInt32BlockIndexInput Implements System.IDisposable Inherited Members Int32IndexInput.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FixedInt32BlockIndexInput : Int32IndexInput, IDisposable Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source FixedInt32BlockIndexInput(IndexInput) Declaration public FixedInt32BlockIndexInput(IndexInput in) Parameters Type Name Description IndexInput in Fields | Improve this Doc View Source m_blockSize Declaration protected readonly int m_blockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexInput.Dispose(Boolean) | Improve this Doc View Source GetBlockReader(IndexInput, Int32[]) Declaration protected abstract FixedInt32BlockIndexInput.IBlockReader GetBlockReader(IndexInput in, int[] buffer) Parameters Type Name Description IndexInput in System.Int32 [] buffer Returns Type Description FixedInt32BlockIndexInput.IBlockReader | Improve this Doc View Source GetIndex() Declaration public override Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index Overrides Int32IndexInput.GetIndex() | Improve this Doc View Source GetReader() Declaration public override Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Overrides Int32IndexInput.GetReader() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.FixedInt32BlockIndexOutput.html",
    "title": "Class FixedInt32BlockIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FixedInt32BlockIndexOutput Abstract base class that writes fixed-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was FixedIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput FixedInt32BlockIndexOutput Implements System.IDisposable Inherited Members Int32IndexOutput.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class FixedInt32BlockIndexOutput : Int32IndexOutput, IDisposable Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source FixedInt32BlockIndexOutput(IndexOutput, Int32) Declaration protected FixedInt32BlockIndexOutput(IndexOutput output, int fixedBlockSize) Parameters Type Name Description IndexOutput output System.Int32 fixedBlockSize Fields | Improve this Doc View Source m_buffer Declaration protected readonly int[] m_buffer Field Value Type Description System.Int32 [] | Improve this Doc View Source m_output Declaration protected readonly IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexOutput.Dispose(Boolean) | Improve this Doc View Source FlushBlock() Declaration protected abstract void FlushBlock() | Improve this Doc View Source GetIndex() Declaration public override Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index Overrides Int32IndexOutput.GetIndex() | Improve this Doc View Source Write(Int32) Declaration public override void Write(int v) Parameters Type Name Description System.Int32 v Overrides Int32IndexOutput.Write(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexInput.html",
    "title": "Class VariableInt32BlockIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableInt32BlockIndexInput Abstract base class that reads variable-size blocks of ints from an IndexInput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexInput inside Directory . Wrapping a generic IndexInput will likely cost performance. NOTE: This was VariableIntBlockIndexInput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexInput VariableInt32BlockIndexInput Implements System.IDisposable Inherited Members Int32IndexInput.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class VariableInt32BlockIndexInput : Int32IndexInput, IDisposable Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source VariableInt32BlockIndexInput(IndexInput) Declaration protected VariableInt32BlockIndexInput(IndexInput input) Parameters Type Name Description IndexInput input Fields | Improve this Doc View Source m_maxBlockSize Declaration protected readonly int m_maxBlockSize Field Value Type Description System.Int32 Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexInput.Dispose(Boolean) | Improve this Doc View Source GetBlockReader(IndexInput, Int32[]) Declaration protected abstract VariableInt32BlockIndexInput.IBlockReader GetBlockReader(IndexInput in, int[] buffer) Parameters Type Name Description IndexInput in System.Int32 [] buffer Returns Type Description VariableInt32BlockIndexInput.IBlockReader | Improve this Doc View Source GetIndex() Declaration public override Int32IndexInput.Index GetIndex() Returns Type Description Int32IndexInput.Index Overrides Int32IndexInput.GetIndex() | Improve this Doc View Source GetReader() Declaration public override Int32IndexInput.Reader GetReader() Returns Type Description Int32IndexInput.Reader Overrides Int32IndexInput.GetReader() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexOutput.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.IntBlock.VariableInt32BlockIndexOutput.html",
    "title": "Class VariableInt32BlockIndexOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableInt32BlockIndexOutput Abstract base class that writes variable-size blocks of ints to an IndexOutput . While this is a simple approach, a more performant approach would directly create an impl of Int32IndexOutput inside Directory . Wrapping a generic IndexOutput will likely cost performance. NOTE: This was VariableIntBlockIndexOutput in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Int32IndexOutput VariableInt32BlockIndexOutput Implements System.IDisposable Inherited Members Int32IndexOutput.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.IntBlock Assembly : Lucene.Net.Codecs.dll Syntax public abstract class VariableInt32BlockIndexOutput : Int32IndexOutput, IDisposable Remarks Naive int block API that writes vInts. This is expected to give poor performance; it's really only for testing the pluggability. One should typically use pfor instead. Constructors | Improve this Doc View Source VariableInt32BlockIndexOutput(IndexOutput, Int32) NOTE: maxBlockSize must be the maximum block size plus the max non-causal lookahead of your codec. EG Simple9 requires lookahead=1 because on seeing the Nth value it knows it must now encode the N-1 values before it. Declaration protected VariableInt32BlockIndexOutput(IndexOutput output, int maxBlockSize) Parameters Type Name Description IndexOutput output System.Int32 maxBlockSize Fields | Improve this Doc View Source m_output Declaration protected readonly IndexOutput m_output Field Value Type Description IndexOutput Methods | Improve this Doc View Source Add(Int32) Called one value at a time. Return the number of buffered input values that have been written to out. Declaration protected abstract int Add(int value) Parameters Type Name Description System.Int32 value Returns Type Description System.Int32 | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Int32IndexOutput.Dispose(Boolean) | Improve this Doc View Source GetIndex() Declaration public override Int32IndexOutput.Index GetIndex() Returns Type Description Int32IndexOutput.Index Overrides Int32IndexOutput.GetIndex() | Improve this Doc View Source Write(Int32) Declaration public override void Write(int v) Parameters Type Name Description System.Int32 v Overrides Int32IndexOutput.Write(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.PrefixWildcardQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.PrefixWildcardQueryNode.html",
    "title": "Class PrefixWildcardQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixWildcardQueryNode A PrefixWildcardQueryNode represents wildcardquery that matches abc* or *. This does not apply to phrases, this is a special case on the original lucene parser. TODO: refactor the code to remove this special case from the parser. and probably do it on a Processor Inheritance System.Object QueryNode FieldQueryNode WildcardQueryNode PrefixWildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members WildcardQueryNode.ToQueryString(IEscapeQuerySyntax) FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class PrefixWildcardQueryNode : WildcardQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source PrefixWildcardQueryNode(FieldQueryNode) Declaration public PrefixWildcardQueryNode(FieldQueryNode fqn) Parameters Type Name Description FieldQueryNode fqn | Improve this Doc View Source PrefixWildcardQueryNode(String, ICharSequence, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source PrefixWildcardQueryNode(String, String, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source PrefixWildcardQueryNode(String, StringBuilder, Int32, Int32) Declaration public PrefixWildcardQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value including the wildcard System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides WildcardQueryNode.CloneTree() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides WildcardQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.RegexpQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.RegexpQueryNode.html",
    "title": "Class RegexpQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpQueryNode A RegexpQueryNode represents RegexpQuery query Examples: /[a-z]|[0-9]/ Inheritance System.Object QueryNode RegexpQueryNode Implements ITextableQueryNode IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class RegexpQueryNode : QueryNode, ITextableQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source RegexpQueryNode(String, ICharSequence, Int32, Int32) Declaration public RegexpQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source RegexpQueryNode(String, String, Int32, Int32) Declaration public RegexpQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source RegexpQueryNode(String, StringBuilder, Int32, Int32) Declaration public RegexpQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value that contains a regular expression System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source Text Declaration public virtual ICharSequence Text { get; set; } Property Value Type Description ICharSequence Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source GetFieldAsString() Declaration public virtual string GetFieldAsString() Returns Type Description System.String | Improve this Doc View Source TextToBytesRef() Declaration public virtual BytesRef TextToBytesRef() Returns Type Description BytesRef | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements ITextableQueryNode IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.StandardBooleanQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.StandardBooleanQueryNode.html",
    "title": "Class StandardBooleanQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardBooleanQueryNode A StandardBooleanQueryNode has the same behavior as BooleanQueryNode . It only indicates if the coord should be enabled or not for this boolean query. Inheritance System.Object QueryNode BooleanQueryNode StandardBooleanQueryNode Implements IQueryNode Inherited Members BooleanQueryNode.ToString() BooleanQueryNode.ToQueryString(IEscapeQuerySyntax) BooleanQueryNode.CloneTree() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardBooleanQueryNode : BooleanQueryNode, IQueryNode Constructors | Improve this Doc View Source StandardBooleanQueryNode(IList<IQueryNode>, Boolean) Declaration public StandardBooleanQueryNode(IList<IQueryNode> clauses, bool disableCoord) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > clauses System.Boolean disableCoord Properties | Improve this Doc View Source DisableCoord Declaration public virtual bool DisableCoord { get; } Property Value Type Description System.Boolean Implements IQueryNode See Also Coord(Int32, Int32) BooleanQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.TermRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.TermRangeQueryNode.html",
    "title": "Class TermRangeQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeQueryNode This query node represents a range query composed by FieldQueryNode bounds, which means the bound values are strings. Inheritance System.Object QueryNode AbstractRangeQueryNode < FieldQueryNode > TermRangeQueryNode Implements IAbstractRangeQueryNode IRangeQueryNode < IFieldableNode > IRangeQueryNode IFieldableNode IQueryNode Inherited Members AbstractRangeQueryNode<FieldQueryNode>.Field AbstractRangeQueryNode<FieldQueryNode>.LowerBound AbstractRangeQueryNode<FieldQueryNode>.UpperBound AbstractRangeQueryNode<FieldQueryNode>.IsLowerInclusive AbstractRangeQueryNode<FieldQueryNode>.IsUpperInclusive AbstractRangeQueryNode<FieldQueryNode>.SetBounds(FieldQueryNode, FieldQueryNode, Boolean, Boolean) AbstractRangeQueryNode<FieldQueryNode>.ToQueryString(IEscapeQuerySyntax) AbstractRangeQueryNode<FieldQueryNode>.ToString() QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.CloneTree() QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class TermRangeQueryNode : AbstractRangeQueryNode<FieldQueryNode>, IAbstractRangeQueryNode, IRangeQueryNode<IFieldableNode>, IRangeQueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source TermRangeQueryNode(FieldQueryNode, FieldQueryNode, Boolean, Boolean) Constructs a TermRangeQueryNode object using the given FieldQueryNode as its bounds. Declaration public TermRangeQueryNode(FieldQueryNode lower, FieldQueryNode upper, bool lowerInclusive, bool upperInclusive) Parameters Type Name Description FieldQueryNode lower the lower bound FieldQueryNode upper the upper bound System.Boolean lowerInclusive true if the lower bound is inclusive, otherwise, false System.Boolean upperInclusive true if the upper bound is inclusive, otherwise, false Implements IAbstractRangeQueryNode IRangeQueryNode<T> IRangeQueryNode IFieldableNode IQueryNode See Also FieldQueryNode AbstractRangeQueryNode <T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.WildcardQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Nodes.WildcardQueryNode.html",
    "title": "Class WildcardQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WildcardQueryNode A WildcardQueryNode represents wildcard query This does not apply to phrases. Examples: a b c Fl?w? m?ke*g Inheritance System.Object QueryNode FieldQueryNode WildcardQueryNode PrefixWildcardQueryNode Implements IFieldValuePairQueryNode < System.String > IFieldableNode IValueQueryNode < System.String > IQueryNode ITextableQueryNode Inherited Members FieldQueryNode.m_field FieldQueryNode.m_text FieldQueryNode.m_begin FieldQueryNode.m_end FieldQueryNode.m_positionIncrement FieldQueryNode.GetTermEscaped(IEscapeQuerySyntax) FieldQueryNode.GetTermEscapeQuoted(IEscapeQuerySyntax) FieldQueryNode.GetTextAsString() FieldQueryNode.GetFieldAsString() FieldQueryNode.Begin FieldQueryNode.End FieldQueryNode.Field FieldQueryNode.PositionIncrement FieldQueryNode.Text FieldQueryNode.Value QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class WildcardQueryNode : FieldQueryNode, IFieldValuePairQueryNode<string>, IFieldableNode, IValueQueryNode<string>, IQueryNode, ITextableQueryNode Constructors | Improve this Doc View Source WildcardQueryNode(FieldQueryNode) Declaration public WildcardQueryNode(FieldQueryNode fqn) Parameters Type Name Description FieldQueryNode fqn | Improve this Doc View Source WildcardQueryNode(String, ICharSequence, Int32, Int32) Declaration public WildcardQueryNode(string field, ICharSequence text, int begin, int end) Parameters Type Name Description System.String field field name ICharSequence text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source WildcardQueryNode(String, String, Int32, Int32) Declaration public WildcardQueryNode(string field, string text, int begin, int end) Parameters Type Name Description System.String field field name System.String text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string | Improve this Doc View Source WildcardQueryNode(String, StringBuilder, Int32, Int32) Declaration public WildcardQueryNode(string field, StringBuilder text, int begin, int end) Parameters Type Name Description System.String field field name System.Text.StringBuilder text value that contains one or more wild card characters (? or *) System.Int32 begin position in the query string System.Int32 end position in the query string Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides FieldQueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escaper) Parameters Type Name Description IEscapeQuerySyntax escaper Returns Type Description System.String Overrides FieldQueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides FieldQueryNode.ToString() Implements IFieldValuePairQueryNode<T> IFieldableNode IValueQueryNode<T> IQueryNode ITextableQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.EscapeQuerySyntax.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.EscapeQuerySyntax.html",
    "title": "Class EscapeQuerySyntax | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EscapeQuerySyntax Implementation of IEscapeQuerySyntax for the standard lucene syntax. Inheritance System.Object EscapeQuerySyntax Implements IEscapeQuerySyntax Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class EscapeQuerySyntax : IEscapeQuerySyntax Methods | Improve this Doc View Source DiscardEscapeChar(String) Returns a string where the escape char has been removed, or kept only once if there was a double escape. Supports escaped unicode characters, e. g. translates A to A . Declaration public static UnescapedCharSequence DiscardEscapeChar(string input) Parameters Type Name Description System.String input Returns Type Description UnescapedCharSequence | Improve this Doc View Source Escape(ICharSequence, CultureInfo, EscapeQuerySyntaxType) Declaration public virtual ICharSequence Escape(ICharSequence text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description ICharSequence text System.Globalization.CultureInfo locale EscapeQuerySyntaxType type Returns Type Description ICharSequence | Improve this Doc View Source Escape(String, CultureInfo, EscapeQuerySyntaxType) Declaration public virtual string Escape(string text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description System.String text System.Globalization.CultureInfo locale EscapeQuerySyntaxType type Returns Type Description System.String Implements IEscapeQuerySyntax"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.FastCharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.FastCharStream.html",
    "title": "Class FastCharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. Inheritance System.Object FastCharStream Implements ICharStream Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class FastCharStream : ICharStream Constructors | Improve this Doc View Source FastCharStream(TextReader) Constructs from a System.IO.TextReader . Declaration public FastCharStream(TextReader r) Parameters Type Name Description System.IO.TextReader r Properties | Improve this Doc View Source BeginColumn Declaration public int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Declaration public int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Declaration public int Column { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn Declaration public int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Declaration public int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Line Declaration public int Line { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source BackUp(Int32) Declaration public void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Declaration public char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() Declaration public void Done() | Improve this Doc View Source GetImage() Declaration public string GetImage() Returns Type Description System.String | Improve this Doc View Source GetSuffix(Int32) Declaration public char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Declaration public char ReadChar() Returns Type Description System.Char Implements ICharStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.ParseException.html",
    "title": "Class ParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method generateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. Inheritance System.Object System.Exception QueryNodeException QueryNodeParseException ParseException Implements INLSException Inherited Members QueryNodeParseException.SetQuery(String) QueryNodeParseException.Query QueryNodeParseException.ErrorToken QueryNodeParseException.SetNonLocalizedMessage(IMessage) QueryNodeParseException.BeginLine QueryNodeParseException.BeginColumn QueryNodeException.m_message QueryNodeException.MessageObject QueryNodeException.Message QueryNodeException.GetLocalizedMessage() QueryNodeException.GetLocalizedMessage(CultureInfo) QueryNodeException.ToString() System.Exception.GetBaseException() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class ParseException : QueryNodeParseException, INLSException Constructors | Improve this Doc View Source ParseException() The following constructors are for use by you for whatever purpose you can think of. Constructing the exception in this manner makes the exception behave in the normal way - i.e., as documented in the class \"Throwable\". The fields \"errorToken\", \"expectedTokenSequences\", and \"tokenImage\" do not contain relevant information. The JavaCC generated code does not use these constructors. Declaration public ParseException() | Improve this Doc View Source ParseException(IMessage) Constructor with message. Declaration public ParseException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source ParseException(Token, Int32[][], String[]) This constructor is used by the method \"generateParseException\" in the generated parser. Calling this constructor generates a new object of this type with the fields \"currentToken\", \"expectedTokenSequences\", and \"tokenImage\" set. Declaration public ParseException(Token currentTokenVal, int[][] expectedTokenSequencesVal, string[] tokenImageVal) Parameters Type Name Description Token currentTokenVal System.Int32 [][] expectedTokenSequencesVal System.String [] tokenImageVal Fields | Improve this Doc View Source m_eol The end of line string for this machine. Declaration protected string m_eol Field Value Type Description System.String Properties | Improve this Doc View Source CurrentToken This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token followng this token will (therefore) be the first error token. Declaration public Token CurrentToken { get; set; } Property Value Type Description Token | Improve this Doc View Source ExpectedTokenSequences Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is expected at this point of the parse. Declaration public int[][] ExpectedTokenSequences { get; set; } Property Value Type Description System.Int32 [][] | Improve this Doc View Source TokenImage This is a reference to the \"tokenImage\" array of the generated parser within which the parse error occurred. This array is defined in the generated ...Constants interface. Declaration public string[] TokenImage { get; set; } Property Value Type Description System.String [] Implements INLSException"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.StandardSyntaxParser.html",
    "title": "Class StandardSyntaxParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardSyntaxParser Parser for the standard Lucene syntax Inheritance System.Object StandardSyntaxParser Implements ISyntaxParser Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class StandardSyntaxParser : ISyntaxParser Constructors | Improve this Doc View Source StandardSyntaxParser() Declaration public StandardSyntaxParser() | Improve this Doc View Source StandardSyntaxParser(ICharStream) Constructor with user supplied ICharStream . Declaration public StandardSyntaxParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source StandardSyntaxParser(StandardSyntaxParserTokenManager) Constructor with generated Token Manager. Declaration public StandardSyntaxParser(StandardSyntaxParserTokenManager tm) Parameters Type Name Description StandardSyntaxParserTokenManager tm Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public StandardSyntaxParserTokenManager TokenSource { get; set; } Property Value Type Description StandardSyntaxParserTokenManager Methods | Improve this Doc View Source Clause(String) Declaration public IQueryNode Clause(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source ConjQuery(String) Declaration public IQueryNode ConjQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Conjunction() Declaration public int Conjunction() Returns Type Description System.Int32 | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source DisjQuery(String) Declaration public IQueryNode DisjQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source ModClause(String) Declaration public IQueryNode ModClause(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source Modifiers() Declaration public Modifier Modifiers() Returns Type Description Modifier | Improve this Doc View Source Parse(String, String) Parses a query string, returning a IQueryNode . Declaration public IQueryNode Parse(string query, string field) Parameters Type Name Description System.String query the query string to be parsed. System.String field Returns Type Description IQueryNode Exceptions Type Condition ParseException if the parsing fails | Improve this Doc View Source Query(String) Declaration public IQueryNode Query(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(StandardSyntaxParserTokenManager) Reinitialize. Declaration public void ReInit(StandardSyntaxParserTokenManager tm) Parameters Type Name Description StandardSyntaxParserTokenManager tm | Improve this Doc View Source Term(String) Declaration public IQueryNode Term(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode | Improve this Doc View Source TopLevelQuery(String) Declaration public IQueryNode TopLevelQuery(string field) Parameters Type Name Description System.String field Returns Type Description IQueryNode Implements ISyntaxParser"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object System.Exception TokenMgrError Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Remarks Note: You can customize the lexical error message by modifying this method."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.ItalianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.ItalianLightStemFilter.html",
    "title": "Class ItalianLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItalianLightStemFilter A TokenFilter that applies ItalianLightStemmer to stem Italian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter ItalianLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ItalianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ItalianLightStemFilter(TokenStream) Declaration public ItalianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.html",
    "title": "Class StemmerOverrideFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StemmerOverrideFilter Provides the ability to override any KeywordAttribute aware stemmer with custom dictionary-based stemming. Inheritance System.Object AttributeSource TokenStream TokenFilter StemmerOverrideFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class StemmerOverrideFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source StemmerOverrideFilter(TokenStream, StemmerOverrideFilter.StemmerOverrideMap) Create a new StemmerOverrideFilter , performing dictionary-based stemming with the provided dictionary ( stemmerOverrideMap ). Any dictionary-stemmed terms will be marked with KeywordAttribute so that they will not be stemmed with stemmers down the chain. Declaration public StemmerOverrideFilter(TokenStream input, StemmerOverrideFilter.StemmerOverrideMap stemmerOverrideMap) Parameters Type Name Description TokenStream input StemmerOverrideFilter.StemmerOverrideMap stemmerOverrideMap Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilterFactory.html",
    "title": "Class StemmerOverrideFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StemmerOverrideFilterFactory Factory for StemmerOverrideFilter . <fieldType name=\"text_dicstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StemmerOverrideFilterFactory\" dictionary=\"dictionary.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StemmerOverrideFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StemmerOverrideFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source StemmerOverrideFilterFactory(IDictionary<String, String>) Creates a new StemmerOverrideFilterFactory Declaration public StemmerOverrideFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.TrimFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.TrimFilter.html",
    "title": "Class TrimFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrimFilter Trims leading and trailing whitespace from Tokens in the stream. As of Lucene 4.4, this filter does not support updateOffsets=true anymore as it can lead to broken token streams. Inheritance System.Object AttributeSource TokenStream TokenFilter TrimFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TrimFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TrimFilter(LuceneVersion, TokenStream) Create a new TrimFilter on top of in . Declaration public TrimFilter(LuceneVersion version, TokenStream in) Parameters Type Name Description LuceneVersion version TokenStream in | Improve this Doc View Source TrimFilter(LuceneVersion, TokenStream, Boolean) Create a new TrimFilter . Declaration [Obsolete(\"Offset updates are not supported anymore as of Lucene 4.4.\")] public TrimFilter(LuceneVersion version, TokenStream in, bool updateOffsets) Parameters Type Name Description LuceneVersion version the Lucene match version TokenStream in the stream to consume System.Boolean updateOffsets whether to update offsets Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.TrimFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.TrimFilterFactory.html",
    "title": "Class TrimFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TrimFilterFactory Factory for TrimFilter . <fieldType name=\"text_trm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\"/> <filter class=\"solr.TrimFilterFactory\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TrimFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TrimFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source TrimFilterFactory(IDictionary<String, String>) Creates a new TrimFilterFactory Declaration public TrimFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source m_updateOffsets Declaration protected readonly bool m_updateOffsets Field Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also TrimFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilter.html",
    "title": "Class TruncateTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TruncateTokenFilter A token filter for truncating the terms into a specific length. Fixed prefix truncation, as a stemming method, produces good results on Turkish language. It is reported that F5, using first 5 characters, produced best results in Information Retrieval on Turkish Texts Inheritance System.Object AttributeSource TokenStream TokenFilter TruncateTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class TruncateTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source TruncateTokenFilter(TokenStream, Int32) Declaration public TruncateTokenFilter(TokenStream input, int length) Parameters Type Name Description TokenStream input System.Int32 length Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.DirectoryReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DirectoryReader.html",
    "title": "Class DirectoryReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryReader DirectoryReader is an implementation of CompositeReader that can read indexes in a Directory . DirectoryReader instances are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader CompositeReader BaseCompositeReader < AtomicReader > DirectoryReader FilterDirectoryReader Implements System.IDisposable Inherited Members BaseCompositeReader<AtomicReader>.GetTermVectors(Int32) BaseCompositeReader<AtomicReader>.NumDocs BaseCompositeReader<AtomicReader>.MaxDoc BaseCompositeReader<AtomicReader>.Document(Int32, StoredFieldVisitor) BaseCompositeReader<AtomicReader>.DocFreq(Term) BaseCompositeReader<AtomicReader>.TotalTermFreq(Term) BaseCompositeReader<AtomicReader>.GetSumDocFreq(String) BaseCompositeReader<AtomicReader>.GetDocCount(String) BaseCompositeReader<AtomicReader>.GetSumTotalTermFreq(String) BaseCompositeReader<AtomicReader>.ReaderIndex(Int32) BaseCompositeReader<AtomicReader>.ReaderBase(Int32) BaseCompositeReader<AtomicReader>.GetSequentialSubReaders() CompositeReader.ToString() CompositeReader.Context IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.DoClose() IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DirectoryReader : BaseCompositeReader<AtomicReader>, IDisposable Constructors | Improve this Doc View Source DirectoryReader(Directory, AtomicReader[]) Expert: Constructs a DirectoryReader on the given segmentReaders . Declaration protected DirectoryReader(Directory directory, AtomicReader[] segmentReaders) Parameters Type Name Description Directory directory AtomicReader [] segmentReaders the wrapped atomic index segment readers. This array is returned by GetSequentialSubReaders() and used to resolve the correct subreader for docID-based methods. Please note: this array is not cloned and not protected for modification outside of this reader. Subclasses of DirectoryReader should take care to not allow modification of this internal array, e.g. DoOpenIfChanged() . Fields | Improve this Doc View Source DEFAULT_TERMS_INDEX_DIVISOR Default termInfosIndexDivisor. Declaration public static readonly int DEFAULT_TERMS_INDEX_DIVISOR Field Value Type Description System.Int32 | Improve this Doc View Source m_directory The index directory. Declaration protected readonly Directory m_directory Field Value Type Description Directory Properties | Improve this Doc View Source Directory Returns the directory this index resides in. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source IndexCommit Expert: return the IndexCommit that this reader has opened. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit | Improve this Doc View Source Version Version number when this IndexReader was opened. This method returns the version recorded in the commit that the reader opened. This version is advanced every time a change is made with IndexWriter . Declaration public abstract long Version { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source DoOpenIfChanged() Implement this method to support OpenIfChanged(DirectoryReader) . If this reader does not support reopen, return null , so client code is happy. This should be consistent with IsCurrent() (should always return true ) if reopen is not supported. Declaration protected abstract DirectoryReader DoOpenIfChanged() Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DoOpenIfChanged(IndexCommit) Implement this method to support OpenIfChanged(DirectoryReader, IndexCommit) . If this reader does not support reopen from a specific IndexCommit , throw System.NotSupportedException . Declaration protected abstract DirectoryReader DoOpenIfChanged(IndexCommit commit) Parameters Type Name Description IndexCommit commit Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DoOpenIfChanged(IndexWriter, Boolean) Implement this method to support OpenIfChanged(DirectoryReader, IndexWriter, Boolean) . If this reader does not support reopen from IndexWriter , throw System.NotSupportedException . Declaration protected abstract DirectoryReader DoOpenIfChanged(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer System.Boolean applyAllDeletes Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance. Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source IndexExists(Directory) Returns true if an index likely exists at the specified directory. Note that if a corrupt index exists, or if an index in the process of committing Declaration public static bool IndexExists(Directory directory) Parameters Type Name Description Directory directory the directory to check for an index Returns Type Description System.Boolean true if an index exists; false otherwise | Improve this Doc View Source IsCurrent() Check whether any new changes have occurred to the index since this reader was opened. If this reader was created by calling an overload of Open(Directory) , then this method checks if any further commits (see Commit() ) have occurred in the directory. If instead this reader is a near real-time reader (ie, obtained by a call to Open(IndexWriter, Boolean) , or by calling an overload of OpenIfChanged(DirectoryReader) on a near real-time reader), then this method checks if either a new commit has occurred, or any new uncommitted changes have taken place via the writer. Note that even if the writer has only performed merging, this method will still return false . In any event, if this returns false , you should call an overload of OpenIfChanged(DirectoryReader) to get a new reader that sees the changes. Declaration public abstract bool IsCurrent() Returns Type Description System.Boolean Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source ListCommits(Directory) Returns all commit points that exist in the Directory . Normally, because the default is KeepOnlyLastCommitDeletionPolicy , there would be only one commit point. But if you're using a custom IndexDeletionPolicy then there could be many commits. Once you have a given commit, you can open a reader on it by calling Open(IndexCommit) There must be at least one commit in the Directory , else this method throws IndexNotFoundException . Note that if a commit is in progress while this method is running, that commit may or may not be returned. Declaration public static IList<IndexCommit> ListCommits(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.Collections.Generic.IList < IndexCommit > a sorted list of IndexCommit s, from oldest to latest. | Improve this Doc View Source Open(IndexCommit) Expert: returns an IndexReader reading the index in the given IndexCommit . Declaration public static DirectoryReader Open(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit point to open Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(IndexCommit, Int32) Expert: returns an IndexReader reading the index in the given IndexCommit and termInfosIndexDivisor . Declaration public static DirectoryReader Open(IndexCommit commit, int termInfosIndexDivisor) Parameters Type Name Description IndexCommit commit the commit point to open System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as setting TermIndexInterval (on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N, then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(IndexWriter, Boolean) Open a near real time IndexReader from the IndexWriter . @lucene.experimental Declaration public static DirectoryReader Open(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the returned reader. If false , the deletes are not applied but remain buffered (in IndexWriter) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . Returns Type Description DirectoryReader The new IndexReader Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error See Also OpenIfChanged(DirectoryReader, IndexWriter, Boolean) | Improve this Doc View Source Open(Directory) Returns a IndexReader reading the index in the given Directory Declaration public static DirectoryReader Open(Directory directory) Parameters Type Name Description Directory directory the index directory Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(Directory, Int32) Expert: Returns a IndexReader reading the index in the given Directory with the given termInfosIndexDivisor. Declaration public static DirectoryReader Open(Directory directory, int termInfosIndexDivisor) Parameters Type Name Description Directory directory the index directory System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as setting TermIndexInterval (on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N, then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source OpenIfChanged(DirectoryReader) If the index has changed since the provided reader was opened, open and return a new reader; else, return null . The new reader, if not null , will be the same type of reader as the previous one, ie a near-real-time (NRT) reader will open a new NRT reader, a MultiReader will open a new MultiReader , etc. This method is typically far less costly than opening a fully new DirectoryReader as it shares resources (for example sub-readers) with the provided DirectoryReader , when possible. The provided reader is not disposed (you are responsible for doing so); if a new reader is returned you also must eventually dispose it. Be sure to never dispose a reader while other threads are still using it; see SearcherManager to simplify managing this. Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader) Parameters Type Name Description DirectoryReader oldReader Returns Type Description DirectoryReader null if there are no changes; else, a new DirectoryReader instance which you must eventually dispose Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source OpenIfChanged(DirectoryReader, IndexCommit) If the IndexCommit differs from what the provided reader is searching, open and return a new reader; else, return null . Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader, IndexCommit commit) Parameters Type Name Description DirectoryReader oldReader IndexCommit commit Returns Type Description DirectoryReader See Also OpenIfChanged(DirectoryReader) | Improve this Doc View Source OpenIfChanged(DirectoryReader, IndexWriter, Boolean) Expert: If there changes (committed or not) in the IndexWriter versus what the provided reader is searching, then open and return a new IndexReader searching both committed and uncommitted changes from the writer; else, return null (though, the current implementation never returns null ). This provides \"near real-time\" searching, in that changes made during an IndexWriter session can be quickly made available for searching without closing the writer nor calling Commit() . It's near real-time because there is no hard guarantee on how quickly you can get a new reader after making changes with IndexWriter . You'll have to experiment in your situation to determine if it's fast enough. As this is a new and experimental feature, please report back on your findings so we can learn, improve and iterate. The very first time this method is called, this writer instance will make every effort to pool the readers that it opens for doing merges, applying deletes, etc. This means additional resources (RAM, file descriptors, CPU time) will be consumed. For lower latency on reopening a reader, you should call MergedSegmentWarmer (on IndexWriterConfig ) to pre-warm a newly merged segment before it's committed to the index. This is important for minimizing index-to-search delay after a large merge. If an AddIndexes* call is running in another thread, then this reader will only search those segments from the foreign index that have been successfully copied over, so far. NOTE : Once the writer is disposed, any outstanding readers may continue to be used. However, if you attempt to reopen any of those readers, you'll hit an System.ObjectDisposedException . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static DirectoryReader OpenIfChanged(DirectoryReader oldReader, IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description DirectoryReader oldReader IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true , all buffered deletes will be applied (made visible) in the returned reader. If false , the deletes are not applied but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false . Returns Type Description DirectoryReader DirectoryReader that covers entire index plus all changes made so far by this IndexWriter instance, or null if there are no new changes Exceptions Type Condition System.IO.IOException if there is a low-level IO error Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.BinaryDocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.BinaryDocValuesUpdate.html",
    "title": "Class DocValuesUpdate.BinaryDocValuesUpdate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesUpdate.BinaryDocValuesUpdate An in-place update to a binary DocValues field Inheritance System.Object DocValuesUpdate DocValuesUpdate.BinaryDocValuesUpdate Inherited Members DocValuesUpdate.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class BinaryDocValuesUpdate : DocValuesUpdate Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.NumericDocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.NumericDocValuesUpdate.html",
    "title": "Class DocValuesUpdate.NumericDocValuesUpdate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesUpdate.NumericDocValuesUpdate An in-place update to a numeric DocValues field Inheritance System.Object DocValuesUpdate DocValuesUpdate.NumericDocValuesUpdate Inherited Members DocValuesUpdate.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class NumericDocValuesUpdate : DocValuesUpdate Constructors | Improve this Doc View Source NumericDocValuesUpdate(Term, String, Nullable<Int64>) Declaration public NumericDocValuesUpdate(Term term, string field, long? value) Parameters Type Name Description Term term System.String field System.Nullable < System.Int64 > value Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.html",
    "title": "Class FilteredTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredTermsEnum Abstract class for enumerating a subset of all terms. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Please note: Consumers of this enumeration cannot call Seek() , it is forward only; it throws System.NotSupportedException when a seeking method is called. Inheritance System.Object TermsEnum FilteredTermsEnum SingleTermsEnum PrefixTermsEnum TermRangeTermsEnum Implements IBytesRefIterator Inherited Members TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class FilteredTermsEnum : TermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source FilteredTermsEnum(TermsEnum) Creates a filtered TermsEnum on a terms enum. Declaration public FilteredTermsEnum(TermsEnum tenum) Parameters Type Name Description TermsEnum tenum the terms enumeration to filter. | Improve this Doc View Source FilteredTermsEnum(TermsEnum, Boolean) Creates a filtered TermsEnum on a terms enum. Declaration public FilteredTermsEnum(TermsEnum tenum, bool startWithSeek) Parameters Type Name Description TermsEnum tenum the terms enumeration to filter. System.Boolean startWithSeek start with seek Properties | Improve this Doc View Source Attributes Returns the related attributes, the returned AttributeSource is shared with the delegate TermsEnum . Declaration public override AttributeSource Attributes { get; } Property Value Type Description AttributeSource Overrides TermsEnum.Attributes | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermsEnum.Comparer | Improve this Doc View Source DocFreq Declaration public override int DocFreq { get; } Property Value Type Description System.Int32 Overrides TermsEnum.DocFreq | Improve this Doc View Source Ord Declaration public override long Ord { get; } Property Value Type Description System.Int64 Overrides TermsEnum.Ord | Improve this Doc View Source Term Declaration public override BytesRef Term { get; } Property Value Type Description BytesRef Overrides TermsEnum.Term | Improve this Doc View Source TotalTermFreq Declaration public override long TotalTermFreq { get; } Property Value Type Description System.Int64 Overrides TermsEnum.TotalTermFreq Methods | Improve this Doc View Source Accept(BytesRef) Return if term is accepted, not accepted or the iteration should ended (and possibly seek). Declaration protected abstract FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus | Improve this Doc View Source Docs(IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(IBits bits, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description IBits bits DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides TermsEnum.Docs(IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(IBits bits, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description IBits bits DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source GetTermState() Returns the filtered enums term state Declaration public override TermState GetTermState() Returns Type Description TermState Overrides TermsEnum.GetTermState() | Improve this Doc View Source Next() Declaration public override BytesRef Next() Returns Type Description BytesRef Overrides TermsEnum.Next() | Improve this Doc View Source NextSeekTerm(BytesRef) On the first call to Next() or if Accept(BytesRef) returns YES_AND_SEEK or NO_AND_SEEK , this method will be called to eventually seek the underlying TermsEnum to a new position. On the first call, currentTerm will be null , later calls will provide the term the underlying enum is positioned at. This method returns per default only one time the initial seek term and then null , so no repositioning is ever done. Override this method, if you want a more sophisticated TermsEnum , that repositions the iterator during enumeration. If this method always returns null the enum is empty. Please note: this method should always provide a greater term than the last enumerated term, else the behavior of this enum violates the contract for TermsEnum s. Declaration protected virtual BytesRef NextSeekTerm(BytesRef currentTerm) Parameters Type Name Description BytesRef currentTerm Returns Type Description BytesRef | Improve this Doc View Source SeekCeil(BytesRef) this enum does not support seeking! Declaration public override TermsEnum.SeekStatus SeekCeil(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description TermsEnum.SeekStatus Overrides TermsEnum.SeekCeil(BytesRef) Exceptions Type Condition System.NotSupportedException In general, subclasses do not support seeking. | Improve this Doc View Source SeekExact(BytesRef) this enum does not support seeking! Declaration public override bool SeekExact(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description System.Boolean Overrides TermsEnum.SeekExact(BytesRef) Exceptions Type Condition System.NotSupportedException In general, subclasses do not support seeking. | Improve this Doc View Source SeekExact(BytesRef, TermState) this enum does not support seeking! Declaration public override void SeekExact(BytesRef term, TermState state) Parameters Type Name Description BytesRef term TermState state Overrides TermsEnum.SeekExact(BytesRef, TermState) Exceptions Type Condition System.NotSupportedException In general, subclasses do not support seeking. | Improve this Doc View Source SeekExact(Int64) this enum does not support seeking! Declaration public override void SeekExact(long ord) Parameters Type Name Description System.Int64 ord Overrides TermsEnum.SeekExact(Int64) Exceptions Type Condition System.NotSupportedException In general, subclasses do not support seeking. | Improve this Doc View Source SetInitialSeekTerm(BytesRef) Use this method to set the initial BytesRef to seek before iterating. This is a convenience method for subclasses that do not override NextSeekTerm(BytesRef) . If the initial seek term is null (default), the enum is empty. You can only use this method, if you keep the default implementation of NextSeekTerm(BytesRef) . Declaration protected void SetInitialSeekTerm(BytesRef term) Parameters Type Name Description BytesRef term Implements IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReader.html",
    "title": "Class IndexReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexReader IndexReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. There are two different types of IndexReader s: AtomicReader : These indexes do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. CompositeReader : Instances (like DirectoryReader ) of this reader can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the sub-readers via GetSequentialSubReaders() . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader inherits the CompositeReader abstract class, it is not possible to directly get postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexReader AtomicReader CompositeReader Implements System.IDisposable Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReader : IDisposable Properties | Improve this Doc View Source CombinedCoreAndDeletesKey Expert: Returns a key for this IndexReader that also includes deletions, so IFieldCache / CachingWrapperFilter can find it again. This key must not have Equals()/GetHashCode() methods, so \"equals\" means \"identical\". Declaration public virtual object CombinedCoreAndDeletesKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Context Expert: Returns the root IndexReaderContext for this IndexReader 's sub-reader tree. Iff this reader is composed of sub readers, i.e. this reader being a composite reader, this method returns a CompositeReaderContext holding the reader's direct children as well as a view of the reader tree's atomic leaf contexts. All sub- IndexReaderContext instances referenced from this readers top-level context are private to this reader and are not shared with another context tree. For example, IndexSearcher uses this API to drive searching by one atomic leaf reader at a time. If this reader is not composed of child readers, this method returns an AtomicReaderContext . Note: Any of the sub- CompositeReaderContext instances referenced from this top-level context do not support Leaves . Only the top-level context maintains the convenience leaf-view for performance reasons. Declaration public abstract IndexReaderContext Context { get; } Property Value Type Description IndexReaderContext | Improve this Doc View Source CoreCacheKey Expert: Returns a key for this IndexReader , so IFieldCache / CachingWrapperFilter can find it again. This key must not have Equals()/GetHashCode() methods, so \"equals\" means \"identical\". Declaration public virtual object CoreCacheKey { get; } Property Value Type Description System.Object | Improve this Doc View Source HasDeletions Returns true if any documents have been deleted. Implementers should consider overriding this property if MaxDoc or NumDocs are not constant-time operations. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Leaves Returns the reader's leaves, or itself if this reader is atomic. This is a convenience method calling this.Context.Leaves . Declaration public IList<AtomicReaderContext> Leaves { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReaderContext > See Also Leaves | Improve this Doc View Source MaxDoc Returns one greater than the largest possible document number. this may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. Declaration public abstract int MaxDoc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDeletedDocs Returns the number of deleted documents. Declaration public int NumDeletedDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDocs Returns the number of documents in this index. Declaration public abstract int NumDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source RefCount Expert: returns the current refCount for this reader Declaration public int RefCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddReaderClosedListener(IndexReader.IReaderClosedListener) Expert: adds a IndexReader.IReaderClosedListener . The provided listener will be invoked when this reader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void AddReaderClosedListener(IndexReader.IReaderClosedListener listener) Parameters Type Name Description IndexReader.IReaderClosedListener listener | Improve this Doc View Source DecRef() Expert: decreases the RefCount of this IndexReader instance. If the RefCount drops to 0, then this reader is disposed. If an exception is hit, the RefCount is unchanged. Declaration public void DecRef() Exceptions Type Condition System.IO.IOException in case an System.IO.IOException occurs in DoClose() See Also IncRef() | Improve this Doc View Source Dispose() Closes files associated with this index. Also saves any new deletions to disk. No other methods should be called after this has been called. Declaration public void Dispose() Exceptions Type Condition System.IO.IOException If there is a low-level IO error | Improve this Doc View Source Dispose(Boolean) Closes files associated with this index. This method implements the disposable pattern. It may be overridden to dispose any managed or unmanaged resources, but be sure to call base.Dispose(disposing) to close files associated with the underlying IndexReader . Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing true indicates to dispose all managed and unmanaged resources, false indicates dispose unmanaged resources only | Improve this Doc View Source DocFreq(Term) Returns the number of documents containing the term . This method returns 0 if the term or field does not exist. This method does not take into account deleted documents that have not yet been merged away. Declaration public abstract int DocFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int32 See Also DocFreq | Improve this Doc View Source DoClose() Implements close. Declaration protected abstract void DoClose() | Improve this Doc View Source Document(Int32) Returns the stored fields of the n th Document in this index. This is just sugar for using DocumentStoredFieldVisitor . NOTE: for performance reasons, this method does not check if the requested document is deleted, and therefore asking for a deleted document may yield unspecified results. Usually this is not required, however you can test if the doc is deleted by checking the IBits returned from GetLiveDocs(IndexReader) . NOTE: only the content of a field is returned, if that field was stored during indexing. Metadata like boost, omitNorm, IndexOptions, tokenized, etc., are not preserved. Declaration public Document Document(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Document Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Expert: visits the fields of a stored document, for custom processing/loading of each field. If you simply want to load all fields, use Document(Int32) . If you want to load a subset, use DocumentStoredFieldVisitor . Declaration public abstract void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor | Improve this Doc View Source Document(Int32, ISet<String>) Like Document(Int32) but only loads the specified fields. Note that this is simply sugar for DocumentStoredFieldVisitor(ISet<String>) . Declaration public Document Document(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID System.Collections.Generic.ISet < System.String > fieldsToLoad Returns Type Description Document | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if this IndexReader or any of its child readers is disposed, otherwise returns. Declaration protected void EnsureOpen() | Improve this Doc View Source Equals(Object) Determines whether two object instances are equal. For caching purposes, IndexReader subclasses are not allowed to implement Equals/GetHashCode, so methods are declared sealed. To lookup instances from caches use CoreCacheKey and CombinedCoreAndDeletesKey . Declaration public override sealed bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocCount(String) Returns the number of documents that have at least one term for this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract int GetDocCount(string field) Parameters Type Name Description System.String field Returns Type Description System.Int32 See Also DocCount | Improve this Doc View Source GetHashCode() Serves as the default hash function. For caching purposes, IndexReader subclasses are not allowed to implement Equals/GetHashCode, so methods are declared sealed. To lookup instances from caches use CoreCacheKey and CombinedCoreAndDeletesKey . Declaration public override sealed int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetSumDocFreq(String) Returns the sum of DocFreq for all terms in this field, or -1 if this measure isn't stored by the codec. Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long GetSumDocFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 See Also SumDocFreq | Improve this Doc View Source GetSumTotalTermFreq(String) Returns the sum of TotalTermFreq for all terms in this field, or -1 if this measure isn't stored by the codec (or if this fields omits term freq and positions). Note that, just like other term measures, this measure does not take deleted documents into account. Declaration public abstract long GetSumTotalTermFreq(string field) Parameters Type Name Description System.String field Returns Type Description System.Int64 See Also SumTotalTermFreq | Improve this Doc View Source GetTermVector(Int32, String) Retrieve term vector for this document and field, or null if term vectors were not indexed. The returned Fields instance acts like a single-document inverted index (the docID will be 0). Declaration public Terms GetTermVector(int docID, string field) Parameters Type Name Description System.Int32 docID System.String field Returns Type Description Terms | Improve this Doc View Source GetTermVectors(Int32) Retrieve term vectors for this document, or null if term vectors were not indexed. The returned Fields instance acts like a single-document inverted index (the docID will be 0). Declaration public abstract Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields | Improve this Doc View Source IncRef() Expert: increments the RefCount of this IndexReader instance. RefCount s are used to determine when a reader can be disposed safely, i.e. as soon as there are no more references. Be sure to always call a corresponding DecRef() , in a finally clause; otherwise the reader may never be disposed. Note that Dispose(Boolean) simply calls DecRef() , which means that the IndexReader will not really be disposed until DecRef() has been called for all outstanding references. Declaration public void IncRef() See Also DecRef() TryIncRef() | Improve this Doc View Source Open(IndexCommit) Expert: returns an IndexReader reading the index in the given IndexCommit . Declaration [Obsolete(\"Use DirectoryReader.Open(IndexCommit)\")] public static DirectoryReader Open(IndexCommit commit) Parameters Type Name Description IndexCommit commit the commit point to open Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(IndexCommit, Int32) Expert: returns an IndexReader reading the index in the given IndexCommit and termInfosIndexDivisor . Declaration [Obsolete(\"Use DirectoryReader.Open(IndexCommit, int)/>\")] public static DirectoryReader Open(IndexCommit commit, int termInfosIndexDivisor) Parameters Type Name Description IndexCommit commit the commit point to open System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as TermIndexInterval (which can be set in IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N , then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(IndexWriter, Boolean) Open a near real time IndexReader from the IndexWriter . Declaration [Obsolete(\"Use DirectoryReader.Open(IndexWriter, bool)\")] public static DirectoryReader Open(IndexWriter writer, bool applyAllDeletes) Parameters Type Name Description IndexWriter writer The IndexWriter to open from System.Boolean applyAllDeletes If true, all buffered deletes will be applied (made visible) in the returned reader. If false, the deletes are not applied but remain buffered (in IndexWriter ) so that they will be applied in the future. Applying deletes can be costly, so if your app can tolerate deleted documents being returned you might gain some performance by passing false. Returns Type Description DirectoryReader The new IndexReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error See Also OpenIfChanged ( DirectoryReader , IndexWriter , System.Boolean ) | Improve this Doc View Source Open(Directory) Returns a IndexReader reading the index in the given Directory Declaration [Obsolete(\"Use DirectoryReader.Open(Directory)\")] public static DirectoryReader Open(Directory directory) Parameters Type Name Description Directory directory the index directory Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Open(Directory, Int32) Expert: Returns a IndexReader reading the index in the given Directory with the given termInfosIndexDivisor . Declaration [Obsolete(\"Use DirectoryReader.Open(Directory, int)\")] public static DirectoryReader Open(Directory directory, int termInfosIndexDivisor) Parameters Type Name Description Directory directory the index directory System.Int32 termInfosIndexDivisor Subsamples which indexed terms are loaded into RAM. this has the same effect as TermIndexInterval (which can be set on IndexWriterConfig ) except that setting must be done at indexing time while this setting can be set per reader. When set to N , then one in every N*termIndexInterval terms in the index is loaded into memory. By setting this to a value > 1 you can reduce memory usage, at the expense of higher latency when loading a TermInfo. The default value is 1. Set this to -1 to skip loading the terms index entirely. Returns Type Description DirectoryReader Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source RegisterParentReader(IndexReader) Expert: this method is called by IndexReader s which wrap other readers (e.g. CompositeReader or FilterAtomicReader ) to register the parent at the child (this reader) on construction of the parent. When this reader is disposed, it will mark all registered parents as disposed, too. The references to parent readers are weak only, so they can be GCed once they are no longer in use. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void RegisterParentReader(IndexReader reader) Parameters Type Name Description IndexReader reader | Improve this Doc View Source RemoveReaderClosedListener(IndexReader.IReaderClosedListener) Expert: remove a previously added IndexReader.IReaderClosedListener . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public void RemoveReaderClosedListener(IndexReader.IReaderClosedListener listener) Parameters Type Name Description IndexReader.IReaderClosedListener listener | Improve this Doc View Source TotalTermFreq(Term) Returns the total number of occurrences of term across all documents (the sum of the Freq for each doc that has this term). This will be -1 if the codec doesn't support this measure. Note that, like other term measures, this measure does not take deleted documents into account. Declaration public abstract long TotalTermFreq(Term term) Parameters Type Name Description Term term Returns Type Description System.Int64 | Improve this Doc View Source TryIncRef() Expert: increments the RefCount of this IndexReader instance only if the IndexReader has not been disposed yet and returns true iff the RefCount was successfully incremented, otherwise false . If this method returns false the reader is either already disposed or is currently being disposed. Either way this reader instance shouldn't be used by an application unless true is returned. RefCount s are used to determine when a reader can be disposed safely, i.e. as soon as there are no more references. Be sure to always call a corresponding DecRef() , in a finally clause; otherwise the reader may never be disposed. Note that Dispose(Boolean) simply calls DecRef() , which means that the IndexReader will not really be disposed until DecRef() has been called for all outstanding references. Declaration public bool TryIncRef() Returns Type Description System.Boolean See Also DecRef() IncRef() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMap-1.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMap-1.html",
    "title": "Class CharArrayMap<TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMap<TValue> A simple class that stores key System.String s as char[] 's in a hash table. Note that this is not a general purpose class. For example, it cannot remove items from the map, nor does it resize its hash table to be smaller, etc. It is designed to be quick to retrieve items by char[] keys without the necessity of converting to a System.String first. You must specify the required LuceneVersion compatibility when creating CharArrayMap : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArrayMap with the behavior before Lucene 3.1 pass a LuceneVersion < 3.1 to the constructors. Inheritance System.Object CharArrayMap<TValue> Implements System.Collections.Generic.IDictionary < System.String , TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.String , TValue>> System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArrayMap<TValue> : ICharArrayMap, IDictionary<string, TValue>, ICollection<KeyValuePair<string, TValue>>, IEnumerable<KeyValuePair<string, TValue>>, IEnumerable Type Parameters Name Description TValue Constructors | Improve this Doc View Source CharArrayMap(LuceneVersion, IDictionary<String, TValue>, Boolean) Creates a map from the mappings in another map. Declaration public CharArrayMap(LuceneVersion matchVersion, IDictionary<string, TValue> c, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see Version note above for details. System.Collections.Generic.IDictionary < System.String , TValue> c a map ( ) whose mappings to be copied System.Boolean ignoreCase false if and only if the set should be case sensitive; otherwise true . | Improve this Doc View Source CharArrayMap(LuceneVersion, Int32, Boolean) Create map with enough capacity to hold startSize terms Declaration public CharArrayMap(LuceneVersion matchVersion, int startSize, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version - see CharArrayMap<TValue> for details. System.Int32 startSize the initial capacity System.Boolean ignoreCase false if and only if the set should be case sensitive; otherwise true . Properties | Improve this Doc View Source Count Gets the number of key/value pairs contained in the CharArrayMap<TValue> . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly true if the CharArrayMap<TValue> is read-only; otherwise false . Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[ICharSequence] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[ICharSequence key] { get; set; } Parameters Type Name Description ICharSequence key The key of the value to get or set. Property Value Type Description TValue | Improve this Doc View Source Item[Char[]] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[char[] key] { get; set; } Parameters Type Name Description System.Char [] key The key of the value to get or set. Property Value Type Description TValue | Improve this Doc View Source Item[Char[], Int32, Int32] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[char[] key, int offset, int length] { get; set; } Parameters Type Name Description System.Char [] key The key of the value to get or set. System.Int32 offset The position of the key where the target key begins. System.Int32 length The total length of the key . Property Value Type Description TValue | Improve this Doc View Source Item[Object] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[object key] { get; set; } Parameters Type Name Description System.Object key The key of the value to get or set. Property Value Type Description TValue | Improve this Doc View Source Item[String] Gets or sets the value associated with the specified key. Declaration public virtual TValue this[string key] { get; set; } Parameters Type Name Description System.String key The key of the value to get or set. Property Value Type Description TValue | Improve this Doc View Source Keys Gets a collection containing the keys in the CharArrayMap<TValue> . Declaration public virtual ICollection<string> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source MatchVersion The Lucene version corresponding to the compatibility behavior that this instance emulates Declaration public virtual LuceneVersion MatchVersion { get; } Property Value Type Description LuceneVersion | Improve this Doc View Source Values Gets a collection containing the values in the CharArrayMap<TValue> . This specialized collection can be enumerated in order to read its values and overrides System.Object.ToString() in order to display a string representation of the values. Declaration public ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(KeyValuePair<String, TValue>) Adds the for the passed in . Note that the instance is not added to the dictionary. Declaration public virtual void Add(KeyValuePair<string, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair < System.String , TValue> item A whose will be added for the corresponding . | Improve this Doc View Source Add(String, TValue) Adds the value for the passed in key . Declaration public virtual void Add(string key, TValue value) Parameters Type Name Description System.String key The string-able type to be added/updated in the dictionary. TValue value The corresponding value for the given key . | Improve this Doc View Source Clear() Clears all entries in this map. This method is supported for reusing, but not System.Collections.Generic.IDictionary<TKey, TValue>.Remove(TKey) . Declaration public virtual void Clear() | Improve this Doc View Source ContainsKey(ICharSequence) true if the text ICharSequence is in the Keys ; otherwise false Declaration public virtual bool ContainsKey(ICharSequence text) Parameters Type Name Description ICharSequence text Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(Char[]) true if the entire Keys is the same as the text char[] being passed in; otherwise false . Declaration public virtual bool ContainsKey(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(Char[], Int32, Int32) true if the length chars of text starting at offset are in the Keys Declaration public virtual bool ContainsKey(char[] text, int offset, int length) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(Object) true if the o System.Object.ToString() is in the Keys ; otherwise false Declaration public virtual bool ContainsKey(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(String) true if the text System.String is in the Keys ; otherwise false Declaration public virtual bool ContainsKey(string text) Parameters Type Name Description System.String text Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(CharArrayMap<TValue>) Copies all items in the current CharArrayMap<TValue> to the passed in CharArrayMap<TValue> . Declaration public virtual void CopyTo(CharArrayMap<TValue> map) Parameters Type Name Description CharArrayMap <TValue> map | Improve this Doc View Source CopyTo(KeyValuePair<String, TValue>[], Int32) Copies all items in the current dictionary the array starting at the arrayIndex . The array is assumed to already be dimensioned to fit the elements in this dictionary; otherwise a System.ArgumentOutOfRangeException will be thrown. Declaration public virtual void CopyTo(KeyValuePair<string, TValue>[] array, int arrayIndex) Parameters Type Name Description System.Collections.Generic.KeyValuePair < System.String , TValue>[] array The array to copy the items into. System.Int32 arrayIndex A 32-bit integer that represents the index in array at which copying begins. | Improve this Doc View Source EmptyMap() Returns an empty, unmodifiable map. Declaration public static CharArrayMap<TValue> EmptyMap() Returns Type Description CharArrayMap <TValue> | Improve this Doc View Source EntrySet() Declaration public CharArrayMap<TValue>.EntrySet_ EntrySet() Returns Type Description CharArrayMap.EntrySet_ <> | Improve this Doc View Source Equals(Object) LUCENENET Specific - test for value equality similar to how it is done in Java Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Another dictionary to test the values of Returns Type Description System.Boolean true if the given object is an that contains the same key value pairs as the current map Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Get(ICharSequence) returns the value of the mapping of the chars inside this ICharSequence Declaration public virtual TValue Get(ICharSequence text) Parameters Type Name Description ICharSequence text Returns Type Description TValue | Improve this Doc View Source Get(Char[]) returns the value of the mapping of the chars inside this text Declaration public virtual TValue Get(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description TValue | Improve this Doc View Source Get(Char[], Int32, Int32) returns the value of the mapping of length chars of text starting at offset Declaration public virtual TValue Get(char[] text, int offset, int length) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 length Returns Type Description TValue | Improve this Doc View Source Get(Object) returns the value of the mapping of the chars inside this System.Object.ToString() Declaration public virtual TValue Get(object o) Parameters Type Name Description System.Object o Returns Type Description TValue | Improve this Doc View Source Get(String) returns the value of the mapping of the chars inside this System.String Declaration public virtual TValue Get(string text) Parameters Type Name Description System.String text Returns Type Description TValue | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the CharArrayMap<TValue> . Declaration public virtual IEnumerator<KeyValuePair<string, TValue>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair < System.String , TValue>> | Improve this Doc View Source GetHashCode() LUCENENET Specific - override required by .NET because we override Equals to simulate Java's value equality checking. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Put(ICharSequence) Adds a placeholder with the given text as the key. Primarily for internal use by CharArraySet . Declaration public virtual bool Put(ICharSequence text) Parameters Type Name Description ICharSequence text Returns Type Description System.Boolean | Improve this Doc View Source Put(ICharSequence, TValue) Add the given mapping. Declaration public virtual TValue Put(ICharSequence text, TValue value) Parameters Type Name Description ICharSequence text TValue value Returns Type Description TValue | Improve this Doc View Source Put(Char[]) Adds a placeholder with the given text as the key. Primarily for internal use by CharArraySet . Declaration public virtual bool Put(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description System.Boolean | Improve this Doc View Source Put(Char[], TValue) Add the given mapping. If ignoreCase is true for this Set, the text array will be directly modified. The user should never modify this text array after calling this method. Declaration public virtual TValue Put(char[] text, TValue value) Parameters Type Name Description System.Char [] text TValue value Returns Type Description TValue | Improve this Doc View Source Put(Object) Adds a placeholder with the given o as the key. Primarily for internal use by CharArraySet . Declaration public virtual bool Put(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source Put(Object, TValue) Add the given mapping using the System.Object.ToString() representation of o in the System.Globalization.CultureInfo.InvariantCulture . Declaration public virtual TValue Put(object o, TValue value) Parameters Type Name Description System.Object o TValue value Returns Type Description TValue | Improve this Doc View Source Put(String) Adds a placeholder with the given text as the key. Primarily for internal use by CharArraySet . Declaration public virtual bool Put(string text) Parameters Type Name Description System.String text Returns Type Description System.Boolean | Improve this Doc View Source Put(String, TValue) Add the given mapping. Declaration public virtual TValue Put(string text, TValue value) Parameters Type Name Description System.String text TValue value Returns Type Description TValue | Improve this Doc View Source PutAll(IDictionary<ICharSequence, TValue>) This implementation enumerates over the specified IDictionary{ICharSequence,TValue} 's entries, and calls this map's Put(ICharSequence, TValue) operation once for each entry. Declaration public virtual void PutAll(IDictionary<ICharSequence, TValue> collection) Parameters Type Name Description System.Collections.Generic.IDictionary < ICharSequence , TValue> collection A dictionary of values to add/update in the current map. | Improve this Doc View Source PutAll(IDictionary<Char[], TValue>) This implementation enumerates over the specified IDictionary{char[],TValue} 's entries, and calls this map's Put(Char[], TValue) operation once for each entry. Declaration public virtual void PutAll(IDictionary<char[], TValue> collection) Parameters Type Name Description System.Collections.Generic.IDictionary < System.Char [], TValue> collection A dictionary of values to add/update in the current map. | Improve this Doc View Source PutAll(IDictionary<Object, TValue>) This implementation enumerates over the specified IDictionary{object,TValue} 's entries, and calls this map's Put(Object, TValue) operation once for each entry. Declaration public virtual void PutAll(IDictionary<object, TValue> collection) Parameters Type Name Description System.Collections.Generic.IDictionary < System.Object , TValue> collection A dictionary of values to add/update in the current map. | Improve this Doc View Source PutAll(IDictionary<String, TValue>) This implementation enumerates over the specified IDictionary{string,TValue} 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public virtual void PutAll(IDictionary<string, TValue> collection) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , TValue> collection A dictionary of values to add/update in the current map. | Improve this Doc View Source PutAll(IEnumerable<KeyValuePair<ICharSequence, TValue>>) This implementation enumerates over the specified IEnumerable{KeyValuePair{ICharSequence,TValue}} 's entries, and calls this map's Put(ICharSequence, TValue) operation once for each entry. Declaration public virtual void PutAll(IEnumerable<KeyValuePair<ICharSequence, TValue>> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < ICharSequence , TValue>> collection The values to add/update in the current map. | Improve this Doc View Source PutAll(IEnumerable<KeyValuePair<Char[], TValue>>) This implementation enumerates over the specified IEnumerable{KeyValuePair{char[],TValue}} 's entries, and calls this map's Put(Char[], TValue) operation once for each entry. Declaration public virtual void PutAll(IEnumerable<KeyValuePair<char[], TValue>> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Char [], TValue>> collection The values to add/update in the current map. | Improve this Doc View Source PutAll(IEnumerable<KeyValuePair<Object, TValue>>) This implementation enumerates over the specified IEnumerable{KeyValuePair{object,TValue}} 's entries, and calls this map's Put(Object, TValue) operation once for each entry. Declaration public virtual void PutAll(IEnumerable<KeyValuePair<object, TValue>> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Object , TValue>> collection The values to add/update in the current map. | Improve this Doc View Source PutAll(IEnumerable<KeyValuePair<String, TValue>>) This implementation enumerates over the specified IEnumerable{KeyValuePair{string,TValue}} 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public virtual void PutAll(IEnumerable<KeyValuePair<string, TValue>> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.String , TValue>> collection The values to add/update in the current map. | Improve this Doc View Source ToString() Returns a string that represents the current object. (Inherited from System.Object .) Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source TryGetValue(ICharSequence, out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(ICharSequence key, out TValue value) Parameters Type Name Description ICharSequence key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source TryGetValue(Char[], out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(char[] key, out TValue value) Parameters Type Name Description System.Char [] key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source TryGetValue(Char[], Int32, Int32, out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(char[] key, int offset, int length, out TValue value) Parameters Type Name Description System.Char [] key The key of the value to get. System.Int32 offset The position of the key where the target key begins. System.Int32 length The total length of the key . TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source TryGetValue(Object, out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(object key, out TValue value) Parameters Type Name Description System.Object key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . | Improve this Doc View Source TryGetValue(String, out TValue) Gets the value associated with the specified key. Declaration public virtual bool TryGetValue(string key, out TValue value) Parameters Type Name Description System.String key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the CharArrayMap<TValue> . Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Boolean) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Byte) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Char) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int32) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int64) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, SByte) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, Int16) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt32) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt64) CharArrayMapExtensions.ContainsKey<TValue>(CharArrayMap<TValue>, UInt16) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Boolean) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Byte) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Char) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Decimal) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Double) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Single) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int32) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int64) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, SByte) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, Int16) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt32) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt64) CharArrayMapExtensions.Get<TValue>(CharArrayMap<TValue>, UInt16) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Boolean, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Byte, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Char, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int32, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int64, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, SByte, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, Int16, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt32, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt64, TValue) CharArrayMapExtensions.Put<TValue>(CharArrayMap<TValue>, UInt16, TValue) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Boolean, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Byte, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Char, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int32, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int64, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<SByte, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int16, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt32, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt64, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt16, TValue>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Boolean, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Byte, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Char, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int32, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int64, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<SByte, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int16, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt32, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt64, TValue>>) CharArrayMapExtensions.PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt16, TValue>>) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Boolean, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Byte, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Char, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int32, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int64, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, SByte, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, Int16, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt32, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt64, out TValue) CharArrayMapExtensions.TryGetValue<TValue>(CharArrayMap<TValue>, UInt16, out TValue)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArraySet.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArraySet.html",
    "title": "Class CharArraySet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArraySet A simple class that stores System.String s as char[] 's in a hash table. Note that this is not a general purpose class. For example, it cannot remove items from the set, nor does it resize its hash table to be smaller, etc. It is designed to be quick to test if a char[] is in the set without the necessity of converting it to a System.String first. You must specify the required LuceneVersion compatibility when creating CharArraySet : As of 3.1, supplementary characters are properly lowercased. Before 3.1 supplementary characters could not be lowercased correctly due to the lack of Unicode 4 support in JDK 1.4. To use instances of CharArraySet with the behavior before Lucene 3.1 pass a LuceneVersion to the constructors. Please note: This class implements System.Collections.Generic.ISet<T> but does not behave like it should in all cases. The generic type is System.String , because you can add any object to it, that has a string representation (which is converted to a string). The add methods will use System.Object.ToString() and store the result using a char[] buffer. The same behavior have the Contains(String) methods. The GetEnumerator() returns an IEnumerator{char[]} Inheritance System.Object CharArraySet Implements System.Collections.Generic.ISet < System.String > System.Collections.Generic.ICollection < System.String > System.Collections.Generic.IEnumerable < System.String > System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArraySet : ISet<string>, ICollection<string>, IEnumerable<string>, IEnumerable Constructors | Improve this Doc View Source CharArraySet(LuceneVersion, ICollection<String>, Boolean) Creates a set from a collection of objects. Declaration public CharArraySet(LuceneVersion matchVersion, ICollection<string> c, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see CharArraySet for details. System.Collections.Generic.ICollection < System.String > c a collection whose elements to be placed into the set System.Boolean ignoreCase false if and only if the set should be case sensitive otherwise true . | Improve this Doc View Source CharArraySet(LuceneVersion, Int32, Boolean) Create set with enough capacity to hold startSize terms Declaration public CharArraySet(LuceneVersion matchVersion, int startSize, bool ignoreCase) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see CharArraySet for details. System.Int32 startSize the initial capacity System.Boolean ignoreCase false if and only if the set should be case sensitive otherwise true . Fields | Improve this Doc View Source EMPTY_SET Declaration public static readonly CharArraySet EMPTY_SET Field Value Type Description CharArraySet Properties | Improve this Doc View Source Count Gets the number of elements contained in the CharArraySet . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly true if the CharArraySet is read-only; otherwise false . Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Add(ICharSequence) Add this ICharSequence into the set Declaration public virtual bool Add(ICharSequence text) Parameters Type Name Description ICharSequence text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(Char[]) Add this char[] directly to the set. If ignoreCase is true for this CharArraySet , the text array will be directly modified. The user should never modify this text array after calling this method. Declaration public virtual bool Add(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(Object) Add the System.Object.ToString() representation of o into the set. The System.Object.ToString() method is called after setting the thread to System.Globalization.CultureInfo.InvariantCulture . If the type of o is a value type, it will be converted using the System.Globalization.CultureInfo.InvariantCulture . Declaration public virtual bool Add(object o) Parameters Type Name Description System.Object o A string-able object Returns Type Description System.Boolean true if o was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(String) Add this System.String into the set Declaration public virtual bool Add(string text) Parameters Type Name Description System.String text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Clear() Clears all entries in this set. This method is supported for reusing, but not ICollection{string}.Remove(string) . Declaration public virtual void Clear() | Improve this Doc View Source Contains(ICharSequence) true if the ICharSequence is in the set Declaration public virtual bool Contains(ICharSequence cs) Parameters Type Name Description ICharSequence cs Returns Type Description System.Boolean | Improve this Doc View Source Contains(Char[]) true if the char[] s are in the set Declaration public virtual bool Contains(char[] text) Parameters Type Name Description System.Char [] text Returns Type Description System.Boolean | Improve this Doc View Source Contains(Char[], Int32, Int32) true if the length chars of text starting at offset are in the set Declaration public virtual bool Contains(char[] text, int offset, int length) Parameters Type Name Description System.Char [] text System.Int32 offset System.Int32 length Returns Type Description System.Boolean | Improve this Doc View Source Contains(Object) true if the System.Object.ToString() representation of o is in the set Declaration public virtual bool Contains(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source Contains(String) true if the System.String is in the set Declaration public virtual bool Contains(string cs) Parameters Type Name Description System.String cs Returns Type Description System.Boolean | Improve this Doc View Source ContainsAll(IEnumerable<String>) Returns true if this collection contains all of the elements in the specified collection. Declaration public virtual bool ContainsAll(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other collection to be checked for containment in this collection Returns Type Description System.Boolean true if this CharArraySet contains all of the elements in the specified collection; otherwise, false . | Improve this Doc View Source ContainsAll<T>(IEnumerable<T>) Returns true if this collection contains all of the elements in the specified collection. Declaration public virtual bool ContainsAll<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other collection to be checked for containment in this collection Returns Type Description System.Boolean true if this CharArraySet contains all of the elements in the specified collection; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source Copy<T>(LuceneVersion, ICollection<T>) Returns a copy of the given set as a CharArraySet . If the given set is a CharArraySet the ignoreCase property will be preserved. Note: If you intend to create a copy of another CharArraySet where the LuceneVersion of the source set differs from its copy CharArraySet(LuceneVersion, ICollection<String>, Boolean) should be used instead. The Copy<T>(LuceneVersion, ICollection<T>) will preserve the LuceneVersion of the source set it is an instance of CharArraySet . Declaration public static CharArraySet Copy<T>(LuceneVersion matchVersion, ICollection<T> set) Parameters Type Name Description LuceneVersion matchVersion compatibility match version. This argument will be ignored if the given set is a CharArraySet . System.Collections.Generic.ICollection <T> set a set to copy Returns Type Description CharArraySet a copy of the given set as a CharArraySet . If the given set is a CharArraySet the Lucene.Net.Analysis.Util.CharArrayMap`1.ignoreCase field as well as the MatchVersion will be preserved. Type Parameters Name Description T | Improve this Doc View Source CopyTo(String[], Int32) Copies the entire CharArraySet to a one-dimensional string[] array, starting at the specified index of the target array. Declaration public void CopyTo(string[] array, int arrayIndex) Parameters Type Name Description System.String [] array The one-dimensional string[] Array that is the destination of the elements copied from CharArraySet . The Array must have zero-based indexing. System.Int32 arrayIndex The zero-based index in array at which copying begins. | Improve this Doc View Source Equals(Object) Compares the specified object with this set for equality. Returns true if the given object is also a set, the two sets have the same size, and every member of the given set is contained in this set. This ensures that the equals method works properly across different implementations of the ISet{string} interface. This implementation first checks if the specified object is this set; if so it returns true . Then, it checks if the specified object is a set whose size is identical to the size of this set; if not, it returns false . If so, it uses the enumerator of this set and the specified object to determine if all of the contained values are present (using System.String.Equals(System.String) ). Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj object to be compared for equality with this set Returns Type Description System.Boolean true if the specified object is equal to this set Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetEnumerator() Returns an System.Collections.IEnumerator for char[] instances in this set. Declaration public virtual IEnumerator GetEnumerator() Returns Type Description System.Collections.IEnumerator | Improve this Doc View Source GetHashCode() Returns the hash code value for this set. The hash code of a set is defined to be the sum of the hash codes of the elements in the set, where the hash code of a null element is defined to be zero. This ensures that s1.Equals(s2) implies that s1.GetHashCode()==s2.GetHashCode() for any two sets s1 and s2. This implementation iterates over the set, calling the GetHashCode() method on each element in the set, and adding up the results. Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code value for this set Overrides System.Object.GetHashCode() | Improve this Doc View Source IsProperSubsetOf(IEnumerable<String>) Determines whether a CharArraySet object is a proper subset of the specified collection. Declaration public virtual bool IsProperSubsetOf(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a proper subset of other ; otherwise, false . | Improve this Doc View Source IsProperSubsetOf<T>(IEnumerable<T>) Determines whether a CharArraySet object is a proper subset of the specified collection. Declaration public virtual bool IsProperSubsetOf<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a proper subset of other ; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source IsProperSupersetOf(IEnumerable<String>) Determines whether a CharArraySet object is a proper superset of the specified collection. Declaration public virtual bool IsProperSupersetOf(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a proper superset of other ; otherwise, false . | Improve this Doc View Source IsProperSupersetOf<T>(IEnumerable<T>) Determines whether a CharArraySet object is a proper superset of the specified collection. Declaration public virtual bool IsProperSupersetOf<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a proper superset of other ; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source IsSubsetOf(IEnumerable<String>) Determines whether a CharArraySet object is a subset of the specified collection. Declaration public virtual bool IsSubsetOf(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a subset of other ; otherwise, false . | Improve this Doc View Source IsSubsetOf<T>(IEnumerable<T>) Determines whether a CharArraySet object is a subset of the specified collection. Declaration public virtual bool IsSubsetOf<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a subset of other ; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source IsSupersetOf(IEnumerable<String>) Determines whether a CharArraySet object is a superset of the specified collection. Declaration public virtual bool IsSupersetOf(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a superset of other ; otherwise, false . | Improve this Doc View Source IsSupersetOf<T>(IEnumerable<T>) Determines whether a CharArraySet object is a superset of the specified collection. Declaration public virtual bool IsSupersetOf<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object is a superset of other ; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source Overlaps(IEnumerable<String>) Determines whether the current CharArraySet object and a specified collection share common elements. Declaration public virtual bool Overlaps(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if the CharArraySet object and other share at least one common element; otherwise, false . | Improve this Doc View Source Overlaps<T>(IEnumerable<T>) Determines whether the current CharArraySet object and a specified collection share common elements. Declaration public virtual bool Overlaps<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current CharArraySet object. Returns Type Description System.Boolean true if this CharArraySet object and other share at least one common element; otherwise, false . Type Parameters Name Description T | Improve this Doc View Source SetEquals(IEnumerable<String>) Determines whether the current set and the specified collection contain the same elements. Declaration public virtual bool SetEquals(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is equal to other; otherwise, false . | Improve this Doc View Source ToString() Returns a string that represents the current object. (Inherited from System.Object .) Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source UnionWith(IEnumerable<ICharSequence>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual bool UnionWith(IEnumerable<ICharSequence> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < ICharSequence > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(IEnumerable<Char[]>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual bool UnionWith(IEnumerable<char[]> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Char []> other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(IEnumerable<String>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual void UnionWith(IEnumerable<string> other) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.String > other The collection whose elements should be merged into the CharArraySet . | Improve this Doc View Source UnionWith<T>(IEnumerable<T>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public virtual bool UnionWith<T>(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call Type Parameters Name Description T | Improve this Doc View Source UnmodifiableSet(CharArraySet) Returns an unmodifiable CharArraySet . This allows to provide unmodifiable views of internal sets for \"read-only\" use. Declaration public static CharArraySet UnmodifiableSet(CharArraySet set) Parameters Type Name Description CharArraySet set a set for which the unmodifiable set is returned. Returns Type Description CharArraySet an new unmodifiable CharArraySet . Exceptions Type Condition System.ArgumentNullException if the given set is null . Explicit Interface Implementations | Improve this Doc View Source ICollection<String>.Add(String) LUCENENET specific for supporting System.Collections.Generic.ICollection<T> . Declaration void ICollection<string>.Add(string item) Parameters Type Name Description System.String item | Improve this Doc View Source IEnumerable<String>.GetEnumerator() Declaration IEnumerator<string> IEnumerable<string>.GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.String > Implements System.Collections.Generic.ISet<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods CharArraySetExtensions.Add(CharArraySet, Boolean) CharArraySetExtensions.Add(CharArraySet, Byte) CharArraySetExtensions.Add(CharArraySet, Char) CharArraySetExtensions.Add(CharArraySet, Int32) CharArraySetExtensions.Add(CharArraySet, Int64) CharArraySetExtensions.Add(CharArraySet, SByte) CharArraySetExtensions.Add(CharArraySet, Int16) CharArraySetExtensions.Add(CharArraySet, UInt32) CharArraySetExtensions.Add(CharArraySet, UInt64) CharArraySetExtensions.Add(CharArraySet, UInt16) CharArraySetExtensions.Contains(CharArraySet, Boolean) CharArraySetExtensions.Contains(CharArraySet, Byte) CharArraySetExtensions.Contains(CharArraySet, Char) CharArraySetExtensions.Contains(CharArraySet, Int32) CharArraySetExtensions.Contains(CharArraySet, Int64) CharArraySetExtensions.Contains(CharArraySet, SByte) CharArraySetExtensions.Contains(CharArraySet, Int16) CharArraySetExtensions.Contains(CharArraySet, UInt32) CharArraySetExtensions.Contains(CharArraySet, UInt64) CharArraySetExtensions.Contains(CharArraySet, UInt16) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Byte>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Char>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int32>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int64>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<SByte>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<Int16>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt32>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt64>) CharArraySetExtensions.UnionWith(CharArraySet, IEnumerable<UInt16>)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseTokenizer.html",
    "title": "Class ChineseTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChineseTokenizer Tokenize Chinese text as individual chinese characters. The difference between ChineseTokenizer and CJKTokenizer is that they have different token parsing logic. For example, if the Chinese text \"C1C2C3C4\" is to be indexed: The tokens returned from ChineseTokenizer are C1, C2, C3, C4. The tokens returned from the CJKTokenizer are C1C2, C2C3, C3C4. Therefore the index created by CJKTokenizer is much larger. The problem is that when searching for C1, C1C2, C1C3, C4C2, C1C2C3 ... the ChineseTokenizer works, but the CJKTokenizer will not work. Inheritance System.Object AttributeSource TokenStream Tokenizer ChineseTokenizer Implements System.IDisposable Inherited Members Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use StandardTokenizer instead, which has the same functionality.\")] public sealed class ChineseTokenizer : Tokenizer, IDisposable Constructors | Improve this Doc View Source ChineseTokenizer(AttributeSource.AttributeFactory, TextReader) Declaration public ChineseTokenizer(AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader in | Improve this Doc View Source ChineseTokenizer(TextReader) Declaration public ChineseTokenizer(TextReader in) Parameters Type Name Description System.IO.TextReader in Methods | Improve this Doc View Source End() Declaration public override sealed void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Tokenizer.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.ChineseTokenizerFactory.html",
    "title": "Class ChineseTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ChineseTokenizerFactory Factory for ChineseTokenizer Inheritance System.Object AbstractAnalysisFactory TokenizerFactory ChineseTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Cn Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"Use StandardTokenizerFactory instead.\")] public class ChineseTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source ChineseTokenizerFactory(IDictionary<String, String>) Creates a new ChineseTokenizerFactory Declaration public ChineseTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.CommonGramsFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.CommonGramsFilter.html",
    "title": "Class CommonGramsFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommonGramsFilter Construct bigrams for frequently occurring terms while indexing. Single terms are still indexed too, with bigrams overlaid. This is achieved through the use of PositionIncrement . Bigrams have a type of GRAM_TYPE Example: input:\"the quick brown fox\" output:|\"the\",\"the-quick\"|\"brown\"|\"fox\"| \"the-quick\" has a position increment of 0 so it is in the same position as \"the\" \"the-quick\" has a term.type() of \"gram\" Inheritance System.Object AttributeSource TokenStream TokenFilter CommonGramsFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CommonGramsFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source CommonGramsFilter(LuceneVersion, TokenStream, CharArraySet) Construct a token stream filtering the given input using a Set of common words to create bigrams. Outputs both unigrams with position increment and bigrams with position increment 0 type=gram where one or both of the words in a potential bigram are in the set of common words . Declaration public CommonGramsFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet commonWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream input TokenStream input in filter chain CharArraySet commonWords The set of common words. Fields | Improve this Doc View Source GRAM_TYPE Declaration public const string GRAM_TYPE = \"gram\" Field Value Type Description System.String Methods | Improve this Doc View Source IncrementToken() Inserts bigrams for common words into a token stream. For each input token, output the token. If the token and/or the following token are in the list of common words also output a bigram with position increment 0 and type=\"gram\" TODO:Consider adding an option to not emit unigram stopwords as in CDL XTF BigramStopFilter, CommonGramsQueryFilter would need to be changed to work with this. TODO: Consider optimizing for the case of three commongrams i.e \"man of the year\" normally produces 3 bigrams: \"man-of\", \"of-the\", \"the-year\" but with proper management of positions we could eliminate the middle bigram \"of-the\"and save a disk seek and a whole set of position lookups. Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.CommonGramsFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.CommonGramsFilterFactory.html",
    "title": "Class CommonGramsFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommonGramsFilterFactory Constructs a CommonGramsFilter . <fieldType name=\"text_cmmngrms\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsFilterFactory\" words=\"commongramsstopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CommonGramsFilterFactory CommonGramsQueryFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CommonGramsFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source CommonGramsFilterFactory(IDictionary<String, String>) Creates a new CommonGramsFilterFactory Declaration public CommonGramsFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Properties | Improve this Doc View Source CommonWords Declaration public virtual CharArraySet CommonWords { get; } Property Value Type Description CharArraySet | Improve this Doc View Source IgnoreCase Declaration public virtual bool IgnoreCase { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianCharFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianCharFilter.html",
    "title": "Class PersianCharFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianCharFilter CharFilter that replaces instances of Zero-width non-joiner with an ordinary space. Inheritance System.Object System.IO.TextReader CharFilter PersianCharFilter Implements System.IDisposable Inherited Members CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) CharFilter.Reset() CharFilter.IsReady CharFilter.IsMarkSupported CharFilter.Mark(Int32) System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEnd() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianCharFilter : CharFilter, IDisposable Constructors | Improve this Doc View Source PersianCharFilter(TextReader) Declaration public PersianCharFilter(TextReader in) Parameters Type Name Description System.IO.TextReader in Methods | Improve this Doc View Source Correct(Int32) Declaration protected override int Correct(int currentOff) Parameters Type Name Description System.Int32 currentOff Returns Type Description System.Int32 Overrides CharFilter.Correct(Int32) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides CharFilter.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] cbuf, int off, int len) Parameters Type Name Description System.Char [] cbuf System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides CharFilter.Read(Char[], Int32, Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianCharFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianCharFilterFactory.html",
    "title": "Class PersianCharFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianCharFilterFactory Factory for PersianCharFilter . <fieldType name=\"text_fa\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.PersianCharFilterFactory\"/> <tokenizer class=\"solr.StandardTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory CharFilterFactory PersianCharFilterFactory Implements IMultiTermAwareComponent Inherited Members CharFilterFactory.ForName(String, IDictionary<String, String>) CharFilterFactory.LookupClass(String) CharFilterFactory.AvailableCharFilters CharFilterFactory.ReloadCharFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianCharFilterFactory : CharFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source PersianCharFilterFactory(IDictionary<String, String>) Creates a new PersianCharFilterFactory Declaration public PersianCharFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TextReader) Declaration public override TextReader Create(TextReader input) Parameters Type Name Description System.IO.TextReader input Returns Type Description System.IO.TextReader Overrides CharFilterFactory.Create(TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsWriter.html",
    "title": "Class CompressingTermVectorsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingTermVectorsWriter TermVectorsWriter for CompressingTermVectorsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter CompressingTermVectorsWriter Implements System.IDisposable Inherited Members TermVectorsWriter.FinishTerm() TermVectorsWriter.AddAllDocVectors(Fields, MergeState) TermVectorsWriter.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class CompressingTermVectorsWriter : TermVectorsWriter, IDisposable Constructors | Improve this Doc View Source CompressingTermVectorsWriter(Directory, SegmentInfo, String, IOContext, String, CompressionMode, Int32) Sole constructor. Declaration public CompressingTermVectorsWriter(Directory directory, SegmentInfo si, string segmentSuffix, IOContext context, string formatName, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description Directory directory SegmentInfo si System.String segmentSuffix IOContext context System.String formatName CompressionMode compressionMode System.Int32 chunkSize Properties | Improve this Doc View Source Comparer Declaration public override IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Overrides TermVectorsWriter.Comparer Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides TermVectorsWriter.Abort() | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Declaration public override void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload Overrides TermVectorsWriter.AddPosition(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Declaration public override void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets Overrides TermVectorsWriter.AddProx(Int32, DataInput, DataInput) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermVectorsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides TermVectorsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source FinishDocument() Declaration public override void FinishDocument() Overrides TermVectorsWriter.FinishDocument() | Improve this Doc View Source FinishField() Declaration public override void FinishField() Overrides TermVectorsWriter.FinishField() | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides TermVectorsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields Overrides TermVectorsWriter.StartDocument(Int32) | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Declaration public override void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads Overrides TermVectorsWriter.StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) | Improve this Doc View Source StartTerm(BytesRef, Int32) Declaration public override void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Overrides TermVectorsWriter.StartTerm(BytesRef, Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DefaultDocValuesFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DefaultDocValuesFormatFactory.html",
    "title": "Class DefaultDocValuesFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultDocValuesFormatFactory LUCENENET specific class that implements the default functionality for the IDocValuesFormatFactory . The most common use cases are: Initialize DefaultDocValuesFormatFactory with a set of CustomDocValuesFormatTypes . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetDocValuesFormat(String) . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Subclass DefaultDocValuesFormatFactory to add new or override the default DocValuesFormat types by overriding Initialize() and calling PutDocValuesFormatType(Type) . Subclass DefaultDocValuesFormatFactory to scan additional assemblies for DocValuesFormat subclasses in by overriding Initialize() and calling ScanForDocValuesFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . Inheritance System.Object NamedServiceFactory < DocValuesFormat > DefaultDocValuesFormatFactory Implements IDocValuesFormatFactory IServiceListable Inherited Members NamedServiceFactory<DocValuesFormat>.m_initializationLock NamedServiceFactory<DocValuesFormat>.EnsureInitialized() NamedServiceFactory<DocValuesFormat>.CodecsAssembly NamedServiceFactory<DocValuesFormat>.IsServiceType(Type) NamedServiceFactory<DocValuesFormat>.GetServiceName(Type) NamedServiceFactory<DocValuesFormat>.GetCanonicalName(Type) NamedServiceFactory<DocValuesFormat>.IsFullyTrusted System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public class DefaultDocValuesFormatFactory : NamedServiceFactory<DocValuesFormat>, IDocValuesFormatFactory, IServiceListable Constructors | Improve this Doc View Source DefaultDocValuesFormatFactory() Creates a new instance of DefaultDocValuesFormatFactory . Declaration public DefaultDocValuesFormatFactory() Properties | Improve this Doc View Source AvailableServices Gets a list of the available DocValuesFormat s (by name). Declaration public virtual ICollection<string> AvailableServices { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > A ICollection{string} of DocValuesFormat names. | Improve this Doc View Source CustomDocValuesFormatTypes An array of custom DocValuesFormat -derived types to be registered. This property can be initialized during construction of DefaultDocValuesFormatFactory to make your custom codecs known to Lucene. These types will be registered after the default Lucene types, so if a custom type has the same name as a Lucene DocValuesFormat (via DocValuesFormatNameAttribute ) the custom type will replace the Lucene type with the same name. Declaration public IEnumerable<Type> CustomDocValuesFormatTypes { get; set; } Property Value Type Description System.Collections.Generic.IEnumerable < System.Type > Methods | Improve this Doc View Source GetDocValuesFormat(String) Gets the DocValuesFormat instance from the provided name . Declaration public virtual DocValuesFormat GetDocValuesFormat(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat instance to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. | Improve this Doc View Source GetDocValuesFormat(Type) Gets the DocValuesFormat instance from the provided type . Declaration protected virtual DocValuesFormat GetDocValuesFormat(Type type) Parameters Type Name Description System.Type type The System.Type of DocValuesFormat to retrieve. Returns Type Description DocValuesFormat The DocValuesFormat instance. | Improve this Doc View Source GetDocValuesFormatType(String) Gets the DocValuesFormat System.Type from the provided name . Declaration protected virtual Type GetDocValuesFormatType(string name) Parameters Type Name Description System.String name The name of the DocValuesFormat System.Type to retrieve. Returns Type Description System.Type The DocValuesFormat System.Type . | Improve this Doc View Source Initialize() Initializes the doc values type cache with the known DocValuesFormat types. Override this method (and optionally call base.Initialize() ) to add your own DocValuesFormat types by calling PutDocValuesFormatType(Type) or ScanForDocValuesFormats(Assembly) . If two types have the same name by using the DocValuesFormatNameAttribute , the last one registered wins. Declaration protected override void Initialize() Overrides Lucene.Net.Util.NamedServiceFactory<Lucene.Net.Codecs.DocValuesFormat>.Initialize() | Improve this Doc View Source NewDocValuesFormat(Type) Instantiates a DocValuesFormat based on the provided type . Declaration protected virtual DocValuesFormat NewDocValuesFormat(Type type) Parameters Type Name Description System.Type type The System.Type of DocValuesFormat to instantiate. Returns Type Description DocValuesFormat The new instance. | Improve this Doc View Source PutDocValuesFormatType(Type) Adds a DocValuesFormat type to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap , using the name provided in the DocValuesFormatNameAttribute , if present, or the name of the codec class minus the \"DocValuesFormat\" suffix as the name by default. Note that if a DocValuesFormat with the same name already exists in the map, calling this method will update it to the new type. Declaration protected virtual void PutDocValuesFormatType(Type docValuesFormat) Parameters Type Name Description System.Type docValuesFormat A type that subclasses DocValuesFormat . | Improve this Doc View Source ScanForDocValuesFormats(IEnumerable<Assembly>) Scans the given assemblies for subclasses of Codec and adds their names to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Note that names will be automatically overridden if the DocValuesFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForDocValuesFormats(IEnumerable<Assembly> assemblies) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Reflection.Assembly > assemblies A list of assemblies to scan. The assemblies will be scanned from first to last, and the last match for each DocValuesFormat name wins. | Improve this Doc View Source ScanForDocValuesFormats(Assembly) Scans the given assembly for subclasses of DocValuesFormat and adds their names to the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Note that names will be automatically overridden if the DocValuesFormat name appears multiple times - the last match wins. Declaration protected virtual void ScanForDocValuesFormats(Assembly assembly) Parameters Type Name Description System.Reflection.Assembly assembly The assembly to scan. Implements IDocValuesFormatFactory IServiceListable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldsConsumer.html",
    "title": "Class FieldsConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldsConsumer Abstract API that consumes terms, doc, freq, prox, offset and payloads postings. Concrete implementations of this actually do \"something\" with the postings (write it into the index in a specific format). The lifecycle is: FieldsConsumer is created by FieldsConsumer(SegmentWriteState) . For each field, AddField(FieldInfo) is called, returning a TermsConsumer for the field. After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldsConsumer BlockTreeTermsWriter Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldsConsumer : IDisposable Constructors | Improve this Doc View Source FieldsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldsConsumer() Methods | Improve this Doc View Source AddField(FieldInfo) Add a new field. Declaration public abstract TermsConsumer AddField(FieldInfo field) Parameters Type Name Description FieldInfo field Returns Type Description TermsConsumer | Improve this Doc View Source Dispose() Called when we are done adding everything. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Merge(MergeState, Fields) Called during merging to merge all Fields from sub-readers. this must recurse to merge all postings (terms, docs, positions, etc.). A PostingsFormat can override this default implementation to do its own merging. Declaration public virtual void Merge(MergeState mergeState, Fields fields) Parameters Type Name Description MergeState mergeState Fields fields Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40DocValuesFormat.html",
    "title": "Class Lucene40DocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40DocValuesFormat Lucene 4.0 DocValues format. Files: .dv.cfs : compound container ( CompoundFileDirectory ) .dv.cfe : compound entries ( CompoundFileDirectory ) Entries within the compound file: <segment> <fieldNumber>.dat : data values <segment><fieldNumber>.idx : index into the .dat for DEREF types There are several many types of DocValues with different encodings. From the perspective of filenames, all types store their values in .dat entries within the compound file. In the case of dereferenced/sorted types, the .dat actually contains only the unique values, and an additional .idx file contains pointers to these unique values. Formats: Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS .dat --> Header, PackedType, MinValue, DefaultValue, PackedStream Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 .dat --> Header, ValueSize, Byte ( WriteByte(Byte) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 .dat --> Header, ValueSize, Short ( WriteInt16(Int16) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 .dat --> Header, ValueSize, Int32 ( WriteInt32(Int32) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 .dat --> Header, ValueSize, Int64 ( WriteInt64(Int64) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 .dat --> Header, ValueSize, Float32 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 .dat --> Header, ValueSize, Float64 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .idx --> Header, TotalBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .idx --> Header, NumValues, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .idx --> Header, TotalVarBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .dat --> Header, (LengthPrefix + Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .idx --> Header, NumValues, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .idx --> Header, TotalVarBytes, Addresses, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Data Types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedType --> Byte ( WriteByte(Byte) ) MaxAddress, MinValue, DefaultValue --> Int64 ( WriteInt64(Int64) ) PackedStream, Addresses, Ordinals --> PackedInt32s ValueSize, NumValues --> Int32 ( WriteInt32(Int32) ) Float32 --> 32-bit float encoded with SingleToRawInt32Bits(Single) then written as Int32 ( WriteInt32(Int32) ) Float64 --> 64-bit float encoded with DoubleToRawInt64Bits(Double) then written as Int64 ( WriteInt64(Int64) ) TotalBytes --> VLong ( WriteVInt64(Int64) ) TotalVarBytes --> Int64 ( WriteInt64(Int64) ) LengthPrefix --> Length of the data value as VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes) Notes: PackedType is a 0 when compressed, 1 when the stream is written as 64-bit integers. Addresses stores pointers to the actual byte location (indexed by docid). In the VAR_STRAIGHT case, each entry can have a different length, so to determine the length, docid+1 is retrieved. A sentinel address is written at the end for the VAR_STRAIGHT case, so the Addresses stream contains maxdoc+1 indices. For the deduplicated VAR_DEREF case, each length is encoded as a prefix to the data itself as a VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes). Ordinals stores the term ID in sorted order (indexed by docid). In the FIXED_SORTED case, the address into the .dat can be computed from the ordinal as Header+ValueSize+(ordinal*ValueSize) because the byte length is fixed. In the VAR_SORTED case, there is double indirection (docid -> ordinal -> address), but an additional sentinel ordinal+address is always written (so there are NumValues+1 ordinals). To determine the length, ord+1's address is looked up as well. Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT in contrast to other straight variants uses a .idx file to improve lookup perfromance. In contrast to Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF it doesn't apply deduplication of the document values. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Inheritance System.Object DocValuesFormat Lucene40DocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 and 4.1 segments\")] [DocValuesFormatName(\"Lucene40\")] public class Lucene40DocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source Lucene40DocValuesFormat() Sole constructor. Declaration public Lucene40DocValuesFormat() Fields | Improve this Doc View Source MAX_BINARY_FIELD_LENGTH Maximum length for each binary doc values field. Declaration public static readonly int MAX_BINARY_FIELD_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40FieldInfosFormat.html",
    "title": "Class Lucene40FieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40FieldInfosFormat Lucene 4.0 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: variable-width signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS ) 2: 32-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 ) 3: 64-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 ) 4: fixed-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT ) 5: fixed-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF ) 6: variable-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT ) 7: variable-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF ) 8: 16-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 ) 9: 32-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 ) 10: 64-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 ) 11: 8-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 ) 12: fixed-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED ) 13: variable-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED ) Attributes: a key-value map of codec-private attributes. @lucene.experimental Inheritance System.Object FieldInfosFormat Lucene40FieldInfosFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.0 and 4.1 segments\")] public class Lucene40FieldInfosFormat : FieldInfosFormat Constructors | Improve this Doc View Source Lucene40FieldInfosFormat() Sole constructor. Declaration public Lucene40FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Declaration public override FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader Overrides FieldInfosFormat.FieldInfosReader | Improve this Doc View Source FieldInfosWriter Declaration public override FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Overrides FieldInfosFormat.FieldInfosWriter Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40StoredFieldsWriter.html",
    "title": "Class Lucene40StoredFieldsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40StoredFieldsWriter Class responsible for writing stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsWriter Lucene40StoredFieldsWriter Implements System.IDisposable Inherited Members StoredFieldsWriter.FinishDocument() StoredFieldsWriter.AddDocument<T1>(IEnumerable<T1>, FieldInfos) StoredFieldsWriter.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public sealed class Lucene40StoredFieldsWriter : StoredFieldsWriter, IDisposable Constructors | Improve this Doc View Source Lucene40StoredFieldsWriter(Directory, String, IOContext) Sole constructor. Declaration public Lucene40StoredFieldsWriter(Directory directory, string segment, IOContext context) Parameters Type Name Description Directory directory System.String segment IOContext context Fields | Improve this Doc View Source FIELDS_EXTENSION Extension of stored fields file. Declaration public const string FIELDS_EXTENSION = \"fdt\" Field Value Type Description System.String | Improve this Doc View Source FIELDS_INDEX_EXTENSION Extension of stored fields index file. Declaration public const string FIELDS_INDEX_EXTENSION = \"fdx\" Field Value Type Description System.String Methods | Improve this Doc View Source Abort() Declaration public override void Abort() Overrides StoredFieldsWriter.Abort() | Improve this Doc View Source AddRawDocuments(IndexInput, Int32[], Int32) Bulk write a contiguous series of documents. The lengths array is the length (in bytes) of each raw document. The stream IndexInput is the fieldsStream from which we should bulk-copy all bytes. Declaration public void AddRawDocuments(IndexInput stream, int[] lengths, int numDocs) Parameters Type Name Description IndexInput stream System.Int32 [] lengths System.Int32 numDocs | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides StoredFieldsWriter.Dispose(Boolean) | Improve this Doc View Source Finish(FieldInfos, Int32) Declaration public override void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs Overrides StoredFieldsWriter.Finish(FieldInfos, Int32) | Improve this Doc View Source Merge(MergeState) Declaration public override int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 Overrides StoredFieldsWriter.Merge(MergeState) | Improve this Doc View Source StartDocument(Int32) Declaration public override void StartDocument(int numStoredFields) Parameters Type Name Description System.Int32 numStoredFields Overrides StoredFieldsWriter.StartDocument(Int32) | Improve this Doc View Source WriteField(FieldInfo, IIndexableField) Declaration public override void WriteField(FieldInfo info, IIndexableField field) Parameters Type Name Description FieldInfo info IIndexableField field Overrides StoredFieldsWriter.WriteField(FieldInfo, IIndexableField) Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Lucene40StoredFieldsFormat"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.Lucene40TermVectorsFormat.html",
    "title": "Class Lucene40TermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene40TermVectorsFormat Lucene 4.0 Term Vectors format. Term Vector support is an optional on a field by field basis. It consists of 3 files. The Document Index or .tvx file. For each document, this stores the offset into the document data (.tvd) and field data (.tvf) files. DocumentIndex (.tvx) --> Header,<DocumentPosition,FieldPosition> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocumentPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvd file) FieldPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvf file) The Document or .tvd file. This contains, for each document, the number of fields, a list of the fields with term vector info and finally a list of pointers to the field information in the .tvf (Term Vector Fields) file. The .tvd file is used to map out the fields that have term vectors stored and where the field information is in the .tvf file. Document (.tvd) --> Header,<NumFields, FieldNums, FieldPositions> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumFields --> VInt ( WriteVInt32(Int32) ) FieldNums --> <FieldNumDelta> NumFields FieldNumDelta --> VInt ( WriteVInt32(Int32) ) FieldPositions --> <FieldPositionDelta> NumFields-1 FieldPositionDelta --> VLong ( WriteVInt64(Int64) ) The Field or .tvf file. This file contains, for each field that has a term vector stored, a list of the terms, their frequencies and, optionally, position, offset, and payload information. Field (.tvf) --> Header,<NumTerms, Flags, TermFreqs> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumTerms --> VInt ( WriteVInt32(Int32) ) Flags --> Byte ( WriteByte(Byte) ) TermFreqs --> <TermText, TermFreq, Positions?, PayloadData?, Offsets?> NumTerms TermText --> <PrefixLength, Suffix> PrefixLength --> VInt ( WriteVInt32(Int32) ) Suffix --> String ( WriteString(String) ) TermFreq --> VInt ( WriteVInt32(Int32) ) Positions --> <PositionDelta PayloadLength?> TermFreq PositionDelta --> VInt ( WriteVInt32(Int32) ) PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> Byte ( WriteByte(Byte) ) NumPayloadBytes Offsets --> <VInt ( WriteVInt32(Int32) ), VInt ( WriteVInt32(Int32) ) > TermFreq Notes: Flags byte stores whether this term vector has position, offset, payload. information stored. Term byte prefixes are shared. The PrefixLength is the number of initial bytes from the previous term which must be pre-pended to a term's suffix in order to form the term's bytes. Thus, if the previous term's text was \"bone\" and the term is \"boy\", the PrefixLength is two and the suffix is \"y\". PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. PayloadData is metadata associated with a term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. PayloadData encodes the concatenated bytes for all of a terms occurrences. Offsets are stored as delta encoded VInts. The first VInt is the startOffset, the second is the endOffset. Inheritance System.Object TermVectorsFormat Lucene40TermVectorsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene40 Assembly : Lucene.Net.dll Syntax public class Lucene40TermVectorsFormat : TermVectorsFormat Constructors | Improve this Doc View Source Lucene40TermVectorsFormat() Sole constructor. Declaration public Lucene40TermVectorsFormat() Methods | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41PostingsWriter.html",
    "title": "Class Lucene41PostingsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41PostingsWriter Concrete class that writes docId(maybe frq,pos,offset,payloads) list with postings format. Postings list for each term will be stored separately. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Lucene41PostingsWriter Implements System.IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41PostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source Lucene41PostingsWriter(SegmentWriteState) Creates a postings writer with PackedInts.COMPACT Declaration public Lucene41PostingsWriter(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state | Improve this Doc View Source Lucene41PostingsWriter(SegmentWriteState, Single) Creates a postings writer with the specified PackedInts overhead ratio Declaration public Lucene41PostingsWriter(SegmentWriteState state, float acceptableOverheadRatio) Parameters Type Name Description SegmentWriteState state System.Single acceptableOverheadRatio Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset Overrides PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsWriterBase.Dispose(Boolean) | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] longs, DataOutput out, FieldInfo fieldInfo, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput out FieldInfo fieldInfo BlockTermState state System.Boolean absolute Overrides PostingsWriterBase.EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source FinishDoc() Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Declaration public override void StartDoc(int docId, int termDocFreq) Parameters Type Name Description System.Int32 docId System.Int32 termDocFreq Overrides PostingsConsumer.StartDoc(Int32, Int32) | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements System.IDisposable Extension Methods Number.IsNumber(Object) See Also Lucene.Net.Codecs.Lucene41.Lucene41SkipWriter"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41StoredFieldsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.Lucene41StoredFieldsFormat.html",
    "title": "Class Lucene41StoredFieldsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene41StoredFieldsFormat Lucene 4.1 stored fields format. Principle This StoredFieldsFormat compresses blocks of 16KB of documents in order to improve the compression ratio compared to document-level compression. It uses the LZ4 compression algorithm, which is fast to compress and very fast to decompress data. Although the compression method that is used focuses more on speed than on compression ratio, it should provide interesting compression ratios for redundant inputs (such as log files, HTML or plain text). File formats Stored fields are represented by two files: A fields data file (extension .fdt ). this file stores a compact representation of documents in compressed blocks of 16KB or more. When writing a segment, documents are appended to an in-memory byte[] buffer. When its size reaches 16KB or more, some metadata about the documents is flushed to disk, immediately followed by a compressed representation of the buffer using the LZ4 compression format . Here is a more detailed description of the field data file format: FieldData (.fdt) --> <Header>, PackedIntsVersion, <Chunk> ChunkCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, DocFieldCounts, DocLengths, <CompressedDocs> DocBase --> the ID of the first document of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs --> the number of documents in the chunk as a VInt ( WriteVInt32(Int32) ) DocFieldCounts --> the number of stored fields of every document in the chunk, encoded as followed: if chunkDocs=1, the unique value is encoded as a VInt ( WriteVInt32(Int32) ) else read a VInt ( WriteVInt32(Int32) ) (let's call it bitsRequired ) if bitsRequired is 0 then all values are equal, and the common value is the following VInt ( WriteVInt32(Int32) ) else bitsRequired is the number of bits required to store any value, and values are stored in a packed ( PackedInt32s ) array where every value is stored on exactly bitsRequired bits DocLengths --> the lengths of all documents in the chunk, encoded with the same method as DocFieldCounts CompressedDocs --> a compressed representation of <Docs> using the LZ4 compression format Docs --> <Doc> ChunkDocs Doc --> <FieldNumAndType, Value> DocFieldCount FieldNumAndType --> a VLong ( WriteVInt64(Int64) ), whose 3 last bits are Type and other bits are FieldNum Type --> 0: Value is String 1: Value is BinaryValue 2: Value is Int 3: Value is Float 4: Value is Long 5: Value is Double 6, 7: unused FieldNum --> an ID of the field Value --> String ( WriteString(String) ) | BinaryValue | Int | Float | Long | Double depending on Type BinaryValue --> ValueLength <Byte> ValueLength Notes If documents are larger than 16KB then chunks will likely contain only one document. However, documents can never spread across several chunks (all fields of a single document are in the same chunk). When at least one document in a chunk is large enough so that the chunk is larger than 32KB, the chunk will actually be compressed in several LZ4 blocks of 16KB. this allows StoredFieldVisitor s which are only interested in the first fields of a document to not have to decompress 10MB of data if the document is 10MB, but only 16KB. Given that the original lengths are written in the metadata of the chunk, the decompressor can leverage this information to stop decoding as soon as enough data has been decompressed. In case documents are incompressible, CompressedDocs will be less than 0.5% larger than Docs. A fields index file (extension .fdx ). FieldsIndex (.fdx) --> <Header>, <ChunkIndex> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Known limitations This StoredFieldsFormat does not support individual documents larger than ( 2 31 - 2 14 ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldsFormat CompressingStoredFieldsFormat Lucene41StoredFieldsFormat Inherited Members CompressingStoredFieldsFormat.FieldsReader(Directory, SegmentInfo, FieldInfos, IOContext) CompressingStoredFieldsFormat.FieldsWriter(Directory, SegmentInfo, IOContext) CompressingStoredFieldsFormat.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene41 Assembly : Lucene.Net.dll Syntax public sealed class Lucene41StoredFieldsFormat : CompressingStoredFieldsFormat Constructors | Improve this Doc View Source Lucene41StoredFieldsFormat() Sole constructor. Declaration public Lucene41StoredFieldsFormat() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.BinaryDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.BinaryDocValuesField.html",
    "title": "Class BinaryDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDocValuesField Field that stores a per-document BytesRef value. The values are stored directly with no sharing, which is a good fit when the fields don't share (many) values, such as a title field. If values may be shared and sorted it's better to use SortedDocValuesField . Here's an example usage: document.Add(new BinaryDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField DerefBytesDocValuesField StraightBytesDocValuesField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class BinaryDocValuesField : Field, IIndexableField Constructors | Improve this Doc View Source BinaryDocValuesField(String, BytesRef) Create a new binary DocValues field. Declaration public BinaryDocValuesField(string name, BytesRef value) Parameters Type Name Description System.String name field name BytesRef value binary content Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source fType Type for straight bytes DocValues . Declaration public static readonly FieldType fType Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also BinaryDocValues"
  },
  "api/Lucene.Net/Lucene.Net.Documents.ByteDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.ByteDocValuesField.html",
    "title": "Class ByteDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteDocValuesField Field that stores a per-document System.Byte value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new ByteDocValuesField(name, (byte) 22)); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field NumericDocValuesField ByteDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use NumericDocValuesField instead\")] public class ByteDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source ByteDocValuesField(String, Byte) Creates a new DocValues field with the specified 8-bit byte value Declaration public ByteDocValuesField(string name, byte value) Parameters Type Name Description System.String name field name System.Byte value 8-bit byte value Exceptions Type Condition System.ArgumentNullException if the field name is null. Methods | Improve this Doc View Source SetByteValue(Byte) Declaration public override void SetByteValue(byte value) Parameters Type Name Description System.Byte value Overrides Field.SetByteValue(Byte) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.PackedInt64DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.PackedInt64DocValuesField.html",
    "title": "Class PackedInt64DocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt64DocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new PackedInt64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was PackedLongDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField PackedInt64DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use NumericDocValuesField instead.\")] public class PackedInt64DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source PackedInt64DocValuesField(String, Int64) Creates a new DocValues field with the specified System.Int64 value Declaration public PackedInt64DocValuesField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value 64-bit System.Int64 value Exceptions Type Condition System.ArgumentException if the field name is null Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.SingleDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.SingleDocValuesField.html",
    "title": "Class SingleDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SingleDocValuesField Syntactic sugar for encoding floats as NumericDocValues via SingleToRawInt32Bits(Single) . Per-document floating point values can be retrieved via GetSingles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring four bytes per document. Consider encoding floating point values yourself with only as much precision as you require. NOTE: This was FloatDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField SingleDocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class SingleDocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source SingleDocValuesField(String, Single) Creates a new DocValues field with the specified 32-bit System.Single value Declaration public SingleDocValuesField(string name, float value) Parameters Type Name Description System.String name field name System.Single value 32-bit System.Single value Exceptions Type Condition System.ArgumentNullException if the field name is null Methods | Improve this Doc View Source SetInt64Value(Int64) Declaration public override void SetInt64Value(long value) Parameters Type Name Description System.Int64 value Overrides Field.SetInt64Value(Int64) | Improve this Doc View Source SetSingleValue(Single) Declaration public override void SetSingleValue(float value) Parameters Type Name Description System.Single value Overrides Field.SetSingleValue(Single) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.html",
    "title": "Class IndexWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexWriter An IndexWriter creates and maintains an index. Inheritance System.Object IndexWriter Implements System.IDisposable ITwoPhaseCommit Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class IndexWriter : IDisposable, ITwoPhaseCommit Remarks The OpenMode option on OpenMode determines whether a new index is created, or whether an existing index is opened. Note that you can open an index with CREATE even while readers are using the index. The old readers will continue to search the \"point in time\" snapshot they had opened, and won't see the newly created index until they re-open. If CREATE_OR_APPEND is used IndexWriter will create a new index if there is not already an index at the provided path and otherwise open the existing index. In either case, documents are added with AddDocument(IEnumerable<IIndexableField>) and removed with DeleteDocuments(Term) or DeleteDocuments(Query) . A document can be updated with UpdateDocument(Term, IEnumerable<IIndexableField>) (which just deletes and then adds the entire document). When finished adding, deleting and updating documents, Dispose() should be called. These changes are buffered in memory and periodically flushed to the Directory (during the above method calls). A flush is triggered when there are enough added documents since the last flush. Flushing is triggered either by RAM usage of the documents (see RAMBufferSizeMB ) or the number of added documents (see MaxBufferedDocs ). The default is to flush when RAM usage hits DEFAULT_RAM_BUFFER_SIZE_MB MB. For best indexing speed you should flush by RAM usage with a large RAM buffer. Additionally, if IndexWriter reaches the configured number of buffered deletes (see MaxBufferedDeleteTerms ) the deleted terms and queries are flushed and applied to existing segments. In contrast to the other flush options RAMBufferSizeMB and MaxBufferedDocs , deleted terms won't trigger a segment flush. Note that flushing just moves the internal buffered state in IndexWriter into the index, but these changes are not visible to IndexReader until either Commit() or Dispose() is called. A flush may also trigger one or more segment merges which by default run with a background thread so as not to block the addDocument calls (see below for changing the Lucene.Net.Index.IndexWriter.mergeScheduler ). Opening an IndexWriter creates a lock file for the directory in use. Trying to open another IndexWriter on the same directory will lead to a LockObtainFailedException . The LockObtainFailedException is also thrown if an IndexReader on the same directory is used to delete documents from the index. Expert: IndexWriter allows an optional IndexDeletionPolicy implementation to be specified. You can use this to control when prior commits are deleted from the index. The default policy is KeepOnlyLastCommitDeletionPolicy which removes all prior commits as soon as a new commit is done (this matches behavior before 2.2). Creating your own policy can allow you to explicitly keep previous \"point in time\" commits alive in the index for some time, to allow readers to refresh to the new commit without having the old commit deleted out from under them. This is necessary on filesystems like NFS that do not support \"delete on last close\" semantics, which Lucene's \"point in time\" search normally relies on. Expert: IndexWriter allows you to separately change the Lucene.Net.Index.IndexWriter.mergePolicy and the Lucene.Net.Index.IndexWriter.mergeScheduler . The Lucene.Net.Index.IndexWriter.mergePolicy is invoked whenever there are changes to the segments in the index. Its role is to select which merges to do, if any, and return a MergePolicy.MergeSpecification describing the merges. The default is LogByteSizeMergePolicy . Then, the MergeScheduler is invoked with the requested merges and it decides when and how to run the merges. The default is . NOTE : if you hit an System.OutOfMemoryException then IndexWriter will quietly record this fact and block all future segment commits. This is a defensive measure in case any internal state (buffered documents and deletions) were corrupted. Any subsequent calls to Commit() will throw an System.InvalidOperationException . The only course of action is to call Dispose() , which internally will call Rollback() , to undo any changes to the index since the last commit. You can also just call Rollback() directly. NOTE : IndexWriter instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexWriter instance as this may cause deadlock; use your own (non-Lucene) objects instead. NOTE : If you call on a thread that's within IndexWriter , IndexWriter will try to catch this (eg, if it's in a Wait() or System.Threading.Thread.Sleep(System.Int32) ), and will then throw the unchecked exception and clear the interrupt status on the thread. Constructors | Improve this Doc View Source IndexWriter(Directory, IndexWriterConfig) Constructs a new IndexWriter per the settings given in conf . If you want to make \"live\" changes to this writer instance, use Config . NOTE: after ths writer is created, the given configuration instance cannot be passed to another writer. If you intend to do so, you should Clone() it beforehand. Declaration public IndexWriter(Directory d, IndexWriterConfig conf) Parameters Type Name Description Directory d the index directory. The index is either created or appended according OpenMode . IndexWriterConfig conf the configuration settings according to which IndexWriter should be initialized. Exceptions Type Condition System.IO.IOException if the directory cannot be read/written to, or if it does not exist and OpenMode is APPEND or if there is any other low-level IO error Fields | Improve this Doc View Source MAX_TERM_LENGTH Absolute hard maximum length for a term, in bytes once encoded as UTF8. If a term arrives from the analyzer longer than this length, an System.ArgumentException is thrown and a message is printed to Lucene.Net.Index.IndexWriter.infoStream , if set (see SetInfoStream(InfoStream) ). Declaration public static readonly int MAX_TERM_LENGTH Field Value Type Description System.Int32 | Improve this Doc View Source SOURCE Key for the source of a segment in the Diagnostics . Declaration public static readonly string SOURCE Field Value Type Description System.String | Improve this Doc View Source SOURCE_ADDINDEXES_READERS Source of a segment which results from a call to AddIndexes(IndexReader[]) . Declaration public static readonly string SOURCE_ADDINDEXES_READERS Field Value Type Description System.String | Improve this Doc View Source SOURCE_FLUSH Source of a segment which results from a flush. Declaration public static readonly string SOURCE_FLUSH Field Value Type Description System.String | Improve this Doc View Source SOURCE_MERGE Source of a segment which results from a merge of other segments. Declaration public static readonly string SOURCE_MERGE Field Value Type Description System.String | Improve this Doc View Source WRITE_LOCK_NAME Name of the write lock in the index. Declaration public static readonly string WRITE_LOCK_NAME Field Value Type Description System.String Properties | Improve this Doc View Source Analyzer Gets the analyzer used by this index. Declaration public virtual Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source CommitData Returns the commit user data map that was last committed, or the one that was set on SetCommitData(IDictionary<String, String>) . Declaration public IDictionary<string, string> CommitData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Config Returns a LiveIndexWriterConfig , which can be used to query the IndexWriter current settings, as well as modify \"live\" ones. Declaration public virtual LiveIndexWriterConfig Config { get; } Property Value Type Description LiveIndexWriterConfig | Improve this Doc View Source Directory Gets the Directory used by this index. Declaration public virtual Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source IsClosed Declaration public virtual bool IsClosed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source KeepFullyDeletedSegments Only for testing. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual bool KeepFullyDeletedSegments { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxDoc Gets total number of docs in this index, including docs not yet flushed (still in the RAM buffer), not counting deletions. Declaration public virtual int MaxDoc { get; } Property Value Type Description System.Int32 See Also NumDocs | Improve this Doc View Source MergingSegments Expert: to be used by a MergePolicy to avoid selecting merges for segments already being merged. The returned collection is not cloned, and thus is only safe to access if you hold IndexWriter 's lock (which you do when IndexWriter invokes the MergePolicy ). Do not alter the returned collection! Declaration public virtual ICollection<SegmentCommitInfo> MergingSegments { get; } Property Value Type Description System.Collections.Generic.ICollection < SegmentCommitInfo > | Improve this Doc View Source NumDocs Gets total number of docs in this index, including docs not yet flushed (still in the RAM buffer), and including deletions. NOTE: buffered deletions are not counted. If you really need these to be counted you should call Commit() first. Declaration public virtual int NumDocs { get; } Property Value Type Description System.Int32 See Also MaxDoc Methods | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>) Adds a document to this index. Note that if an System.Exception is hit (for example disk full) then the index will be consistent, but this document may not have been added. Furthermore, it's possible the index will have one segment in non-compound format even when using compound files (when a merge has partially succeeded). This method periodically flushes pending documents to the Directory (see IndexWriter ), and also periodically triggers segment merges in the index according to the MergePolicy in use. Merges temporarily consume space in the directory. The amount of space required is up to 1X the size of all segments being merged, when no readers/searchers are open against the index, and up to 2X the size of all segments being merged when readers/searchers are open against the index (see ForceMerge(Int32) for details). The sequence of primitive merge operations performed is governed by the merge policy. Note that each term in the document can be no longer than MAX_TERM_LENGTH in bytes, otherwise an System.ArgumentException will be thrown. Note that it's possible to create an invalid Unicode string in java if a UTF16 surrogate pair is malformed. In this case, the invalid characters are silently replaced with the Unicode replacement character U+FFFD. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > doc Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddDocument(IEnumerable<IIndexableField>, Analyzer) Adds a document to this index, using the provided analyzer instead of the value of Analyzer . See AddDocument(IEnumerable<IIndexableField>) for details on index and IndexWriter state after an System.Exception , and flushing/merging temporary free space requirements. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddDocument(IEnumerable<IIndexableField> doc, Analyzer analyzer) Parameters Type Name Description System.Collections.Generic.IEnumerable < IIndexableField > doc Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) Atomically adds a block of documents with sequentially assigned document IDs, such that an external reader will see all or none of the documents. WARNING : the index does not currently record which documents were added as a block. Today this is fine, because merging will preserve a block. The order of documents within a segment will be preserved, even when child documents within a block are deleted. Most search features (like result grouping and block joining) require you to mark documents; when these documents are deleted these search features will not work as expected. Obviously adding documents to an existing block will require you the reindex the entire block. However it's possible that in the future Lucene may merge more aggressively re-order documents (for example, perhaps to obtain better index compression), in which case you may need to fully re-index your documents at that time. See AddDocument(IEnumerable<IIndexableField>) for details on index and IndexWriter state after an System.Exception , and flushing/merging temporary free space requirements. NOTE : tools that do offline splitting of an index (for example, IndexSplitter in Lucene.Net.Misc) or re-sorting of documents (for example, IndexSorter in contrib) are not aware of these atomically added documents and will likely break them up. Use such tools at your own risk! NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. @lucene.experimental Declaration public virtual void AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Atomically adds a block of documents, analyzed using the provided analyzer , with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void AddDocuments(IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer analyzer) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddIndexes(IndexReader[]) Merges the provided indexes into this index. The provided IndexReader s are not closed. See AddIndexes(IndexReader[]) for details on transactional semantics, temporary free space required in the Directory , and non-CFS segments on an System.Exception . NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. NOTE: empty segments are dropped by this method and not added to this index. NOTE: this method merges all given IndexReader s in one merge. If you intend to merge a large number of readers, it may be better to call this method multiple times, each time with a small set of readers. In principle, if you use a merge policy with a mergeFactor or maxMergeAtOnce parameter, you should pass that many readers in one call. Also, if the given readers are DirectoryReader s, they can be opened with termIndexInterval=-1 to save RAM, since during merge the in-memory structure is not used. See Open(Directory, Int32) . NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void AddIndexes(params IndexReader[] readers) Parameters Type Name Description IndexReader [] readers Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source AddIndexes(Directory[]) Adds all segments from an array of indexes into this index. This may be used to parallelize batch indexing. A large document collection can be broken into sub-collections. Each sub-collection can be indexed in parallel, on a different thread, process or machine. The complete index can then be created by merging sub-collection indexes with this method. NOTE: this method acquires the write lock in each directory, to ensure that no IndexWriter is currently open or tries to open while this is running. This method is transactional in how System.Exception s are handled: it does not commit a new segments_N file until all indexes are added. this means if an System.Exception occurs (for example disk full), then either no indexes will have been added or they all will have been. Note that this requires temporary free space in the Directory up to 2X the sum of all input indexes (including the starting index). If readers/searchers are open against the starting index, then temporary free space required will be higher by the size of the starting index (see ForceMerge(Int32) for details). NOTE: this method only copies the segments of the incoming indexes and does not merge them. Therefore deleted documents are not removed and the new segments are not merged with the existing ones. This requires this index not be among those to be added. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void AddIndexes(params Directory[] dirs) Parameters Type Name Description Directory [] dirs Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error LockObtainFailedException if we were unable to acquire the write lock in at least one directory | Improve this Doc View Source Commit() Commits all pending changes (added & deleted documents, segment merges, added indexes, etc.) to the index, and syncs all referenced index files, such that a reader will see the changes and the index updates will survive an OS or machine crash or power loss. Note that this does not wait for any running background merges to finish. This may be a costly operation, so you should test the cost in your application and do it only when really necessary. Note that this operation calls Sync(ICollection<String>) on the index files. That call should not return until the file contents & metadata are on stable storage. For FSDirectory , this calls the OS's fsync. But, beware: some hardware devices may in fact cache writes even during fsync, and return before the bits are actually on stable storage, to give the appearance of faster performance. If you have such a device, and it does not have a battery backup (for example) then on power loss it may still lose data. Lucene cannot guarantee consistency on such devices. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public void Commit() | Improve this Doc View Source DeleteAll() Delete all documents in the index. This method will drop all buffered documents and will remove all segments from the index. This change will not be visible until a Commit() has been called. This method can be rolled back using Rollback() . NOTE: this method is much faster than using DeleteDocuments(new MatchAllDocsQuery()) . Yet, this method also has different semantics compared to DeleteDocuments(Query) / DeleteDocuments(Query[]) since internal data-structures are cleared as well as all segment information is forcefully dropped anti-viral semantics like omitting norms are reset or doc value types are cleared. Essentially a call to DeleteAll() is equivalent to creating a new IndexWriter with CREATE which a delete query only marks documents as deleted. NOTE: this method will forcefully abort all merges in progress. If other threads are running ForceMerge(Int32) , AddIndexes(IndexReader[]) or ForceMergeDeletes() methods, they may receive MergePolicy.MergeAbortedException s. Declaration public virtual void DeleteAll() | Improve this Doc View Source DeleteDocuments(Term) Deletes the document(s) containing term . NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(Term term) Parameters Type Name Description Term term the term to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DeleteDocuments(Term[]) Deletes the document(s) containing any of the terms. All given deletes are applied and flushed atomically at the same time. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(params Term[] terms) Parameters Type Name Description Term [] terms array of terms to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DeleteDocuments(Query) Deletes the document(s) matching the provided query. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(Query query) Parameters Type Name Description Query query the query to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DeleteDocuments(Query[]) Deletes the document(s) matching any of the provided queries. All given deletes are applied and flushed atomically at the same time. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void DeleteDocuments(params Query[] queries) Parameters Type Name Description Query [] queries array of queries to identify the documents to be deleted Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source DeleteUnusedFiles() Expert: remove any index files that are no longer used. IndexWriter normally deletes unused files itself, during indexing. However, on Windows, which disallows deletion of open files, if there is a reader open on the index then those files cannot be deleted. This is fine, because IndexWriter will periodically retry the deletion. However, IndexWriter doesn't try that often: only on open, close, flushing a new segment, and finishing a merge. If you don't do any of these actions with your IndexWriter , you'll see the unused files linger. If that's a problem, call this method to delete them (once you've closed the open readers that were preventing their deletion). In addition, you can call this method to delete unreferenced index commits. this might be useful if you are using an IndexDeletionPolicy which holds onto index commits until some criteria are met, but those commits are no longer needed. Otherwise, those commits will be deleted the next time Commit() is called. Declaration public virtual void DeleteUnusedFiles() | Improve this Doc View Source Dispose() Commits all changes to an index, waits for pending merges to complete, and closes all associated files. This is a \"slow graceful shutdown\" which may take a long time especially if a big merge is pending: If you only want to close resources use Rollback() . If you only want to commit pending changes and close resources see Dispose(Boolean) . Note that this may be a costly operation, so, try to re-use a single writer instead of closing and opening a new one. See Commit() for caveats about write caching done by some IO devices. If an System.Exception is hit during close, eg due to disk full or some other reason, then both the on-disk index and the internal state of the IndexWriter instance will be consistent. However, the close will not be complete even though part of it (flushing buffered documents) may have succeeded, so the write lock will still be held. If you can correct the underlying cause (eg free up some disk space) then you can call Dispose() again. Failing that, if you want to force the write lock to be released (dangerous, because you may then lose buffered docs in the IndexWriter instance) then you can do something like this: try { writer.Dispose(); } finally { if (IndexWriter.IsLocked(directory)) { IndexWriter.Unlock(directory); } } after which, you must be certain not to use the writer instance anymore. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer, again. See IndexWriter for details. Declaration public void Dispose() Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source Dispose(Boolean) Closes the index with or without waiting for currently running merges to finish. This is only meaningful when using a MergeScheduler that runs merges in background threads. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer, again. See IndexWriter for details. NOTE : it is dangerous to always call Dispose(false) , especially when IndexWriter is not open for very long, because this can result in \"merge starvation\" whereby long merges will never have a chance to finish. This will cause too many segments in your index over time. Declaration public virtual void Dispose(bool waitForMerges) Parameters Type Name Description System.Boolean waitForMerges if true , this call will block until all merges complete; else, it will ask all running merges to abort, wait until those merges have finished (which should be at most a few seconds), and then return. | Improve this Doc View Source DoAfterFlush() A hook for extending classes to execute operations after pending added and deleted documents have been flushed to the Directory but before the change is committed (new segments_N file written). Declaration protected virtual void DoAfterFlush() | Improve this Doc View Source DoBeforeFlush() A hook for extending classes to execute operations before pending added and deleted documents are flushed to the Directory . Declaration protected virtual void DoBeforeFlush() | Improve this Doc View Source EnsureOpen() Used internally to throw an System.ObjectDisposedException if this IndexWriter has been disposed ( closed=true ) or is in the process of disposing ( closing=true ). Calls EnsureOpen(Boolean) . Declaration protected void EnsureOpen() Exceptions Type Condition System.ObjectDisposedException if this IndexWriter is disposed | Improve this Doc View Source EnsureOpen(Boolean) Used internally to throw an System.ObjectDisposedException if this IndexWriter has been disposed or is in the process of diposing. Declaration protected void EnsureOpen(bool failIfDisposing) Parameters Type Name Description System.Boolean failIfDisposing if true , also fail when IndexWriter is in the process of disposing ( closing=true ) but not yet done disposing ( closed=false ) Exceptions Type Condition System.ObjectDisposedException if this IndexWriter is closed or in the process of closing | Improve this Doc View Source Flush(Boolean, Boolean) Flush all in-memory buffered updates (adds and deletes) to the Directory . Declaration public void Flush(bool triggerMerge, bool applyAllDeletes) Parameters Type Name Description System.Boolean triggerMerge if true , we may merge segments (if deletes or docs were flushed) if necessary System.Boolean applyAllDeletes whether pending deletes should also | Improve this Doc View Source ForceMerge(Int32) Forces merge policy to merge segments until there are <= maxNumSegments . The actual merges to be executed are determined by the MergePolicy . This is a horribly costly operation, especially when you pass a small maxNumSegments ; usually you should only call this if the index is static (will no longer be changed). Note that this requires up to 2X the index size free space in your Directory (3X if you're using compound file format). For example, if your index size is 10 MB then you need up to 20 MB free for this to complete (30 MB if you're using compound file format). Also, it's best to call Commit() afterwards, to allow IndexWriter to free up disk space. If some but not all readers re-open while merging is underway, this will cause > 2X temporary space to be consumed as those new readers will then hold open the temporary segments at that time. It is best not to re-open readers while merging is running. The actual temporary usage could be much less than these figures (it depends on many factors). In general, once this completes, the total size of the index will be less than the size of the starting index. It could be quite a bit smaller (if there were many pending deletes) or just slightly smaller. If an System.Exception is hit, for example due to disk full, the index will not be corrupted and no documents will be lost. However, it may have been partially merged (some segments were merged but not all), and it's possible that one of the segments in the index will be in non-compound format even when using compound file format. This will occur when the System.Exception is hit during conversion of the segment into compound format. This call will merge those segments present in the index when the call started. If other threads are still adding documents and flushing segments, those newly created segments will not be merged unless you call ForceMerge(Int32) again. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void ForceMerge(int maxNumSegments) Parameters Type Name Description System.Int32 maxNumSegments maximum number of segments left in the index after merging finishes Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error See Also FindMerges ( MergeTrigger , SegmentInfos ) | Improve this Doc View Source ForceMerge(Int32, Boolean) Just like ForceMerge(Int32) , except you can specify whether the call should block until all merging completes. This is only meaningful with a Lucene.Net.Index.IndexWriter.mergeScheduler that is able to run merges in background threads. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void ForceMerge(int maxNumSegments, bool doWait) Parameters Type Name Description System.Int32 maxNumSegments System.Boolean doWait | Improve this Doc View Source ForceMergeDeletes() Forces merging of all segments that have deleted documents. The actual merges to be executed are determined by the MergePolicy . For example, the default TieredMergePolicy will only pick a segment if the percentage of deleted docs is over 10%. This is often a horribly costly operation; rarely is it warranted. To see how many deletions you have pending in your index, call NumDeletedDocs . NOTE : this method first flushes a new segment (if there are indexed documents), and applies all buffered deletes. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void ForceMergeDeletes() | Improve this Doc View Source ForceMergeDeletes(Boolean) Just like ForceMergeDeletes() , except you can specify whether the call should block until the operation completes. This is only meaningful with a MergeScheduler that is able to run merges in background threads. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. NOTE : if you call Dispose(Boolean) with false , which aborts all running merges, then any thread still running this method might hit a MergePolicy.MergeAbortedException . Declaration public virtual void ForceMergeDeletes(bool doWait) Parameters Type Name Description System.Boolean doWait | Improve this Doc View Source GetReader(Boolean) Expert: returns a readonly reader, covering all committed as well as un-committed changes to the index. this provides \"near real-time\" searching, in that changes made during an IndexWriter session can be quickly made available for searching without closing the writer nor calling Commit() . Note that this is functionally equivalent to calling Flush() and then opening a new reader. But the turnaround time of this method should be faster since it avoids the potentially costly Commit() . You must close the IndexReader returned by this method once you are done using it. It's near real-time because there is no hard guarantee on how quickly you can get a new reader after making changes with IndexWriter . You'll have to experiment in your situation to determine if it's fast enough. As this is a new and experimental feature, please report back on your findings so we can learn, improve and iterate. The resulting reader supports DoOpenIfChanged() , but that call will simply forward back to this method (though this may change in the future). The very first time this method is called, this writer instance will make every effort to pool the readers that it opens for doing merges, applying deletes, etc. This means additional resources (RAM, file descriptors, CPU time) will be consumed. For lower latency on reopening a reader, you should set MergedSegmentWarmer to pre-warm a newly merged segment before it's committed to the index. This is important for minimizing index-to-search delay after a large merge. If an AddIndexes* call is running in another thread, then this reader will only search those segments from the foreign index that have been successfully copied over, so far. NOTE : Once the writer is disposed, any outstanding readers may continue to be used. However, if you attempt to reopen any of those readers, you'll hit an System.ObjectDisposedException . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual DirectoryReader GetReader(bool applyAllDeletes) Parameters Type Name Description System.Boolean applyAllDeletes Returns Type Description DirectoryReader IndexReader that covers entire index plus all changes made so far by this IndexWriter instance Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source HasDeletions() Returns true if this index has deletions (including buffered deletions). Note that this will return true if there are buffered Term/Query deletions, even if it turns out those buffered deletions don't match any documents. Also, if a merge kicked off as a result of flushing a Declaration public virtual bool HasDeletions() Returns Type Description System.Boolean | Improve this Doc View Source HasPendingMerges() Expert: returns true if there are merges waiting to be scheduled. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool HasPendingMerges() Returns Type Description System.Boolean | Improve this Doc View Source HasUncommittedChanges() Returns true if there may be changes that have not been committed. There are cases where this may return true when there are no actual \"real\" changes to the index, for example if you've deleted by Term or Query but that Term or Query does not match any documents. Also, if a merge kicked off as a result of flushing a new segment during Commit() , or a concurrent merged finished, this method may return true right after you had just called Commit() . Declaration public bool HasUncommittedChanges() Returns Type Description System.Boolean | Improve this Doc View Source IsLocked(Directory) Returns true iff the index in the named directory is currently locked. Declaration public static bool IsLocked(Directory directory) Parameters Type Name Description Directory directory the directory to check for a lock Returns Type Description System.Boolean Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source MaybeMerge() Expert: asks the Lucene.Net.Index.IndexWriter.mergePolicy whether any merges are necessary now and if so, runs the requested merges and then iterate (test again if merges are needed) until no more merges are returned by the Lucene.Net.Index.IndexWriter.mergePolicy . Explicit calls to MaybeMerge() are usually not necessary. The most common case is when merge policy parameters have changed. this method will call the Lucene.Net.Index.IndexWriter.mergePolicy with EXPLICIT . NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public void MaybeMerge() | Improve this Doc View Source Merge(MergePolicy.OneMerge) Merges the indicated segments, replacing them in the stack with a single segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void Merge(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source MergeFinish(MergePolicy.OneMerge) Does fininishing for a merge, which is fast but holds the synchronized lock on IndexWriter instance. Declaration public void MergeFinish(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source NextMerge() Expert: the Lucene.Net.Index.IndexWriter.mergeScheduler calls this method to retrieve the next merge requested by the MergePolicy This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual MergePolicy.OneMerge NextMerge() Returns Type Description MergePolicy.OneMerge | Improve this Doc View Source NumDeletedDocs(SegmentCommitInfo) Obtain the number of deleted docs for a pooled reader. If the reader isn't being pooled, the segmentInfo's delCount is returned. Declaration public virtual int NumDeletedDocs(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int32 | Improve this Doc View Source NumRamDocs() Expert: Return the number of documents currently buffered in RAM. Declaration public int NumRamDocs() Returns Type Description System.Int32 | Improve this Doc View Source PrepareCommit() Expert: prepare for commit. This does the first phase of 2-phase commit. this method does all steps necessary to commit changes since this writer was opened: flushes pending added and deleted docs, syncs the index files, writes most of next segments_N file. After calling this you must call either Commit() to finish the commit, or Rollback() to revert the commit and undo all changes done since the writer was opened. You can also just call Commit() directly without PrepareCommit() first in which case that method will internally call PrepareCommit() . NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public void PrepareCommit() | Improve this Doc View Source RamSizeInBytes() Expert: Return the total size of all index files currently cached in memory. Useful for size management with flushRamDocs() Declaration public long RamSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source Rollback() Close the IndexWriter without committing any changes that have occurred since the last commit (or since it was opened, if commit hasn't been called). this removes any temporary files that had been created, after which the state of the index will be the same as it was when Commit() was last called or when this writer was first opened. This also clears a previous call to PrepareCommit() . Declaration public virtual void Rollback() Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source SegString() Returns a string description of all segments, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString() Returns Type Description System.String | Improve this Doc View Source SegString(SegmentCommitInfo) Returns a string description of the specified segment, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.String | Improve this Doc View Source SegString(IEnumerable<SegmentCommitInfo>) Returns a string description of the specified segments, for debugging. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual string SegString(IEnumerable<SegmentCommitInfo> infos) Parameters Type Name Description System.Collections.Generic.IEnumerable < SegmentCommitInfo > infos Returns Type Description System.String | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Sets the commit user data map. That method is considered a transaction by IndexWriter and will be committed ( Commit() even if no other changes were made to the writer instance. Note that you must call this method before PrepareCommit() , or otherwise it won't be included in the follow-on Commit() . NOTE: the dictionary is cloned internally, therefore altering the dictionary's contents after calling this method has no effect. Declaration public void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > commitUserData | Improve this Doc View Source TryDeleteDocument(IndexReader, Int32) Expert: attempts to delete by document ID, as long as the provided readerIn is a near-real-time reader (from Open(IndexWriter, Boolean) . If the provided readerIn is an NRT reader obtained from this writer, and its segment has not been merged away, then the delete succeeds and this method returns true ; else, it returns false the caller must then separately delete by Term or Query. NOTE : this method can only delete documents visible to the currently open NRT reader. If you need to delete documents indexed after opening the NRT reader you must use the other DeleteDocument() methods (e.g., DeleteDocuments(Term) ). Declaration public virtual bool TryDeleteDocument(IndexReader readerIn, int docID) Parameters Type Name Description IndexReader readerIn System.Int32 docID Returns Type Description System.Boolean | Improve this Doc View Source Unlock(Directory) Forcibly unlocks the index in the named directory. Caution: this should only be used by failure recovery code, when it is known that no other process nor thread is in fact currently accessing this index. Declaration public static void Unlock(Directory directory) Parameters Type Name Description Directory directory | Improve this Doc View Source UpdateBinaryDocValue(Term, String, BytesRef) Updates a document's BinaryDocValues for field to the given value . this method can be used to 'unset' a document's value by passing null as the new value . Also, you can only update fields that already exist in the index, not add new fields through this method. NOTE: this method currently replaces the existing value of all affected documents with the new value. NOTE: if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateBinaryDocValue(Term term, string field, BytesRef value) Parameters Type Name Description Term term the term to identify the document(s) to be updated System.String field field name of the BinaryDocValues field BytesRef value new value for the field Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>) Updates a document by first deleting the document(s) containing term and then adding the new document. The delete and then add are atomic as seen by a reader on the same index (flush may happen only after the add). NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateDocument(Term term, IEnumerable<IIndexableField> doc) Parameters Type Name Description Term term the term to identify the document(s) to be deleted System.Collections.Generic.IEnumerable < IIndexableField > doc the document to be added Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source UpdateDocument(Term, IEnumerable<IIndexableField>, Analyzer) Updates a document by first deleting the document(s) containing term and then adding the new document. The delete and then add are atomic as seen by a reader on the same index (flush may happen only after the add). NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateDocument(Term term, IEnumerable<IIndexableField> doc, Analyzer analyzer) Parameters Type Name Description Term term the term to identify the document(s) to be deleted System.Collections.Generic.IEnumerable < IIndexableField > doc the document to be added Analyzer analyzer the analyzer to use when analyzing the document Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>) Atomically deletes documents matching the provided delTerm and adds a block of documents with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void UpdateDocuments(Term delTerm, IEnumerable<IEnumerable<IIndexableField>> docs) Parameters Type Name Description Term delTerm System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error See Also AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) | Improve this Doc View Source UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) Atomically deletes documents matching the provided delTerm and adds a block of documents, analyzed using the provided analyzer , with sequentially assigned document IDs, such that an external reader will see all or none of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual void UpdateDocuments(Term delTerm, IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer analyzer) Parameters Type Name Description Term delTerm System.Collections.Generic.IEnumerable < System.Collections.Generic.IEnumerable < IIndexableField >> docs Analyzer analyzer Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error See Also AddDocuments(IEnumerable<IEnumerable<IIndexableField>>) | Improve this Doc View Source UpdateNumericDocValue(Term, String, Nullable<Int64>) Updates a document's NumericDocValues for field to the given value . This method can be used to 'unset' a document's value by passing null as the new value . Also, you can only update fields that already exist in the index, not add new fields through this method. NOTE : if this method hits an System.OutOfMemoryException you should immediately dispose the writer. See IndexWriter for details. Declaration public virtual void UpdateNumericDocValue(Term term, string field, long? value) Parameters Type Name Description Term term the term to identify the document(s) to be updated System.String field field name of the NumericDocValues field System.Nullable < System.Int64 > value new value for the field Exceptions Type Condition CorruptIndexException if the index is corrupt System.IO.IOException if there is a low-level IO error | Improve this Doc View Source WaitForMerges() Wait for any currently outstanding merges to finish. It is guaranteed that any merges started prior to calling this method will have completed once this method completes. Declaration public virtual void WaitForMerges() Implements System.IDisposable ITwoPhaseCommit Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriterConfig.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriterConfig.html",
    "title": "Class IndexWriterConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexWriterConfig Holds all the configuration that is used to create an IndexWriter . Once IndexWriter has been created with this object, changes to this object will not affect the IndexWriter instance. For that, use LiveIndexWriterConfig that is returned from Config . LUCENENET NOTE: Unlike Lucene, we use property setters instead of setter methods. In C#, this allows you to initialize the IndexWriterConfig using the language features of C#, for example: IndexWriterConfig conf = new IndexWriterConfig(analyzer) { Codec = Lucene46Codec(), OpenMode = OpenMode.CREATE }; However, if you prefer to match the syntax of Lucene using chained setter methods, there are extension methods in the Lucene.Net.Support namespace. Example usage: using Lucene.Net.Support; .. IndexWriterConfig conf = new IndexWriterConfig(analyzer) .SetCodec(new Lucene46Codec()) .SetOpenMode(OpenMode.CREATE); @since 3.1 Inheritance System.Object LiveIndexWriterConfig IndexWriterConfig Inherited Members LiveIndexWriterConfig.Analyzer LiveIndexWriterConfig.TermIndexInterval LiveIndexWriterConfig.MaxBufferedDeleteTerms LiveIndexWriterConfig.RAMBufferSizeMB LiveIndexWriterConfig.MaxBufferedDocs LiveIndexWriterConfig.MergedSegmentWarmer LiveIndexWriterConfig.ReaderTermsIndexDivisor LiveIndexWriterConfig.InfoStream LiveIndexWriterConfig.UseCompoundFile LiveIndexWriterConfig.CheckIntegrityAtMerge System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexWriterConfig : LiveIndexWriterConfig Constructors | Improve this Doc View Source IndexWriterConfig(LuceneVersion, Analyzer) Creates a new config that with defaults that match the specified LuceneVersion as well as the default Analyzer . If matchVersion is >= LUCENE_32 , TieredMergePolicy is used for merging; else LogByteSizeMergePolicy . Note that TieredMergePolicy is free to select non-contiguous merges, which means docIDs may not remain monotonic over time. If this is a problem you should switch to LogByteSizeMergePolicy or LogDocMergePolicy . Declaration public IndexWriterConfig(LuceneVersion matchVersion, Analyzer analyzer) Parameters Type Name Description LuceneVersion matchVersion Analyzer analyzer Fields | Improve this Doc View Source DEFAULT_CHECK_INTEGRITY_AT_MERGE Default value for calling CheckIntegrity() before merging segments (set to false ). You can set this to true for additional safety. Declaration public static readonly bool DEFAULT_CHECK_INTEGRITY_AT_MERGE Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_MAX_BUFFERED_DELETE_TERMS Disabled by default (because IndexWriter flushes by RAM usage by default). Declaration public static readonly int DEFAULT_MAX_BUFFERED_DELETE_TERMS Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_BUFFERED_DOCS Disabled by default (because IndexWriter flushes by RAM usage by default). Declaration public static readonly int DEFAULT_MAX_BUFFERED_DOCS Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MAX_THREAD_STATES The maximum number of simultaneous threads that may be indexing documents at once in IndexWriter ; if more than this many threads arrive they will wait for others to finish. Default value is 8. Declaration public static readonly int DEFAULT_MAX_THREAD_STATES Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_RAM_BUFFER_SIZE_MB Default value is 16 MB (which means flush when buffered docs consume approximately 16 MB RAM). Declaration public static readonly double DEFAULT_RAM_BUFFER_SIZE_MB Field Value Type Description System.Double | Improve this Doc View Source DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB Default value is 1945. Change using RAMPerThreadHardLimitMB setter. Declaration public static readonly int DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_READER_POOLING Default setting for UseReaderPooling . Declaration public static readonly bool DEFAULT_READER_POOLING Field Value Type Description System.Boolean | Improve this Doc View Source DEFAULT_READER_TERMS_INDEX_DIVISOR Default value is 1. Change using ReaderTermsIndexDivisor setter. Declaration public static readonly int DEFAULT_READER_TERMS_INDEX_DIVISOR Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_TERM_INDEX_INTERVAL Default value is 32. Change using TermIndexInterval setter. Declaration public static readonly int DEFAULT_TERM_INDEX_INTERVAL Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_USE_COMPOUND_FILE_SYSTEM Default value for compound file system for newly written segments (set to true ). For batch indexing with very large ram buffers use false Declaration public static readonly bool DEFAULT_USE_COMPOUND_FILE_SYSTEM Field Value Type Description System.Boolean | Improve this Doc View Source DISABLE_AUTO_FLUSH Denotes a flush trigger is disabled. Declaration public static readonly int DISABLE_AUTO_FLUSH Field Value Type Description System.Int32 | Improve this Doc View Source WRITE_LOCK_TIMEOUT Default value for the write lock timeout (1,000 ms). Declaration public static long WRITE_LOCK_TIMEOUT Field Value Type Description System.Int64 Properties | Improve this Doc View Source Codec Gets or sets the Codec . Only takes effect when IndexWriter is first created. Declaration public Codec Codec { get; set; } Property Value Type Description Codec | Improve this Doc View Source DefaultWriteLockTimeout Gets or sets the default (for any instance) maximum time to wait for a write lock (in milliseconds). Declaration public static long DefaultWriteLockTimeout { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source IndexCommit Expert: allows to open a certain commit point. The default is null which opens the latest commit point. Only takes effect when IndexWriter is first created. Declaration public IndexCommit IndexCommit { get; set; } Property Value Type Description IndexCommit | Improve this Doc View Source IndexDeletionPolicy Expert: allows an optional IndexDeletionPolicy implementation to be specified. You can use this to control when prior commits are deleted from the index. The default policy is KeepOnlyLastCommitDeletionPolicy which removes all prior commits as soon as a new commit is done (this matches behavior before 2.2). Creating your own policy can allow you to explicitly keep previous \"point in time\" commits alive in the index for some time, to allow readers to refresh to the new commit without having the old commit deleted out from under them. This is necessary on filesystems like NFS that do not support \"delete on last close\" semantics, which Lucene's \"point in time\" search normally relies on. NOTE: the deletion policy cannot be null . Only takes effect when IndexWriter is first created. Declaration public IndexDeletionPolicy IndexDeletionPolicy { get; set; } Property Value Type Description IndexDeletionPolicy | Improve this Doc View Source MaxThreadStates Gets or sets the max number of simultaneous threads that may be indexing documents at once in IndexWriter . Values < 1 are invalid and if passed maxThreadStates will be set to DEFAULT_MAX_THREAD_STATES . Only takes effect when IndexWriter is first created. Declaration public int MaxThreadStates { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergePolicy Expert: MergePolicy is invoked whenever there are changes to the segments in the index. Its role is to select which merges to do, if any, and return a MergePolicy.MergeSpecification describing the merges. It also selects merges to do for ForceMerge(Int32) . Only takes effect when IndexWriter is first created. Declaration public MergePolicy MergePolicy { get; set; } Property Value Type Description MergePolicy | Improve this Doc View Source MergeScheduler Expert: Gets or sets the merge scheduler used by this writer. The default is TaskMergeScheduler . NOTE: the merge scheduler cannot be null . Only takes effect when IndexWriter is first created. Declaration public IMergeScheduler MergeScheduler { get; set; } Property Value Type Description IMergeScheduler | Improve this Doc View Source OpenMode Specifies OpenMode of the index. Only takes effect when IndexWriter is first created. Declaration public OpenMode OpenMode { get; set; } Property Value Type Description OpenMode | Improve this Doc View Source RAMPerThreadHardLimitMB Expert: Gets or sets the maximum memory consumption per thread triggering a forced flush if exceeded. A Lucene.Net.Index.DocumentsWriterPerThread is forcefully flushed once it exceeds this limit even if the RAMBufferSizeMB has not been exceeded. This is a safety limit to prevent a Lucene.Net.Index.DocumentsWriterPerThread from address space exhaustion due to its internal 32 bit signed integer based memory addressing. The given value must be less that 2GB (2048MB). Declaration public int RAMPerThreadHardLimitMB { get; set; } Property Value Type Description System.Int32 See Also DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB | Improve this Doc View Source Similarity Expert: set the Similarity implementation used by this IndexWriter . NOTE: the similarity cannot be null . Only takes effect when IndexWriter is first created. Declaration public Similarity Similarity { get; set; } Property Value Type Description Similarity | Improve this Doc View Source UseReaderPooling By default, IndexWriter does not pool the SegmentReader s it must open for deletions and merging, unless a near-real-time reader has been obtained by calling Open(IndexWriter, Boolean) . this setting lets you enable pooling without getting a near-real-time reader. NOTE: if you set this to false , IndexWriter will still pool readers once Open(IndexWriter, Boolean) is called. Only takes effect when IndexWriter is first created. Declaration public bool UseReaderPooling { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source WriteLockTimeout Gets or sets the maximum time to wait for a write lock (in milliseconds) for this instance. You can change the default value for all instances by calling the DefaultWriteLockTimeout setter. Only takes effect when IndexWriter is first created. Declaration public long WriteLockTimeout { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source SetInfoStream(InfoStream) Information about merges, deletes and a message when maxFieldLength is reached will be printed to this. Must not be null , but NO_OUTPUT may be used to supress output. Declaration public IndexWriterConfig SetInfoStream(InfoStream infoStream) Parameters Type Name Description InfoStream infoStream Returns Type Description IndexWriterConfig | Improve this Doc View Source SetInfoStream(TextWriter) Convenience method that uses TextWriterInfoStream to write to the passed in System.IO.TextWriter . Must not be null . Declaration public IndexWriterConfig SetInfoStream(TextWriter printStream) Parameters Type Name Description System.IO.TextWriter printStream Returns Type Description IndexWriterConfig | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides LiveIndexWriterConfig.ToString() Extension Methods IndexWriterConfigExtensions.SetTermIndexInterval(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetTermIndexInterval(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(IndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(IndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetDefaultWriteLockTimeout(IndexWriterConfig, Int64) IndexWriterConfigExtensions.SetOpenMode(IndexWriterConfig, OpenMode) IndexWriterConfigExtensions.SetIndexDeletionPolicy(IndexWriterConfig, IndexDeletionPolicy) IndexWriterConfigExtensions.SetIndexCommit(IndexWriterConfig, IndexCommit) IndexWriterConfigExtensions.SetSimilarity(IndexWriterConfig, Similarity) IndexWriterConfigExtensions.SetMergeScheduler(IndexWriterConfig, IMergeScheduler) IndexWriterConfigExtensions.SetWriteLockTimeout(IndexWriterConfig, Int64) IndexWriterConfigExtensions.SetMergePolicy(IndexWriterConfig, MergePolicy) IndexWriterConfigExtensions.SetCodec(IndexWriterConfig, Codec) IndexWriterConfigExtensions.SetMaxThreadStates(IndexWriterConfig, Int32) IndexWriterConfigExtensions.SetReaderPooling(IndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetRAMPerThreadHardLimitMB(IndexWriterConfig, Int32) Number.IsNumber(Object) See Also Config"
  },
  "api/Lucene.Net/Lucene.Net.Index.KeepOnlyLastCommitDeletionPolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.KeepOnlyLastCommitDeletionPolicy.html",
    "title": "Class KeepOnlyLastCommitDeletionPolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KeepOnlyLastCommitDeletionPolicy This IndexDeletionPolicy implementation that keeps only the most recent commit and immediately removes all prior commits after a new commit is done. This is the default deletion policy. Inheritance System.Object IndexDeletionPolicy KeepOnlyLastCommitDeletionPolicy Inherited Members IndexDeletionPolicy.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class KeepOnlyLastCommitDeletionPolicy : IndexDeletionPolicy Constructors | Improve this Doc View Source KeepOnlyLastCommitDeletionPolicy() Sole constructor. Declaration public KeepOnlyLastCommitDeletionPolicy() Methods | Improve this Doc View Source OnCommit<T>(IList<T>) Deletes all commits except the most recent one. Declaration public override void OnCommit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnCommit<T>(System.Collections.Generic.IList<T>) | Improve this Doc View Source OnInit<T>(IList<T>) Deletes all commits except the most recent one. Declaration public override void OnInit<T>(IList<T> commits) where T : IndexCommit Parameters Type Name Description System.Collections.Generic.IList <T> commits Type Parameters Name Description T Overrides Lucene.Net.Index.IndexDeletionPolicy.OnInit<T>(System.Collections.Generic.IList<T>) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.PrefixTreeStrategy.html",
    "title": "Class PrefixTreeStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixTreeStrategy An abstract SpatialStrategy based on SpatialPrefixTree . The two subclasses are RecursivePrefixTreeStrategy and TermQueryPrefixTreeStrategy . This strategy is most effective as a fast approximate spatial search filter. Characteristics: Can index any shape; however only RecursivePrefixTreeStrategy can effectively search non-point shapes. Can index a variable number of shapes per field value. This strategy can do it via multiple calls to CreateIndexableFields(IShape) for a document or by giving it some sort of Shape aggregate (e.g. NTS WKT MultiPoint). The shape's boundary is approximated to a grid precision. Can query with any shape. The shape's boundary is approximated to a grid precision. Only Intersects is supported. If only points are indexed then this is effectively equivalent to IsWithin. The strategy supports MakeDistanceValueSource(IPoint, Double) even for multi-valued data, so long as the indexed data is all points; the behavior is undefined otherwise. However, it will likely be removed in the future in lieu of using another strategy with a more scalable implementation. Use of this call is the only circumstance in which a cache is used. The cache is simple but as such it doesn't scale to large numbers of points nor is it real-time-search friendly. Implementation: The SpatialPrefixTree does most of the work, for example returning a list of terms representing grids of various sizes for a supplied shape. An important configuration item is DistErrPct which balances shape precision against scalability. See those docs. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy RecursivePrefixTreeStrategy TermQueryPrefixTreeStrategy Inherited Members SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeFilter(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public abstract class PrefixTreeStrategy : SpatialStrategy Constructors | Improve this Doc View Source PrefixTreeStrategy(SpatialPrefixTree, String, Boolean) Declaration public PrefixTreeStrategy(SpatialPrefixTree grid, string fieldName, bool simplifyIndexedCells) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName System.Boolean simplifyIndexedCells Fields | Improve this Doc View Source FIELD_TYPE Indexed, tokenized, not stored. Declaration public static readonly FieldType FIELD_TYPE Field Value Type Description FieldType | Improve this Doc View Source m_defaultFieldValuesArrayLen Declaration protected int m_defaultFieldValuesArrayLen Field Value Type Description System.Int32 | Improve this Doc View Source m_distErrPct Declaration protected double m_distErrPct Field Value Type Description System.Double | Improve this Doc View Source m_grid Declaration protected readonly SpatialPrefixTree m_grid Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_simplifyIndexedCells Declaration protected readonly bool m_simplifyIndexedCells Field Value Type Description System.Boolean Properties | Improve this Doc View Source DefaultFieldValuesArrayLen A memory hint used by MakeDistanceValueSource(IPoint) for how big the initial size of each Document's array should be. The default is 2. Set this to slightly more than the default expected number of points per document. Declaration public virtual int DefaultFieldValuesArrayLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source DistErrPct The default measure of shape precision affecting shapes at index and query times. Declaration public virtual double DistErrPct { get; set; } Property Value Type Description System.Double Remarks The default measure of shape precision affecting shapes at index and query times. Points don't use this as they are always indexed at the configured maximum precision ( MaxLevels ); this applies to all other shapes. Specific shapes at index and query time can use something different than this default value. If you don't set a default then the default is DEFAULT_DISTERRPCT -- 2.5%. See Also DistErrPct | Improve this Doc View Source Grid Declaration public virtual SpatialPrefixTree Grid { get; } Property Value Type Description SpatialPrefixTree Methods | Improve this Doc View Source CreateIndexableFields(IShape) Declaration public override Field[] CreateIndexableFields(IShape shape) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape Returns Type Description Field [] Overrides SpatialStrategy.CreateIndexableFields(IShape) | Improve this Doc View Source CreateIndexableFields(IShape, Double) Declaration public virtual Field[] CreateIndexableFields(IShape shape, double distErr) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape System.Double distErr Returns Type Description Field [] | Improve this Doc View Source MakeDistanceValueSource(IPoint, Double) Declaration public override ValueSource MakeDistanceValueSource(IPoint queryPoint, double multiplier) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint queryPoint System.Double multiplier Returns Type Description ValueSource Overrides SpatialStrategy.MakeDistanceValueSource(IPoint, Double)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.RecursivePrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.RecursivePrefixTreeStrategy.html",
    "title": "Class RecursivePrefixTreeStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RecursivePrefixTreeStrategy A PrefixTreeStrategy which uses AbstractVisitingPrefixTreeFilter . This strategy has support for searching non-point shapes (note: not tested). Even a query shape with distErrPct=0 (fully precise to the grid) should have good performance for typical data, unless there is a lot of indexed data coincident with the shape's edge. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy RecursivePrefixTreeStrategy Inherited Members PrefixTreeStrategy.m_grid PrefixTreeStrategy.m_simplifyIndexedCells PrefixTreeStrategy.m_defaultFieldValuesArrayLen PrefixTreeStrategy.m_distErrPct PrefixTreeStrategy.DefaultFieldValuesArrayLen PrefixTreeStrategy.DistErrPct PrefixTreeStrategy.CreateIndexableFields(IShape) PrefixTreeStrategy.CreateIndexableFields(IShape, Double) PrefixTreeStrategy.FIELD_TYPE PrefixTreeStrategy.MakeDistanceValueSource(IPoint, Double) PrefixTreeStrategy.Grid SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class RecursivePrefixTreeStrategy : PrefixTreeStrategy Constructors | Improve this Doc View Source RecursivePrefixTreeStrategy(SpatialPrefixTree, String) Declaration public RecursivePrefixTreeStrategy(SpatialPrefixTree grid, string fieldName) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName Fields | Improve this Doc View Source m_multiOverlappingIndexedShapes See m_multiOverlappingIndexedShapes . Declaration protected bool m_multiOverlappingIndexedShapes Field Value Type Description System.Boolean | Improve this Doc View Source m_pointsOnly True if only indexed points shall be supported. See Lucene.Net.Spatial.Prefix.IntersectsPrefixTreeFilter.hasIndexedLeaves . Declaration protected bool m_pointsOnly Field Value Type Description System.Boolean Properties | Improve this Doc View Source PrefixGridScanLevel Sets the grid level [1-maxLevels] at which indexed terms are scanned brute-force instead of by grid decomposition. By default this is maxLevels - 4. The final level, maxLevels, is always scanned. Value can be 1 to maxLevels. Declaration public virtual int PrefixGridScanLevel { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SpatialStrategy.ToString()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.TermQueryPrefixTreeStrategy.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.TermQueryPrefixTreeStrategy.html",
    "title": "Class TermQueryPrefixTreeStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermQueryPrefixTreeStrategy A basic implementation of PrefixTreeStrategy using a large TermsFilter of all the cells from GetCells(IShape, Int32, Boolean, Boolean) . It only supports the search of indexed Point shapes. The precision of query shapes (DistErrPct) is an important factor in using this Strategy. If the precision is too precise then it will result in many terms which will amount to a slower query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialStrategy PrefixTreeStrategy TermQueryPrefixTreeStrategy Inherited Members PrefixTreeStrategy.m_grid PrefixTreeStrategy.m_simplifyIndexedCells PrefixTreeStrategy.m_defaultFieldValuesArrayLen PrefixTreeStrategy.m_distErrPct PrefixTreeStrategy.DefaultFieldValuesArrayLen PrefixTreeStrategy.DistErrPct PrefixTreeStrategy.CreateIndexableFields(IShape) PrefixTreeStrategy.CreateIndexableFields(IShape, Double) PrefixTreeStrategy.FIELD_TYPE PrefixTreeStrategy.MakeDistanceValueSource(IPoint, Double) PrefixTreeStrategy.Grid SpatialStrategy.m_ctx SpatialStrategy.SpatialContext SpatialStrategy.FieldName SpatialStrategy.MakeDistanceValueSource(IPoint) SpatialStrategy.MakeQuery(SpatialArgs) SpatialStrategy.MakeRecipDistanceValueSource(IShape) SpatialStrategy.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class TermQueryPrefixTreeStrategy : PrefixTreeStrategy Constructors | Improve this Doc View Source TermQueryPrefixTreeStrategy(SpatialPrefixTree, String) Declaration public TermQueryPrefixTreeStrategy(SpatialPrefixTree grid, string fieldName) Parameters Type Name Description SpatialPrefixTree grid System.String fieldName Methods | Improve this Doc View Source MakeFilter(SpatialArgs) Declaration public override Filter MakeFilter(SpatialArgs args) Parameters Type Name Description SpatialArgs args Returns Type Description Filter Overrides SpatialStrategy.MakeFilter(SpatialArgs)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.Cell.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.Cell.html",
    "title": "Class Cell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Cell Represents a grid cell. These are not necessarily thread-safe, although new Cell(\"\") (world cell) must be. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Cell Implements System.IComparable < Cell > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public abstract class Cell : IComparable<Cell> Constructors | Improve this Doc View Source Cell(SpatialPrefixTree, Byte[], Int32, Int32) Declaration protected Cell(SpatialPrefixTree outerInstance, byte[] bytes, int off, int len) Parameters Type Name Description SpatialPrefixTree outerInstance System.Byte [] bytes System.Int32 off System.Int32 len | Improve this Doc View Source Cell(SpatialPrefixTree, String) Declaration protected Cell(SpatialPrefixTree outerInstance, string token) Parameters Type Name Description SpatialPrefixTree outerInstance System.String token Fields | Improve this Doc View Source LEAF_BYTE Declaration public const byte LEAF_BYTE = 43 Field Value Type Description System.Byte | Improve this Doc View Source m_leaf Always false for points. Declaration protected bool m_leaf Field Value Type Description System.Boolean Remarks Always false for points. Otherwise, indicate no further sub-cells are going to be provided because shapeRel is WITHIN or maxLevels or a detailLevel is hit. | Improve this Doc View Source m_outerInstance LUCENENET specific - we need to set the SpatialPrefixTree before calling overridden members of this class, just in case those overridden members require it. This is not possible from the subclass because the constructor of the base class runs first. So we need to move the reference here and also set it before running the normal constructor logic. Declaration protected readonly SpatialPrefixTree m_outerInstance Field Value Type Description SpatialPrefixTree | Improve this Doc View Source m_shapeRel When set via GetSubCells(IShape) , it is the relationship between this cell and the given shape filter. Declaration protected SpatialRelation m_shapeRel Field Value Type Description Spatial4n.Core.Shapes.SpatialRelation Properties | Improve this Doc View Source Center Declaration public virtual IPoint Center { get; } Property Value Type Description Spatial4n.Core.Shapes.IPoint | Improve this Doc View Source IsLeaf For points, this is always false. Declaration public virtual bool IsLeaf { get; } Property Value Type Description System.Boolean Remarks For points, this is always false. Otherwise this is true if there are no further cells with this prefix for the shape (always true at maxLevels). | Improve this Doc View Source Level Declaration public virtual int Level { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Shape Declaration public abstract IShape Shape { get; } Property Value Type Description Spatial4n.Core.Shapes.IShape | Improve this Doc View Source ShapeRel Declaration public virtual SpatialRelation ShapeRel { get; } Property Value Type Description Spatial4n.Core.Shapes.SpatialRelation | Improve this Doc View Source SubCellsSize GetSubCells() .Count -- usually a constant. Should be >=2 Declaration public abstract int SubCellsSize { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TokenString Note: doesn't contain a trailing leaf byte. Declaration public virtual string TokenString { get; } Property Value Type Description System.String Methods | Improve this Doc View Source CompareTo(Cell) Declaration public virtual int CompareTo(Cell o) Parameters Type Name Description Cell o Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetSubCell(IPoint) Performant implementations are expected to implement this efficiently by considering the current cell's boundary. Declaration public abstract Cell GetSubCell(IPoint p) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p Returns Type Description Cell Remarks Performant implementations are expected to implement this efficiently by considering the current cell's boundary. Precondition: Never called when Level == maxLevel. Precondition: this.Shape.Relate(p) != SpatialRelation.DISJOINT. | Improve this Doc View Source GetSubCells() Gets the cells at the next grid cell level that cover this cell. Declaration protected abstract ICollection<Cell> GetSubCells() Returns Type Description System.Collections.Generic.ICollection < Cell > A set of cells (no dups), sorted, modifiable, not empty, not null. Remarks Gets the cells at the next grid cell level that cover this cell. Precondition: Never called when Level == maxLevel. | Improve this Doc View Source GetSubCells(IShape) Like GetSubCells() but with the results filtered by a shape. If that shape is a Spatial4n.Core.Shapes.IPoint then it must call GetSubCell(IPoint) . The returned cells should have ShapeRel set to their relation with shapeFilter . In addition, IsLeaf must be true when that relation is Spatial4n.Core.Shapes.SpatialRelation.WITHIN . Precondition: Never called when Level == maxLevel. Declaration public virtual ICollection<Cell> GetSubCells(IShape shapeFilter) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shapeFilter an optional filter for the returned cells. Returns Type Description System.Collections.Generic.ICollection < Cell > A set of cells (no dups), sorted. Not Modifiable. | Improve this Doc View Source GetTokenBytes() Note: doesn't contain a trailing leaf byte. Declaration public virtual byte[] GetTokenBytes() Returns Type Description System.Byte [] | Improve this Doc View Source Reset(Byte[], Int32, Int32) Declaration public virtual void Reset(byte[] bytes, int off, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len | Improve this Doc View Source SetLeaf() Note: not supported at level 0. Declaration public virtual void SetLeaf() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.Factory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.Factory.html",
    "title": "Class GeohashPrefixTree.Factory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GeohashPrefixTree.Factory Factory for creating GeohashPrefixTree instances with useful defaults Inheritance System.Object SpatialPrefixTreeFactory GeohashPrefixTree.Factory Inherited Members SpatialPrefixTreeFactory.PREFIX_TREE SpatialPrefixTreeFactory.MAX_LEVELS SpatialPrefixTreeFactory.MAX_DIST_ERR SpatialPrefixTreeFactory.m_args SpatialPrefixTreeFactory.m_ctx SpatialPrefixTreeFactory.m_maxLevels SpatialPrefixTreeFactory.MakeSPT(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.Init(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.InitMaxLevels() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class Factory : SpatialPrefixTreeFactory Methods | Improve this Doc View Source GetLevelForDistance(Double) Declaration protected override int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 Overrides SpatialPrefixTreeFactory.GetLevelForDistance(Double) | Improve this Doc View Source NewSPT() Declaration protected override SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree Overrides SpatialPrefixTreeFactory.NewSPT()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.GeohashPrefixTree.html",
    "title": "Class GeohashPrefixTree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GeohashPrefixTree A SpatialPrefixTree based on Geohashes . Uses Spatial4n.Core.Util.GeohashUtils to do all the geohash work. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTree GeohashPrefixTree Inherited Members SpatialPrefixTree.m_maxLevels SpatialPrefixTree.m_ctx SpatialPrefixTree.SpatialContext SpatialPrefixTree.MaxLevels SpatialPrefixTree.ToString() SpatialPrefixTree.GetDistanceForLevel(Int32) SpatialPrefixTree.WorldCell SpatialPrefixTree.GetCell(Byte[], Int32, Int32, Cell) SpatialPrefixTree.GetCells(IShape, Int32, Boolean, Boolean) SpatialPrefixTree.GetCells(IPoint, Int32, Boolean) SpatialPrefixTree.CellsToTokenStrings(ICollection<Cell>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class GeohashPrefixTree : SpatialPrefixTree Constructors | Improve this Doc View Source GeohashPrefixTree(SpatialContext, Int32) Declaration public GeohashPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.Int32 maxLevels Properties | Improve this Doc View Source MaxLevelsPossible Any more than this and there's no point (double lat & lon are the same). Declaration public static int MaxLevelsPossible { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetCell(IPoint, Int32) Declaration protected override Cell GetCell(IPoint p, int level) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p System.Int32 level Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(IPoint, Int32) | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public override Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(Byte[], Int32, Int32) | Improve this Doc View Source GetCell(String) Declaration public override Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(String) | Improve this Doc View Source GetLevelForDistance(Double) Declaration public override int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist Returns Type Description System.Int32 Overrides SpatialPrefixTree.GetLevelForDistance(Double)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.Factory.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.Factory.html",
    "title": "Class QuadPrefixTree.Factory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QuadPrefixTree.Factory Factory for creating QuadPrefixTree instances with useful defaults Inheritance System.Object SpatialPrefixTreeFactory QuadPrefixTree.Factory Inherited Members SpatialPrefixTreeFactory.PREFIX_TREE SpatialPrefixTreeFactory.MAX_LEVELS SpatialPrefixTreeFactory.MAX_DIST_ERR SpatialPrefixTreeFactory.m_args SpatialPrefixTreeFactory.m_ctx SpatialPrefixTreeFactory.m_maxLevels SpatialPrefixTreeFactory.MakeSPT(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.Init(IDictionary<String, String>, SpatialContext) SpatialPrefixTreeFactory.InitMaxLevels() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class Factory : SpatialPrefixTreeFactory Methods | Improve this Doc View Source GetLevelForDistance(Double) Declaration protected override int GetLevelForDistance(double degrees) Parameters Type Name Description System.Double degrees Returns Type Description System.Int32 Overrides SpatialPrefixTreeFactory.GetLevelForDistance(Double) | Improve this Doc View Source NewSPT() Declaration protected override SpatialPrefixTree NewSPT() Returns Type Description SpatialPrefixTree Overrides SpatialPrefixTreeFactory.NewSPT()"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.Tree.QuadPrefixTree.html",
    "title": "Class QuadPrefixTree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QuadPrefixTree A SpatialPrefixTree which uses a quad tree in which an indexed term will be generated for each cell, 'A', 'B', 'C', 'D'. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SpatialPrefixTree QuadPrefixTree Inherited Members SpatialPrefixTree.m_maxLevels SpatialPrefixTree.m_ctx SpatialPrefixTree.SpatialContext SpatialPrefixTree.MaxLevels SpatialPrefixTree.ToString() SpatialPrefixTree.GetDistanceForLevel(Int32) SpatialPrefixTree.WorldCell SpatialPrefixTree.GetCell(Byte[], Int32, Int32, Cell) SpatialPrefixTree.GetCells(IShape, Int32, Boolean, Boolean) SpatialPrefixTree.GetCells(IPoint, Int32, Boolean) SpatialPrefixTree.CellsToTokenStrings(ICollection<Cell>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Spatial.Prefix.Tree Assembly : Lucene.Net.Spatial.dll Syntax public class QuadPrefixTree : SpatialPrefixTree Constructors | Improve this Doc View Source QuadPrefixTree(SpatialContext) Declaration public QuadPrefixTree(SpatialContext ctx) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx | Improve this Doc View Source QuadPrefixTree(SpatialContext, IRectangle, Int32) Declaration public QuadPrefixTree(SpatialContext ctx, IRectangle bounds, int maxLevels) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx Spatial4n.Core.Shapes.IRectangle bounds System.Int32 maxLevels | Improve this Doc View Source QuadPrefixTree(SpatialContext, Int32) Declaration public QuadPrefixTree(SpatialContext ctx, int maxLevels) Parameters Type Name Description Spatial4n.Core.Context.SpatialContext ctx System.Int32 maxLevels Fields | Improve this Doc View Source DEFAULT_MAX_LEVELS Declaration public const int DEFAULT_MAX_LEVELS = 12 Field Value Type Description System.Int32 | Improve this Doc View Source MAX_LEVELS_POSSIBLE Declaration public const int MAX_LEVELS_POSSIBLE = 50 Field Value Type Description System.Int32 Properties | Improve this Doc View Source GridH Declaration public double GridH { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source GetCell(IPoint, Int32) Declaration protected override Cell GetCell(IPoint p, int level) Parameters Type Name Description Spatial4n.Core.Shapes.IPoint p System.Int32 level Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(IPoint, Int32) | Improve this Doc View Source GetCell(Byte[], Int32, Int32) Declaration public override Cell GetCell(byte[] bytes, int offset, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 offset System.Int32 len Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(Byte[], Int32, Int32) | Improve this Doc View Source GetCell(String) Declaration public override Cell GetCell(string token) Parameters Type Name Description System.String token Returns Type Description Cell Overrides SpatialPrefixTree.GetCell(String) | Improve this Doc View Source GetLevelForDistance(Double) Declaration public override int GetLevelForDistance(double dist) Parameters Type Name Description System.Double dist Returns Type Description System.Int32 Overrides SpatialPrefixTree.GetLevelForDistance(Double) | Improve this Doc View Source PrintInfo(TextWriter) Declaration public virtual void PrintInfo(TextWriter out) Parameters Type Name Description System.IO.TextWriter out"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.WithinPrefixTreeFilter.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.WithinPrefixTreeFilter.html",
    "title": "Class WithinPrefixTreeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WithinPrefixTreeFilter Finds docs where its indexed shape is IsWithin the query shape. It works by looking at cells outside of the query shape to ensure documents there are excluded. By default, it will examine all cells, and it's fairly slow. If you know that the indexed shapes are never comprised of multiple disjoint parts (which also means it is not multi-valued), then you can pass SpatialPrefixTree.GetDistanceForLevel(maxLevels) as the queryBuffer constructor parameter to minimally look this distance beyond the query shape's edge. Even if the indexed shapes are sometimes comprised of multiple disjoint parts, you might want to use this option with a large buffer as a faster approximation with minimal false-positives. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Filter AbstractPrefixTreeFilter AbstractVisitingPrefixTreeFilter WithinPrefixTreeFilter Inherited Members AbstractVisitingPrefixTreeFilter.m_prefixGridScanLevel AbstractVisitingPrefixTreeFilter.Equals(Object) AbstractVisitingPrefixTreeFilter.GetHashCode() AbstractPrefixTreeFilter.m_queryShape AbstractPrefixTreeFilter.m_fieldName AbstractPrefixTreeFilter.m_grid AbstractPrefixTreeFilter.m_detailLevel Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Spatial.Prefix Assembly : Lucene.Net.Spatial.dll Syntax public class WithinPrefixTreeFilter : AbstractVisitingPrefixTreeFilter Constructors | Improve this Doc View Source WithinPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32, Double) See AbstractVisitingPrefixTreeFilter(IShape, String, SpatialPrefixTree, Int32, Int32) . queryBuffer is the (minimum) distance beyond the query shape edge where non-matching documents are looked for so they can be excluded. If -1 is used then the whole world is examined (a good default for correctness). Declaration public WithinPrefixTreeFilter(IShape queryShape, string fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel, double queryBuffer) Parameters Type Name Description Spatial4n.Core.Shapes.IShape queryShape System.String fieldName SpatialPrefixTree grid System.Int32 detailLevel System.Int32 prefixGridScanLevel System.Double queryBuffer Methods | Improve this Doc View Source BufferShape(IShape, Double) Returns a new shape that is larger than shape by at distErr. Declaration protected virtual IShape BufferShape(IShape shape, double distErr) Parameters Type Name Description Spatial4n.Core.Shapes.IShape shape System.Double distErr Returns Type Description Spatial4n.Core.Shapes.IShape | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilterFactory.html",
    "title": "Class TruncateTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TruncateTokenFilterFactory Factory for TruncateTokenFilter . The following type is recommended for \" diacritics-insensitive search \" for Turkish. <fieldType name=\"text_tr_ascii_f5\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"true\"/> <filter class=\"solr.KeywordRepeatFilterFactory\"/> <filter class=\"solr.TruncateTokenFilterFactory\" prefixLength=\"5\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory TruncateTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class TruncateTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source TruncateTokenFilterFactory(IDictionary<String, String>) Creates a new TruncateTokenFilterFactory Declaration public TruncateTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PREFIX_LENGTH_KEY Declaration public const string PREFIX_LENGTH_KEY = \"prefixLength\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilter.html",
    "title": "Class WordDelimiterFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordDelimiterFilter Splits words into subwords and performs optional transformations on subword groups. Words are split into subwords with the following rules: split on intra-word delimiters (by default, all non alpha-numeric characters): \"Wi-Fi\" → \"Wi\", \"Fi\" split on case transitions: \"PowerShot\" → \"Power\", \"Shot\" split on letter-number transitions: \"SD500\" → \"SD\", \"500\" leading and trailing intra-word delimiters on each subword are ignored: \"//hello---there, 'dude'\" → \"hello\", \"there\", \"dude\" trailing \"'s\" are removed for each subword: \"O'Neil's\" → \"O\", \"Neil\" Note: this step isn't performed in a separate filter because of possible subword combinations. The combinations parameter affects how subwords are combined: combinations=\"0\" causes no subword combinations: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" (0 and 1 are the token positions) combinations=\"1\" means that in addition to the subwords, maximum runs of non-numeric subwords are catenated and produced at the same position of the last subword in the run: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" 1:\"PowerShot\" \"A's+B's&C's\" -gt; 0:\"A\", 1:\"B\", 2:\"C\", 2:\"ABC\" \"Super-Duper-XL500-42-AutoCoder!\" → 0:\"Super\", 1:\"Duper\", 2:\"XL\", 2:\"SuperDuperXL\", 3:\"500\" 4:\"42\", 5:\"Auto\", 6:\"Coder\", 6:\"AutoCoder\" One use for WordDelimiterFilter is to help match words with different subword delimiters. For example, if the source text contained \"wi-fi\" one may want \"wifi\" \"WiFi\" \"wi-fi\" \"wi+fi\" queries to all match. One way of doing so is to specify combinations=\"1\" in the analyzer used for indexing, and combinations=\"0\" (the default) in the analyzer used for querying. Given that the current StandardTokenizer immediately removes many intra-word delimiters, it is recommended that this filter be used after a tokenizer that does not do this (such as WhitespaceTokenizer ). Inheritance System.Object AttributeSource TokenStream TokenFilter WordDelimiterFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WordDelimiterFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source WordDelimiterFilter(LuceneVersion, TokenStream, WordDelimiterFlags, CharArraySet) Creates a new WordDelimiterFilter using DEFAULT_WORD_DELIM_TABLE as its charTypeTable Declaration public WordDelimiterFilter(LuceneVersion matchVersion, TokenStream in, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to be filtered WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited | Improve this Doc View Source WordDelimiterFilter(LuceneVersion, TokenStream, Byte[], WordDelimiterFlags, CharArraySet) Creates a new WordDelimiterFilter Declaration public WordDelimiterFilter(LuceneVersion matchVersion, TokenStream in, byte[] charTypeTable, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version TokenStream in TokenStream to be filtered System.Byte [] charTypeTable table containing character types WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited Fields | Improve this Doc View Source ALPHA Declaration public const int ALPHA = 3 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 7 Field Value Type Description System.Int32 | Improve this Doc View Source DIGIT Declaration public const int DIGIT = 4 Field Value Type Description System.Int32 | Improve this Doc View Source LOWER Declaration public const int LOWER = 1 Field Value Type Description System.Int32 | Improve this Doc View Source SUBWORD_DELIM Declaration public const int SUBWORD_DELIM = 8 Field Value Type Description System.Int32 | Improve this Doc View Source UPPER Declaration public const int UPPER = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilterFactory.html",
    "title": "Class WordDelimiterFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordDelimiterFilterFactory Factory for WordDelimiterFilter . <fieldType name=\"text_wd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" protected=\"protectedword.txt\" preserveOriginal=\"0\" splitOnNumerics=\"1\" splitOnCaseChange=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\" generateWordParts=\"1\" generateNumberParts=\"1\" stemEnglishPossessive=\"1\" types=\"wdfftypes.txt\" /> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory WordDelimiterFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WordDelimiterFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source WordDelimiterFilterFactory(IDictionary<String, String>) Creates a new WordDelimiterFilterFactory Declaration public WordDelimiterFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source PROTECTED_TOKENS Declaration public const string PROTECTED_TOKENS = \"protected\" Field Value Type Description System.String | Improve this Doc View Source TYPES Declaration public const string TYPES = \"types\" Field Value Type Description System.String Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternCaptureGroupFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternCaptureGroupFilterFactory.html",
    "title": "Class PatternCaptureGroupFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternCaptureGroupFilterFactory Factory for PatternCaptureGroupTokenFilter . <fieldType name=\"text_ptncapturegroup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.KeywordTokenizerFactory\"/> <filter class=\"solr.PatternCaptureGroupFilterFactory\" pattern=\"([^a-z])\" preserve_original=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PatternCaptureGroupFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PatternCaptureGroupFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PatternCaptureGroupFilterFactory(IDictionary<String, String>) Declaration public PatternCaptureGroupFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PatternCaptureGroupTokenFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.html",
    "title": "Class PatternCaptureGroupTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternCaptureGroupTokenFilter CaptureGroup uses .NET regexes to emit multiple tokens - one for each capture group in one or more patterns. For example, a pattern like: \"(https?://([a-zA-Z-_0-9.]+))\" when matched against the string \" http://www.foo.com/index&quot ; would return the tokens \"https://www.foo.com\" and \"www.foo.com\". If none of the patterns match, or if preserveOriginal is true, the original token will be preserved. Each pattern is matched as often as it can be, so the pattern \"(...)\" , when matched against \"abcdefghi\" would produce [\"abc\",\"def\",\"ghi\"] A camelCaseFilter could be written as: \"([A-Z]{2,})\", \"(?<![A-Z])([A-Z][a-z]+)\", \"(?:^|\\\\b|(?<=[0-9_])|(?<=[A-Z]{2}))([a-z]+)\", \"([0-9]+)\" plus if Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.preserveOriginal is true, it would also return camelCaseFilter Inheritance System.Object AttributeSource TokenStream TokenFilter PatternCaptureGroupTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pattern Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternCaptureGroupTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PatternCaptureGroupTokenFilter(TokenStream, Boolean, Regex[]) Creates a new PatternCaptureGroupTokenFilter Declaration public PatternCaptureGroupTokenFilter(TokenStream input, bool preserveOriginal, params Regex[] patterns) Parameters Type Name Description TokenStream input the input TokenStream System.Boolean preserveOriginal set to true to return the original token even if one of the patterns matches System.Text.RegularExpressions.Regex [] patterns an array of Lucene.Net.Analysis.Pattern objects to match against each token Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.INumericTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.INumericTermAttribute.html",
    "title": "Interface NumericTokenStream.INumericTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface NumericTokenStream.INumericTermAttribute Expert: Use this attribute to get the details of the currently generated token. @lucene.experimental @since 4.0 Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public interface INumericTermAttribute : IAttribute Properties | Improve this Doc View Source RawValue Returns current token's raw value as System.Int64 with all Shift applied, undefined before first token Declaration long RawValue { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Shift Returns current shift value, undefined before first token Declaration int Shift { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ValueSize Returns value size in bits (32 for System.Single , System.Int32 ; 64 for System.Double , System.Int64 ) Declaration int ValueSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source IncShift() Don't call this method! This is a Lucene.NET INTERNAL API, use at your own risk Declaration int IncShift() Returns Type Description System.Int32 | Improve this Doc View Source Init(Int64, Int32, Int32, Int32) Don't call this method! This is a Lucene.NET INTERNAL API, use at your own risk Declaration void Init(long value, int valSize, int precisionStep, int shift) Parameters Type Name Description System.Int64 value System.Int32 valSize System.Int32 precisionStep System.Int32 shift Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute.html",
    "title": "Interface ICharTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharTermAttribute The term text of a Token . Inherited Members IAttribute.CopyTo(IAttribute) ICharSequence.SubSequence(Int32, Int32) ICharSequence.ToString() Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public interface ICharTermAttribute : IAttribute, ICharSequence Properties | Improve this Doc View Source Buffer Returns the internal termBuffer character array which you can then directly alter. If the array is too small for your token, use ResizeBuffer(Int32) to increase it. After altering the buffer be sure to call SetLength(Int32) to record the number of valid characters that were placed into the termBuffer. NOTE : The returned buffer may be larger than the valid Length . Declaration char[] Buffer { get; } Property Value Type Description System.Char [] | Improve this Doc View Source Item[Int32] Declaration char this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Gets or Sets the number of valid characters (in the termBuffer array. SetLength(Int32) Declaration int Length { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Append(ICharTermAttribute) Appends the contents of the other ICharTermAttribute to this character sequence. The characters of the ICharTermAttribute argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(ICharTermAttribute termAtt) Parameters Type Name Description ICharTermAttribute termAtt Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence) Appends the contents of the ICharSequence to this character sequence. The characters of the ICharSequence argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(ICharSequence csq) Parameters Type Name Description ICharSequence csq Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(ICharSequence, Int32, Int32) Appends the contents of the ICharSequence to this character sequence, beginning and ending at the specified indices. The characters of the ICharSequence argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(ICharSequence csq, int start, int end) Parameters Type Name Description ICharSequence csq The index of the first character in the subsequence. System.Int32 start The start index of the ICharSequence to begin copying characters. System.Int32 end The index of the character following the last character in the subsequence. Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char) Appends the supplied System.Char to this character sequence. Declaration ICharTermAttribute Append(char c) Parameters Type Name Description System.Char c The System.Char to append. Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(Char[]) Appends the contents of the char[] array to this character sequence. The characters of the char[] argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(char[] csq) Parameters Type Name Description System.Char [] csq The char[] array to append. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added to simulate using the CharBuffer class in Java. | Improve this Doc View Source Append(Char[], Int32, Int32) Appends the contents of the char[] array to this character sequence, beginning and ending at the specified indices. The characters of the char[] argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(char[] csq, int start, int end) Parameters Type Name Description System.Char [] csq The char[] array to append. System.Int32 start The start index of the char[] to begin copying characters. System.Int32 end The index of the character following the last character in the subsequence. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added to simulate using the CharBuffer class in Java. Note that the CopyBuffer(Char[], Int32, Int32) method provides similar functionality, except for the last argument of this method is an index of the array rather than the length of characters to copy. | Improve this Doc View Source Append(String) Appends the specified System.String to this character sequence. The characters of the System.String argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(string s) Parameters Type Name Description System.String s Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET System.String data type doesn't implement ICharSequence . | Improve this Doc View Source Append(String, Int32, Int32) Appends the contents of the System.String to this character sequence, beginning and ending at the specified indices. The characters of the System.String argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(string csq, int start, int end) Parameters Type Name Description System.String csq The index of the first character in the subsequence. System.Int32 start The start index of the System.String to begin copying characters. System.Int32 end The index of the character following the last character in the subsequence. Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET System.String data type doesn't implement ICharSequence . | Improve this Doc View Source Append(StringBuilder) Appends the specified System.Text.StringBuilder to this character sequence. The characters of the System.Text.StringBuilder argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(StringBuilder sb) Parameters Type Name Description System.Text.StringBuilder sb Returns Type Description ICharTermAttribute | Improve this Doc View Source Append(StringBuilder, Int32, Int32) Appends the specified System.Text.StringBuilder to this character sequence. The characters of the System.Text.StringBuilder argument are appended, in order, increasing the length of this sequence by the length of the argument. If argument is null , then the four characters \"null\" are appended. Declaration ICharTermAttribute Append(StringBuilder s, int start, int end) Parameters Type Name Description System.Text.StringBuilder s System.Int32 start System.Int32 end Returns Type Description ICharTermAttribute Remarks LUCENENET specific method, added because the .NET System.Text.StringBuilder data type doesn't implement ICharSequence . | Improve this Doc View Source CopyBuffer(Char[], Int32, Int32) Copies the contents of buffer, starting at offset for length characters, into the termBuffer array. Declaration void CopyBuffer(char[] buffer, int offset, int length) Parameters Type Name Description System.Char [] buffer the buffer to copy System.Int32 offset the index in the buffer of the first character to copy System.Int32 length the number of characters to copy | Improve this Doc View Source ResizeBuffer(Int32) Grows the termBuffer to at least size newSize , preserving the existing content. Declaration char[] ResizeBuffer(int newSize) Parameters Type Name Description System.Int32 newSize minimum size of the new termBuffer Returns Type Description System.Char [] newly created termBuffer with length >= newSize | Improve this Doc View Source SetEmpty() Sets the length of the termBuffer to zero. Use this method before appending contents. Declaration ICharTermAttribute SetEmpty() Returns Type Description ICharTermAttribute | Improve this Doc View Source SetLength(Int32) Set number of valid characters (length of the term) in the termBuffer array. Use this to truncate the termBuffer or to synchronize with external manipulation of the termBuffer. Note: to grow the size of the array, use ResizeBuffer(Int32) first. NOTE: This is exactly the same operation as calling the Length setter, the primary difference is that this method returns a reference to the current object so it can be chained. obj.SetLength(30).Append(\"hey you\"); Declaration ICharTermAttribute SetLength(int length) Parameters Type Name Description System.Int32 length the truncated length Returns Type Description ICharTermAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.html": {
    "href": "api/Lucene.Net.Spatial/Lucene.Net.Spatial.Prefix.html",
    "title": "Namespace Lucene.Net.Spatial.Prefix | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Spatial.Prefix Classes AbstractPrefixTreeFilter Base class for Lucene Filters on SpatialPrefixTree fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractPrefixTreeFilter.BaseTermsEnumTraverser Holds transient state and docid collecting utility methods as part of traversing a TermsEnum . AbstractVisitingPrefixTreeFilter Traverses a SpatialPrefixTree indexed field, using the template & visitor design patterns for subclasses to guide the traversal and collect matching documents. Subclasses implement GetDocIdSet(AtomicReaderContext, IBits) by instantiating a custom AbstractVisitingPrefixTreeFilter.VisitorTemplate subclass (i.e. an anonymous inner class) and implement the required methods. This is a Lucene.NET INTERNAL API, use at your own risk AbstractVisitingPrefixTreeFilter.VisitorTemplate An abstract class designed to make it easy to implement predicates or other operations on a SpatialPrefixTree indexed field. An instance of this class is not designed to be re-used across AtomicReaderContext instances so simply create a new one for each call to, say a GetDocIdSet(AtomicReaderContext, IBits) . The GetDocIdSet() method here starts the work. It first checks that there are indexed terms; if not it quickly returns null. Then it calls Start() so a subclass can set up a return value, like an FixedBitSet . Then it starts the traversal process, calling FindSubCellsToVisit(Cell) which by default finds the top cells that intersect queryShape . If there isn't an indexed cell for a corresponding cell returned for this method then it's short-circuited until it finds one, at which point Visit(Cell) is called. At some depths, of the tree, the algorithm switches to a scanning mode that calls VisitScanned(Cell) for each leaf cell found. This is a Lucene.NET INTERNAL API, use at your own risk AbstractVisitingPrefixTreeFilter.VNode A Visitor node/cell found via the query shape for AbstractVisitingPrefixTreeFilter.VisitorTemplate . Sometimes these are reset(cell). It's like a LinkedList node but forms a tree. This is a Lucene.NET INTERNAL API, use at your own risk ContainsPrefixTreeFilter Finds docs where its indexed shape Contains the query shape. For use on RecursivePrefixTreeStrategy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk IntersectsPrefixTreeFilter A Filter matching documents that have an Spatial4n.Core.Shapes.SpatialRelation.INTERSECTS (i.e. not DISTINCT) relationship with a provided query shape. This is a Lucene.NET INTERNAL API, use at your own risk PointPrefixTreeFieldCacheProvider Implementation of ShapeFieldCacheProvider<T> designed for PrefixTreeStrategy s. Note, due to the fragmented representation of Shapes in these Strategies, this implementation can only retrieve the central Spatial4n.Core.Shapes.IPoint of the original Shapes. This is a Lucene.NET INTERNAL API, use at your own risk PrefixTreeStrategy An abstract SpatialStrategy based on SpatialPrefixTree . The two subclasses are RecursivePrefixTreeStrategy and TermQueryPrefixTreeStrategy . This strategy is most effective as a fast approximate spatial search filter. Characteristics: Can index any shape; however only RecursivePrefixTreeStrategy can effectively search non-point shapes. Can index a variable number of shapes per field value. This strategy can do it via multiple calls to CreateIndexableFields(IShape) for a document or by giving it some sort of Shape aggregate (e.g. NTS WKT MultiPoint). The shape's boundary is approximated to a grid precision. Can query with any shape. The shape's boundary is approximated to a grid precision. Only Intersects is supported. If only points are indexed then this is effectively equivalent to IsWithin. The strategy supports MakeDistanceValueSource(IPoint, Double) even for multi-valued data, so long as the indexed data is all points; the behavior is undefined otherwise. However, it will likely be removed in the future in lieu of using another strategy with a more scalable implementation. Use of this call is the only circumstance in which a cache is used. The cache is simple but as such it doesn't scale to large numbers of points nor is it real-time-search friendly. Implementation: The SpatialPrefixTree does most of the work, for example returning a list of terms representing grids of various sizes for a supplied shape. An important configuration item is DistErrPct which balances shape precision against scalability. See those docs. This is a Lucene.NET INTERNAL API, use at your own risk RecursivePrefixTreeStrategy A PrefixTreeStrategy which uses AbstractVisitingPrefixTreeFilter . This strategy has support for searching non-point shapes (note: not tested). Even a query shape with distErrPct=0 (fully precise to the grid) should have good performance for typical data, unless there is a lot of indexed data coincident with the shape's edge. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermQueryPrefixTreeStrategy A basic implementation of PrefixTreeStrategy using a large TermsFilter of all the cells from GetCells(IShape, Int32, Boolean, Boolean) . It only supports the search of indexed Point shapes. The precision of query shapes (DistErrPct) is an important factor in using this Strategy. If the precision is too precise then it will result in many terms which will amount to a slower query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WithinPrefixTreeFilter Finds docs where its indexed shape is IsWithin the query shape. It works by looking at cells outside of the query shape to ensure documents there are excluded. By default, it will examine all cells, and it's fairly slow. If you know that the indexed shapes are never comprised of multiple disjoint parts (which also means it is not multi-valued), then you can pass SpatialPrefixTree.GetDistanceForLevel(maxLevels) as the queryBuffer constructor parameter to minimally look this distance beyond the query shape's edge. Even if the indexed shapes are sometimes comprised of multiple disjoint parts, you might want to use this option with a large buffer as a faster approximation with minimal false-positives. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.AUTOMATON_TYPE.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.CompiledAutomaton.AUTOMATON_TYPE.html",
    "title": "Enum CompiledAutomaton.AUTOMATON_TYPE | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum CompiledAutomaton.AUTOMATON_TYPE Automata are compiled into different internal forms for the most efficient execution depending upon the language they accept. Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public enum AUTOMATON_TYPE Fields Name Description ALL Automaton that accepts all possible strings. NONE Automaton that accepts no strings. NORMAL Catch-all for any other automata. PREFIX Automaton that matches all strings with a constant prefix. SINGLE Automaton that accepts only a single fixed string. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicOperations.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicOperations.html",
    "title": "Class BasicOperations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicOperations Basic automata operations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicOperations Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public static class BasicOperations Methods | Improve this Doc View Source AddEpsilons(Automaton, ICollection<StatePair>) Adds epsilon transitions to the given automaton. This method adds extra character interval transitions that are equivalent to the given set of epsilon transitions. Declaration public static void AddEpsilons(Automaton a, ICollection<StatePair> pairs) Parameters Type Name Description Automaton a Automaton. System.Collections.Generic.ICollection < StatePair > pairs Collection of StatePair objects representing pairs of source/destination states where epsilon transitions should be added. | Improve this Doc View Source Complement(Automaton) Returns a (deterministic) automaton that accepts the complement of the language of the given automaton. Complexity: linear in number of states (if already deterministic). Declaration public static Automaton Complement(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Concatenate(Automaton, Automaton) Returns an automaton that accepts the concatenation of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Concatenate(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source Concatenate(IList<Automaton>) Returns an automaton that accepts the concatenation of the languages of the given automata. Complexity: linear in total number of states. Declaration public static Automaton Concatenate(IList<Automaton> l) Parameters Type Name Description System.Collections.Generic.IList < Automaton > l Returns Type Description Automaton | Improve this Doc View Source Determinize(Automaton) Determinizes the given automaton. Worst case complexity: exponential in number of states. Declaration public static void Determinize(Automaton a) Parameters Type Name Description Automaton a | Improve this Doc View Source Intersection(Automaton, Automaton) Returns an automaton that accepts the intersection of the languages of the given automata. Never modifies the input automata languages. Complexity: quadratic in number of states. Declaration public static Automaton Intersection(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source IsEmpty(Automaton) Returns true if the given automaton accepts no strings. Declaration public static bool IsEmpty(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source IsEmptyString(Automaton) Returns true if the given automaton accepts the empty string and nothing else. Declaration public static bool IsEmptyString(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source IsTotal(Automaton) Returns true if the given automaton accepts all strings. Declaration public static bool IsTotal(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source Minus(Automaton, Automaton) Returns a (deterministic) automaton that accepts the intersection of the language of a1 and the complement of the language of a2 . As a side-effect, the automata may be determinized, if not already deterministic. Complexity: quadratic in number of states (if already deterministic). Declaration public static Automaton Minus(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source Optional(Automaton) Returns an automaton that accepts the union of the empty string and the language of the given automaton. Complexity: linear in number of states. Declaration public static Automaton Optional(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton) Returns an automaton that accepts the Kleene star (zero or more concatenated repetitions) of the language of the given automaton. Never modifies the input automaton language. Complexity: linear in number of states. Declaration public static Automaton Repeat(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton, Int32) Returns an automaton that accepts min or more concatenated repetitions of the language of the given automaton. Complexity: linear in number of states and in min . Declaration public static Automaton Repeat(Automaton a, int min) Parameters Type Name Description Automaton a System.Int32 min Returns Type Description Automaton | Improve this Doc View Source Repeat(Automaton, Int32, Int32) Returns an automaton that accepts between min and max (including both) concatenated repetitions of the language of the given automaton. Complexity: linear in number of states and in min and max . Declaration public static Automaton Repeat(Automaton a, int min, int max) Parameters Type Name Description Automaton a System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source Run(Automaton, String) Returns true if the given string is accepted by the automaton. Complexity: linear in the length of the string. Note: for full performance, use the RunAutomaton class. Declaration public static bool Run(Automaton a, string s) Parameters Type Name Description Automaton a System.String s Returns Type Description System.Boolean | Improve this Doc View Source SameLanguage(Automaton, Automaton) Returns true if these two automata accept exactly the same language. This is a costly computation! Note also that a1 and a2 will be determinized as a side effect. Declaration public static bool SameLanguage(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description System.Boolean | Improve this Doc View Source SubsetOf(Automaton, Automaton) Returns true if the language of a1 is a subset of the language of a2 . As a side-effect, a2 is determinized if not already marked as deterministic. Complexity: quadratic in number of states. Declaration public static bool SubsetOf(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description System.Boolean | Improve this Doc View Source Union(Automaton, Automaton) Returns an automaton that accepts the union of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Union(Automaton a1, Automaton a2) Parameters Type Name Description Automaton a1 Automaton a2 Returns Type Description Automaton | Improve this Doc View Source Union(ICollection<Automaton>) Returns an automaton that accepts the union of the languages of the given automata. Complexity: linear in number of states. Declaration public static Automaton Union(ICollection<Automaton> l) Parameters Type Name Description System.Collections.Generic.ICollection < Automaton > l Returns Type Description Automaton"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.EnumerationDirection.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.EnumerationDirection.html",
    "title": "Enum EnumerationDirection | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum EnumerationDirection Direction of enumeration order relative to original collection. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public enum EnumerationDirection Fields Name Description Backwards Opposite direction Forwards Same direction Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Store.FlushInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.FlushInfo.html",
    "title": "Class FlushInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FlushInfo A FlushInfo provides information required for a FLUSH context. It is used as part of an IOContext in case of FLUSH context. Inheritance System.Object FlushInfo Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class FlushInfo Constructors | Improve this Doc View Source FlushInfo(Int32, Int64) Creates a new FlushInfo instance from the values required for a FLUSH IOContext context. These values are only estimates and are not the actual values. Declaration public FlushInfo(int numDocs, long estimatedSegmentSize) Parameters Type Name Description System.Int32 numDocs System.Int64 estimatedSegmentSize Properties | Improve this Doc View Source EstimatedSegmentSize Declaration public long EstimatedSegmentSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NumDocs Declaration public int NumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.DataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.DataOutput.html",
    "title": "Class DataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DataOutput Abstract base class for performing write operations of Lucene's low-level data types. DataOutput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). Inheritance System.Object DataOutput ByteArrayDataOutput IndexOutput OutputStreamDataOutput BinaryWriterDataOutput GrowableByteArrayDataOutput PagedBytes.PagedBytesDataOutput Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class DataOutput Methods | Improve this Doc View Source CopyBytes(DataInput, Int64) Copy numBytes bytes from input to ourself. Declaration public virtual void CopyBytes(DataInput input, long numBytes) Parameters Type Name Description DataInput input System.Int64 numBytes | Improve this Doc View Source WriteByte(Byte) Writes a single byte. The most primitive data type is an eight-bit byte. Files are accessed as sequences of bytes. All other data types are defined as sequences of bytes, so file formats are byte-order independent. Declaration public abstract void WriteByte(byte b) Parameters Type Name Description System.Byte b See Also ReadByte () | Improve this Doc View Source WriteBytes(Byte[], Int32) Writes an array of bytes. Declaration public virtual void WriteBytes(byte[] b, int length) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 length the number of bytes to write See Also ReadBytes ( System.Byte [], System.Int32 , System.Int32 ) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Writes an array of bytes. Declaration public abstract void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b the bytes to write System.Int32 offset the offset in the byte array System.Int32 length the number of bytes to write See Also ReadBytes ( System.Byte [], System.Int32 , System.Int32 ) | Improve this Doc View Source WriteInt16(Int16) Writes a short as two bytes. NOTE: this was writeShort() in Lucene Declaration public virtual void WriteInt16(short i) Parameters Type Name Description System.Int16 i See Also ReadInt16 () | Improve this Doc View Source WriteInt32(Int32) Writes an System.Int32 as four bytes. 32-bit unsigned integer written as four bytes, high-order bytes first. NOTE: this was writeInt() in Lucene Declaration public virtual void WriteInt32(int i) Parameters Type Name Description System.Int32 i See Also ReadInt32 () | Improve this Doc View Source WriteInt64(Int64) Writes a System.Int64 as eight bytes. 64-bit unsigned integer written as eight bytes, high-order bytes first. NOTE: this was writeLong() in Lucene Declaration public virtual void WriteInt64(long i) Parameters Type Name Description System.Int64 i See Also ReadInt64 () | Improve this Doc View Source WriteString(String) Writes a string. Writes strings as UTF-8 encoded bytes. First the length, in bytes, is written as a WriteVInt32(Int32) , followed by the bytes. Declaration public virtual void WriteString(string s) Parameters Type Name Description System.String s See Also ReadString () | Improve this Doc View Source WriteStringSet(ISet<String>) Writes a System.String set. First the size is written as an WriteInt32(Int32) , followed by each value written as a WriteString(String) . Declaration public virtual void WriteStringSet(ISet<string> set) Parameters Type Name Description System.Collections.Generic.ISet < System.String > set Input ISet{string} . May be null (equivalent to an empty set) | Improve this Doc View Source WriteStringStringMap(IDictionary<String, String>) Writes a . First the size is written as an WriteInt32(Int32) , followed by each key-value pair written as two consecutive WriteString(String) s. Declaration public virtual void WriteStringStringMap(IDictionary<string, string> map) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > map Input . May be null (equivalent to an empty dictionary) | Improve this Doc View Source WriteVInt32(Int32) Writes an System.Int32 in a variable-length format. Writes between one and five bytes. Smaller values take fewer bytes. Negative numbers are supported, but should be avoided. VByte is a variable-length format for positive integers is defined where the high-order bit of each byte indicates whether more bytes remain to be read. The low-order seven bits are appended as increasingly more significant bits in the resulting integer value. Thus values from zero to 127 may be stored in a single byte, values from 128 to 16,383 may be stored in two bytes, and so on. VByte Encoding Example ValueByte 1Byte 2Byte 3 000000000 100000001 200000010 ... 12701111111 1281000000000000001 1291000000100000001 1301000001000000001 ... 16,3831111111101111111 16,384100000001000000000000001 16,385100000011000000000000001 ... this provides compression while still being efficient to decode. NOTE: this was writeVInt() in Lucene Declaration public void WriteVInt32(int i) Parameters Type Name Description System.Int32 i Smaller values take fewer bytes. Negative numbers are supported, but should be avoided. Exceptions Type Condition System.IO.IOException If there is an I/O error writing to the underlying medium. See Also ReadVInt32 () | Improve this Doc View Source WriteVInt64(Int64) Writes an System.Int64 in a variable-length format. Writes between one and nine bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was writeVLong() in Lucene Declaration public void WriteVInt64(long i) Parameters Type Name Description System.Int64 i See Also ReadVInt64 () Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.DataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.DataInput.html",
    "title": "Class DataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DataInput Abstract base class for performing read operations of Lucene's low-level data types. DataInput may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every DataInput instance must be cloned before used in another thread. Subclasses must therefore implement Clone() , returning a new DataInput which operates on the same underlying resource, but positioned independently. Inheritance System.Object DataInput ByteSliceReader ByteArrayDataInput IndexInput InputStreamDataInput BinaryReaderDataInput FST.BytesReader PagedBytes.PagedBytesDataInput Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class DataInput Methods | Improve this Doc View Source Clone() Returns a clone of this stream. Clones of a stream access the same data, and are positioned at the same point as the stream they were cloned from. Expert: Subclasses must ensure that clones may be positioned at different points in the input from each other and from the stream they were cloned from. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source ReadByte() Reads and returns a single byte. Declaration public abstract byte ReadByte() Returns Type Description System.Byte See Also WriteByte ( System.Byte ) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Reads a specified number of bytes into an array at the specified offset. Declaration public abstract void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 len the number of bytes to read See Also WriteBytes ( System.Byte [], System.Int32 ) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32, Boolean) Reads a specified number of bytes into an array at the specified offset with control over whether the read should be buffered (callers who have their own buffer should pass in \"false\" for useBuffer ). Currently only BufferedIndexInput respects this parameter. Declaration public virtual void ReadBytes(byte[] b, int offset, int len, bool useBuffer) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 len the number of bytes to read System.Boolean useBuffer set to false if the caller will handle buffering. See Also WriteBytes ( System.Byte [], System.Int32 ) | Improve this Doc View Source ReadInt16() Reads two bytes and returns a System.Int16 . LUCENENET NOTE: Important - always cast to ushort (System.UInt16) before using to ensure the value is positive! NOTE: this was readShort() in Lucene Declaration public virtual short ReadInt16() Returns Type Description System.Int16 See Also WriteInt16 ( System.Int16 ) | Improve this Doc View Source ReadInt32() Reads four bytes and returns an System.Int32 . NOTE: this was readInt() in Lucene Declaration public virtual int ReadInt32() Returns Type Description System.Int32 See Also WriteInt32 ( System.Int32 ) | Improve this Doc View Source ReadInt64() Reads eight bytes and returns a System.Int64 . NOTE: this was readLong() in Lucene Declaration public virtual long ReadInt64() Returns Type Description System.Int64 See Also WriteInt64 ( System.Int64 ) | Improve this Doc View Source ReadString() Reads a System.String . Declaration public virtual string ReadString() Returns Type Description System.String See Also WriteString ( System.String ) | Improve this Doc View Source ReadStringSet() Reads a ISet<string> previously written with WriteStringSet(ISet<String>) . Declaration public virtual ISet<string> ReadStringSet() Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source ReadStringStringMap() Reads a IDictionary<string,string> previously written with WriteStringStringMap(IDictionary<String, String>) . Declaration public virtual IDictionary<string, string> ReadStringStringMap() Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source ReadVInt32() Reads an System.Int32 stored in variable-length format. Reads between one and five bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was readVInt() in Lucene Declaration public virtual int ReadVInt32() Returns Type Description System.Int32 See Also WriteVInt32 ( System.Int32 ) | Improve this Doc View Source ReadVInt64() Reads a System.Int64 stored in variable-length format. Reads between one and nine bytes. Smaller values take fewer bytes. Negative numbers are not supported. The format is described further in WriteVInt32(Int32) . NOTE: this was readVLong() in Lucene Declaration public virtual long ReadVInt64() Returns Type Description System.Int64 See Also WriteVInt64 ( System.Int64 ) | Improve this Doc View Source SkipBytes(Int64) Skip over numBytes bytes. The contract on this method is that it should have the same behavior as reading the same number of bytes into a buffer and discarding its content. Negative values of numBytes are not supported. Declaration public virtual void SkipBytes(long numBytes) Parameters Type Name Description System.Int64 numBytes Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.ISpanMultiTermQueryWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.ISpanMultiTermQueryWrapper.html",
    "title": "Interface ISpanMultiTermQueryWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISpanMultiTermQueryWrapper LUCENENET specific interface for referring to/identifying a SpanMultiTermQueryWrapper<Q> without referring to its generic closing type. Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public interface ISpanMultiTermQueryWrapper Properties | Improve this Doc View Source Field Declaration string Field { get; } Property Value Type Description System.String | Improve this Doc View Source MultiTermRewriteMethod Expert: Gets or Sets the rewrite method. This only makes sense to be a span rewrite method. Declaration SpanRewriteMethod MultiTermRewriteMethod { get; } Property Value Type Description SpanRewriteMethod | Improve this Doc View Source WrappedQuery Returns the wrapped query Declaration Query WrappedQuery { get; } Property Value Type Description Query Methods | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans | Improve this Doc View Source Rewrite(IndexReader) Declaration Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.SortFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortFieldType.html",
    "title": "Enum SortFieldType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum SortFieldType Specifies the type of the terms to be sorted, or special types such as CUSTOM Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public enum SortFieldType Fields Name Description BYTE Sort using term values as encoded System.Byte s. Sort values are System.Byte and lower values are at the front. BYTES Sort use byte[] index values. CUSTOM Sort using a custom System.Collections.Generic.IComparer<T> . Sort values are any System.IComparable<T> and sorting is done according to natural order. DOC Sort by document number (index order). Sort values are System.Int32 and lower values are at the front. DOUBLE Sort using term values as encoded System.Double s. Sort values are System.Double and lower values are at the front. INT16 Sort using term values as encoded System.Int16 s. Sort values are System.Int16 and lower values are at the front. NOTE: This was SHORT in Lucene INT32 Sort using term values as encoded System.Int32 s. Sort values are System.Int32 and lower values are at the front. NOTE: This was INT in Lucene INT64 Sort using term values as encoded System.Int64 s. Sort values are System.Int64 and lower values are at the front. NOTE: This was LONG in Lucene REWRITEABLE Force rewriting of SortField using Rewrite(IndexSearcher) before it can be used for sorting SCORE Sort by document score (relevance). Sort values are System.Single and higher values are at the front. SINGLE Sort using term values as encoded System.Single s. Sort values are System.Single and lower values are at the front. NOTE: This was FLOAT in Lucene STRING Sort using term values as System.String s. Sort values are System.String s and lower values are at the front. STRING_VAL Sort using term values as System.String s, but comparing by value (using CompareTo(BytesRef) ) for all comparisons. this is typically slower than STRING , which uses ordinals to do the sorting. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Search.SortField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SortField.html",
    "title": "Class SortField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortField Stores information about how to sort documents by terms in an individual field. Fields must be indexed in order to sort by them. Created: Feb 11, 2004 1:25:29 PM @since lucene 1.4 Inheritance System.Object SortField Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SortField Constructors | Improve this Doc View Source SortField(String, FieldCache.IParser) Creates a sort by terms in the given field, parsed to numeric values using a custom FieldCache.IParser . Declaration public SortField(string field, FieldCache.IParser parser) Parameters Type Name Description System.String field Name of field to sort by. Must not be null . FieldCache.IParser parser Instance of a FieldCache.IParser , which must subclass one of the existing numeric parsers from IFieldCache . Sort type is inferred by testing which numeric parser the parser subclasses. Exceptions Type Condition System.ArgumentException if the parser fails to subclass an existing numeric parser, or field is null | Improve this Doc View Source SortField(String, FieldCache.IParser, Boolean) Creates a sort, possibly in reverse, by terms in the given field, parsed to numeric values using a custom FieldCache.IParser . Declaration public SortField(string field, FieldCache.IParser parser, bool reverse) Parameters Type Name Description System.String field Name of field to sort by. Must not be null . FieldCache.IParser parser Instance of a FieldCache.IParser , which must subclass one of the existing numeric parsers from IFieldCache . Sort type is inferred by testing which numeric parser the parser subclasses. System.Boolean reverse True if natural order should be reversed. Exceptions Type Condition System.ArgumentException if the parser fails to subclass an existing numeric parser, or field is null | Improve this Doc View Source SortField(String, FieldComparerSource) Creates a sort with a custom comparison function. Declaration public SortField(string field, FieldComparerSource comparer) Parameters Type Name Description System.String field Name of field to sort by; cannot be null . FieldComparerSource comparer Returns a comparer for sorting hits. | Improve this Doc View Source SortField(String, FieldComparerSource, Boolean) Creates a sort, possibly in reverse, with a custom comparison function. Declaration public SortField(string field, FieldComparerSource comparer, bool reverse) Parameters Type Name Description System.String field Name of field to sort by; cannot be null . FieldComparerSource comparer Returns a comparer for sorting hits. System.Boolean reverse True if natural order should be reversed. | Improve this Doc View Source SortField(String, SortFieldType) Creates a sort by terms in the given field with the type of term values explicitly given. Declaration public SortField(string field, SortFieldType type) Parameters Type Name Description System.String field Name of field to sort by. Can be null if type is SCORE or DOC . SortFieldType type Type of values in the terms. | Improve this Doc View Source SortField(String, SortFieldType, Boolean) Creates a sort, possibly in reverse, by terms in the given field with the type of term values explicitly given. Declaration public SortField(string field, SortFieldType type, bool reverse) Parameters Type Name Description System.String field Name of field to sort by. Can be null if type is SCORE or DOC . SortFieldType type Type of values in the terms. System.Boolean reverse True if natural order should be reversed. Fields | Improve this Doc View Source FIELD_DOC Represents sorting by document number (index order). Declaration public static readonly SortField FIELD_DOC Field Value Type Description SortField | Improve this Doc View Source FIELD_SCORE Represents sorting by document score (relevance). Declaration public static readonly SortField FIELD_SCORE Field Value Type Description SortField | Improve this Doc View Source m_missingValue Declaration protected object m_missingValue Field Value Type Description System.Object | Improve this Doc View Source STRING_FIRST Pass this to MissingValue to have missing string values sort first. Declaration public static readonly object STRING_FIRST Field Value Type Description System.Object | Improve this Doc View Source STRING_LAST Pass this to MissingValue to have missing string values sort last. Declaration public static readonly object STRING_LAST Field Value Type Description System.Object Properties | Improve this Doc View Source BytesComparer Declaration public virtual IComparer<BytesRef> BytesComparer { get; set; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source ComparerSource Returns the FieldComparerSource used for custom sorting. Declaration public virtual FieldComparerSource ComparerSource { get; } Property Value Type Description FieldComparerSource | Improve this Doc View Source Field Returns the name of the field. Could return null if the sort is by SCORE or DOC . Declaration public virtual string Field { get; } Property Value Type Description System.String Name of field, possibly null . | Improve this Doc View Source IsReverse Returns whether the sort should be reversed. Declaration public virtual bool IsReverse { get; } Property Value Type Description System.Boolean True if natural order should be reversed. | Improve this Doc View Source MissingValue Declaration public virtual object MissingValue { get; set; } Property Value Type Description System.Object | Improve this Doc View Source NeedsScores Whether the relevance score is needed to sort documents. Declaration public virtual bool NeedsScores { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parser Returns the instance of a IFieldCache parser that fits to the given sort type. May return null if no parser was specified. Sorting is using the default parser then. Declaration public virtual FieldCache.IParser Parser { get; } Property Value Type Description FieldCache.IParser An instance of a IFieldCache parser, or null . | Improve this Doc View Source Type Returns the type of contents in the field. Declaration public virtual SortFieldType Type { get; } Property Value Type Description SortFieldType One of SCORE , DOC , STRING , INT32 or SINGLE . Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. If a FieldComparerSource or FieldCache.IParser was provided, it must properly implement equals (unless a singleton is always used). Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetComparer(Int32, Int32) Returns the FieldComparer to use for sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual FieldComparer GetComparer(int numHits, int sortPos) Parameters Type Name Description System.Int32 numHits Number of top hits the queue will store System.Int32 sortPos Position of this SortField within Sort . The comparer is primary if sortPos==0, secondary if sortPos==1, etc. Some comparers can optimize themselves when they are the primary sort. Returns Type Description FieldComparer FieldComparer to use when sorting | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. If a FieldComparerSource or FieldCache.IParser was provided, it must properly implement GetHashCode() (unless a singleton is always used). Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Rewrite(IndexSearcher) Rewrites this SortField , returning a new SortField if a change is made. Subclasses should override this define their rewriting behavior when this SortField is of type REWRITEABLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual SortField Rewrite(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher IndexSearcher to use during rewriting Returns Type Description SortField New rewritten SortField , or this if nothing has changed. Exceptions Type Condition System.IO.IOException Can be thrown by the rewriting | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also Sort"
  },
  "api/Lucene.Net/Lucene.Net.Search.Sort.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Sort.html",
    "title": "Class Sort | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Sort Encapsulates sort criteria for returned hits. The fields used to determine sort order must be carefully chosen. Document s must contain a single term in such a field, and the value of the term should indicate the document's relative position in a given sort order. The field must be indexed, but should not be tokenized, and does not need to be stored (unless you happen to want it back with the rest of your document data). In other words: document.Add(new Field(\"byNumber\", x.ToString(CultureInfo.InvariantCulture), Field.Store.NO, Field.Index.NOT_ANALYZED)); Valid Types of Values There are four possible kinds of term values which may be put into sorting fields: System.Int32 s, System.Int64 s, System.Single s, or System.String s. Unless SortField objects are specified, the type of value in the field is determined by parsing the first term in the field. System.Int32 term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range System.Int32.MinValue and System.Int32.MaxValue inclusive. Documents which should appear first in the sort should have low value integers, later documents high values (i.e. the documents should be numbered 1..n where 1 is the first and n the last). System.Int64 term values should contain only digits and an optional preceding negative sign. Values must be base 10 and in the range System.Int64.MinValue and System.Int64.MaxValue inclusive. Documents which should appear first in the sort should have low value integers, later documents high values. System.Single term values should conform to values accepted by System.Single (except that NaN and Infinity are not supported). Document s which should appear first in the sort should have low values, later documents high values. System.String term values can contain any valid System.String , but should not be tokenized. The values are sorted according to their comparable natural order ( System.StringComparer.Ordinal ). Note that using this type of term value has higher memory requirements than the other two types. Object Reuse One of these objects can be used multiple times and the sort order changed between usages. This class is thread safe. Memory Usage Sorting uses of caches of term values maintained by the internal HitQueue(s). The cache is static and contains an System.Int32 or System.Single array of length IndexReader.MaxDoc for each field name for which a sort is performed. In other words, the size of the cache in bytes is: 4 * IndexReader.MaxDoc * (# of different fields actually used to sort) For System.String fields, the cache is larger: in addition to the above array, the value of every term in the field is kept in memory. If there are many unique terms in the field, this could be quite large. Note that the size of the cache is not affected by how many fields are in the index and might be used to sort - only by the ones actually used to sort a result set. Created: Feb 12, 2004 10:53:57 AM @since lucene 1.4 Inheritance System.Object Sort Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class Sort Constructors | Improve this Doc View Source Sort() Sorts by computed relevance. This is the same sort criteria as calling Search(Query, Int32) without a sort criteria, only with slightly more overhead. Declaration public Sort() | Improve this Doc View Source Sort(SortField) Sorts by the criteria in the given SortField . Declaration public Sort(SortField field) Parameters Type Name Description SortField field | Improve this Doc View Source Sort(SortField[]) Sorts in succession by the criteria in each SortField . Declaration public Sort(params SortField[] fields) Parameters Type Name Description SortField [] fields Fields | Improve this Doc View Source INDEXORDER Represents sorting by index order. Declaration public static readonly Sort INDEXORDER Field Value Type Description Sort | Improve this Doc View Source RELEVANCE Represents sorting by computed relevance. Using this sort criteria returns the same results as calling Search(Query, Int32) without a sort criteria, only with slightly more overhead. Declaration public static readonly Sort RELEVANCE Field Value Type Description Sort Properties | Improve this Doc View Source NeedsScores Returns true if the relevance score is needed to sort documents. Declaration public virtual bool NeedsScores { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetSort() Representation of the sort criteria. Declaration public virtual SortField[] GetSort() Returns Type Description SortField [] Array of SortField objects used in this sort criteria | Improve this Doc View Source Rewrite(IndexSearcher) Rewrites the SortField s in this Sort , returning a new Sort if any of the fields changes during their rewriting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual Sort Rewrite(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher IndexSearcher to use in the rewriting Returns Type Description Sort this if the Sort/Fields have not changed, or a new Sort if there is a change Exceptions Type Condition System.IO.IOException Can be thrown by the rewriting | Improve this Doc View Source SetSort(SortField) Sets the sort to the given criteria. Declaration public virtual void SetSort(SortField field) Parameters Type Name Description SortField field | Improve this Doc View Source SetSort(SortField[]) Sets the sort to the given criteria in succession. Declaration public virtual void SetSort(params SortField[] fields) Parameters Type Name Description SortField [] fields | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.html",
    "title": "Namespace Lucene.Net.Search.Similarities | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Similarities <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This package contains the various ranking models that can be used in Lucene. The abstract class Similarity serves as the base for ranking functions. For searching, users can employ the models already implemented or create their own by extending one of the classes in this package. Table Of Contents Summary of the Ranking Methods 2. Changing the Similarity Summary of the Ranking Methods DefaultSimilarity is the original Lucene scoring function. It is based on a highly optimized Vector Space Model . For more information, see TFIDFSimilarity . BM25Similarity is an optimized implementation of the successful Okapi BM25 model. SimilarityBase provides a basic implementation of the Similarity contract and exposes a highly simplified interface, which makes it an ideal starting point for new ranking functions. Lucene ships the following methods built on SimilarityBase : * Amati and Rijsbergen's {@linkplain org.apache.lucene.search.similarities.DFRSimilarity DFR} framework; * Clinchant and Gaussier's {@linkplain org.apache.lucene.search.similarities.IBSimilarity Information-based models} for IR; * The implementation of two {@linkplain org.apache.lucene.search.similarities.LMSimilarity language models} from Zhai and Lafferty's paper. Since SimilarityBase is not optimized to the same extent as DefaultSimilarity and BM25Similarity , a difference in performance is to be expected when using the methods listed above. However, optimizations can always be implemented in subclasses; see below . Changing Similarity Chances are the available Similarities are sufficient for all your searching needs. However, in some applications it may be necessary to customize your Similarity implementation. For instance, some applications do not need to distinguish between shorter and longer documents (see a \"fair\" similarity ). To change Similarity , one must do so for both indexing and searching, and the changes must happen before either of these actions take place. Although in theory there is nothing stopping you from changing mid-stream, it just isn't well-defined what is going to happen. To make this change, implement your own Similarity (likely you'll want to simply subclass an existing method, be it DefaultSimilarity or a descendant of SimilarityBase ), and then register the new class by calling #setSimilarity(Similarity) before indexing and #setSimilarity(Similarity) before searching. Extending {@linkplain org.apache.lucene.search.similarities.SimilarityBase} The easiest way to quickly implement a new ranking method is to extend SimilarityBase , which provides basic implementations for the low level . Subclasses are only required to implement the Float) and #toString() methods. Another option is to extend one of the frameworks based on SimilarityBase . These Similarities are implemented modularly, e.g. DFRSimilarity delegates computation of the three parts of its formula to the classes BasicModel , AfterEffect and Normalization . Instead of subclassing the Similarity, one can simply introduce a new basic model and tell DFRSimilarity to use it. Changing {@linkplain org.apache.lucene.search.similarities.DefaultSimilarity} If you are interested in use cases for changing your similarity, see the Lucene users's mailing list at Overriding Similarity . In summary, here are a few use cases: 1. The SweetSpotSimilarity in org.apache.lucene.misc gives small increases as the frequency increases a small amount and then greater increases when you hit the \"sweet spot\", i.e. where you think the frequency of terms is more significant. 2. Overriding tf — In some applications, it doesn't matter what the score of a document is as long as a matching term occurs. In these cases people have overridden Similarity to return 1 from the tf() method. 3. Changing Length Normalization — By overriding State) , it is possible to discount how the length of a field contributes to a score. In DefaultSimilarity , lengthNorm = 1 / (numTerms in field)^0.5, but if one changes this to be 1 / (numTerms in field), all fields will be treated \"fairly\" . In general, Chris Hostetter sums it up best in saying (from the Lucene users's mailing list ): [One would override the Similarity in] ... any situation where you know more about your data then just that it's \"text\" is a situation where it might make sense to to override your Similarity method. Classes AfterEffect This class acts as the base class for the implementations of the first normalization of the informative content in the DFR framework. This component is also called the after effect and is defined by the formula Inf 2 = 1 - Prob 2 , where Prob 2 measures the information gain . @lucene.experimental AfterEffect.NoAfterEffect Implementation used when there is no aftereffect. AfterEffectB Model of the information gain based on the ratio of two Bernoulli processes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AfterEffectL Model of the information gain based on Laplace's law of succession. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModel This class acts as the base class for the specific basic model implementations in the DFR framework. Basic models compute the informative content Inf 1 = -log 2 Prob 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelBE Limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by tfn+1 and N is increased by F @lucene.experimental NOTE: in some corner cases this model may give poor performance with Normalizations that return large values for tfn such as NormalizationH3 . Consider using the geometric approximation ( BasicModelG ) instead, which provides the same relevance but with less practical problems. BasicModelD Implements the approximation of the binomial model with the divergence for DFR. The formula used in Lucene differs slightly from the one in the original paper: to avoid underflow for small values of N and F , N is increased by 1 and F is always increased by tfn+1 . WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelG Geometric as limiting form of the Bose-Einstein model. The formula used in Lucene differs slightly from the one in the original paper: F is increased by 1 and N is increased by F . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIF An approximation of the I(n e ) model. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIn The basic tf-idf model of randomness. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelIne Tf-idf model of randomness, based on a mixture of Poisson and inverse document frequency. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BasicModelP Implements the Poisson approximation for the binomial model for DFR. @lucene.experimental WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. BasicStats Stores all statistics commonly used ranking methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BM25Similarity BM25 Similarity. Introduced in Stephen E. Robertson, Steve Walker, Susan Jones, Micheline Hancock-Beaulieu, and Mike Gatford. Okapi at TREC-3. In Proceedings of the Third T ext RE trieval C onference (TREC 1994). Gaithersburg, USA, November 1994. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultSimilarity Expert: Default scoring implementation which encodes ( EncodeNormValue(Single) ) norm values as a single byte before being stored. At search time, the norm byte value is read from the index Directory and decoded ( DecodeNormValue(Int64) ) back to a float norm value. this encoding/decoding, while reducing index size, comes with the price of precision loss - it is not guaranteed that Decode(Encode(x)) = x . For instance, Decode(Encode(0.89)) = 0.75 . Compression of norm values to a single byte saves memory at search time, because once a field is referenced at search time, its norms - for all documents - are maintained in memory. The rationale supporting such lossy compression of norm values is that given the difficulty (and inaccuracy) of users to express their true information need by a query, only big differences matter. Last, note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. DFRSimilarity Implements the divergence from randomness (DFR) framework introduced in Gianni Amati and Cornelis Joost Van Rijsbergen. 2002. Probabilistic models of information retrieval based on measuring the divergence from randomness. ACM Trans. Inf. Syst. 20, 4 (October 2002), 357-389. The DFR scoring formula is composed of three separate components: the basic model , the aftereffect and an additional normalization component, represented by the classes BasicModel , AfterEffect and Normalization , respectively. The names of these classes were chosen to match the names of their counterparts in the Terrier IR engine. To construct a DFRSimilarity , you must specify the implementations for all three components of DFR: ComponentImplementations BasicModel : Basic model of information content: BasicModelBE : Limiting form of Bose-Einstein BasicModelG : Geometric approximation of Bose-Einstein BasicModelP : Poisson approximation of the Binomial BasicModelD : Divergence approximation of the Binomial BasicModelIn : Inverse document frequency BasicModelIne : Inverse expected document frequency [mixture of Poisson and IDF] BasicModelIF : Inverse term frequency [approximation of I(ne)] AfterEffect : First normalization of information gain: AfterEffectL : Laplace's law of succession AfterEffectB : Ratio of two Bernoulli processes AfterEffect.NoAfterEffect : no first normalization Normalization : Second (length) normalization: NormalizationH1 : Uniform distribution of term frequency NormalizationH2 : term frequency density inversely related to length NormalizationH3 : term frequency normalization provided by Dirichlet prior NormalizationZ : term frequency normalization provided by a Zipfian relation Normalization.NoNormalization : no second normalization Note that qtf , the multiplicity of term-occurrence in the query, is not handled by this implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Distribution The probabilistic distribution used to model term occurrence in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DistributionLL Log-logistic distribution. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DistributionSPL The smoothed power-law (SPL) distribution for the information-based framework that is described in the original paper. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IBSimilarity Provides a framework for the family of information-based models, as described in StÉphane Clinchant and Eric Gaussier. 2010. Information-based models for ad hoc IR. In Proceeding of the 33rd international ACM SIGIR conference on Research and development in information retrieval (SIGIR '10). ACM, New York, NY, USA, 234-241. The retrieval function is of the form RSV(q, d) = ∑ -x q w log Prob(X w >= t d w | λ w ) , where x q w is the query boost; X w is a random variable that counts the occurrences of word w ; t d w is the normalized term frequency; λ w is a parameter. The framework described in the paper has many similarities to the DFR framework (see DFRSimilarity ). It is possible that the two Similarities will be merged at one point. To construct an IBSimilarity , you must specify the implementations for all three components of the Information-Based model. ComponentImplementations Distribution : Probabilistic distribution used to model term occurrence DistributionLL : Log-logistic DistributionLL : Smoothed power-law Lambda : λ w parameter of the probability distribution LambdaDF : N w /N or average number of documents where w occurs LambdaTTF : F w /N or average number of occurrences of w in the collection Normalization : Term frequency normalizationAny supported DFR normalization (listed in DFRSimilarity ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lambda The lambda (λ w ) parameter in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LambdaDF Computes lambda as docFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk LambdaTTF Computes lambda as totalTermFreq+1 / numberOfDocuments+1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMDirichletSimilarity Bayesian smoothing using Dirichlet priors. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The formula as defined the paper assigns a negative score to documents that contain the term, but with fewer occurrences than predicted by the collection language model. The Lucene implementation returns 0 for such documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMJelinekMercerSimilarity Language model based on the Jelinek-Mercer smoothing method. From Chengxiang Zhai and John Lafferty. 2001. A study of smoothing methods for language models applied to Ad Hoc information retrieval. In Proceedings of the 24th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR '01). ACM, New York, NY, USA, 334-342. The model has a single parameter, λ. According to said paper, the optimal value depends on both the collection and the query. The optimal value is around 0.1 for title queries and 0.7 for long queries. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMSimilarity Abstract superclass for language modeling Similarities. The following inner types are introduced: LMSimilarity.LMStats , which defines a new statistic, the probability that the collection language model generates the current term; LMSimilarity.ICollectionModel , which is a strategy interface for object that compute the collection language model p(w|C) ; LMSimilarity.DefaultCollectionModel , an implementation of the former, that computes the term probability as the number of occurrences of the term in the collection, divided by the total number of tokens. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LMSimilarity.DefaultCollectionModel Models p(w|C) as the number of occurrences of the term in the collection, divided by the total number of tokens + 1 . LMSimilarity.LMStats Stores the collection distribution of the current term. MultiSimilarity Implements the CombSUM method for combining evidence from multiple similarity values described in: Joseph A. Shaw, Edward A. Fox. In Text REtrieval Conference (1993), pp. 243-252 This is a Lucene.NET EXPERIMENTAL API, use at your own risk Normalization This class acts as the base class for the implementations of the term frequency normalization methods in the DFR framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Normalization.NoNormalization Implementation used when there is no normalization. NormalizationH1 Normalization model that assumes a uniform distribution of the term frequency. While this model is parameterless in the original article , information-based models (see IBSimilarity ) introduced a multiplying factor. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationH2 Normalization model in which the term frequency is inversely related to the length. While this model is parameterless in the original article , the thesis introduces the parameterized variant. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationH3 Dirichlet Priors normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormalizationZ Pareto-Zipf Normalization This is a Lucene.NET EXPERIMENTAL API, use at your own risk PerFieldSimilarityWrapper Provides the ability to use a different Similarity for different fields. Subclasses should implement Get(String) to return an appropriate Similarity (for example, using field-specific parameter values) for the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Similarity Similarity defines the components of Lucene scoring. Expert: Scoring API. This is a low-level API, you should only extend this API if you want to implement an information retrieval model . If you are instead looking for a convenient way to alter Lucene's scoring, consider extending a higher-level implementation such as TFIDFSimilarity , which implements the vector space model with this API, or just tweaking the default implementation: DefaultSimilarity . Similarity determines how Lucene weights terms, and Lucene interacts with this class at both index-time and query-time . At indexing time, the indexer calls ComputeNorm(FieldInvertState) , allowing the Similarity implementation to set a per-document value for the field that will be later accessible via GetNormValues(String) . Lucene makes no assumption about what is in this norm, but it is most useful for encoding length normalization information. Implementations should carefully consider how the normalization is encoded: while Lucene's classical TFIDFSimilarity encodes a combination of index-time boost and length normalization information with SmallSingle into a single byte, this might not be suitable for all purposes. Many formulas require the use of average document length, which can be computed via a combination of SumTotalTermFreq and MaxDoc or DocCount , depending upon whether the average should reflect field sparsity. Additional scoring factors can be stored in named NumericDocValuesField s and accessed at query-time with GetNumericDocValues(String) . Finally, using index-time boosts (either via folding into the normalization byte or via DocValues ), is an inefficient way to boost the scores of different fields if the boost will be the same for every document, instead the Similarity can simply take a constant boost parameter C , and PerFieldSimilarityWrapper can return different instances with different boosts depending upon field name. At query-time, Queries interact with the Similarity via these steps: The ComputeWeight(Single, CollectionStatistics, TermStatistics[]) method is called a single time, allowing the implementation to compute any statistics (such as IDF, average document length, etc) across the entire collection . The TermStatistics and CollectionStatistics passed in already contain all of the raw statistics involved, so a Similarity can freely use any combination of statistics without causing any additional I/O. Lucene makes no assumption about what is stored in the returned Similarity.SimWeight object. The query normalization process occurs a single time: GetValueForNormalization() is called for each query leaf node, QueryNorm(Single) is called for the top-level query, and finally Normalize(Single, Single) passes down the normalization value and any top-level boosts (e.g. from enclosing BooleanQuery s). For each segment in the index, the Query creates a GetSimScorer(Similarity.SimWeight, AtomicReaderContext) The GetScore() method is called for each matching document. When Explain(Query, Int32) is called, queries consult the Similarity's DocScorer for an explanation of how it computed its score. The query passes in a the document id and an explanation of how the frequency was computed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Similarity.SimScorer API for scoring \"sloppy\" queries such as TermQuery , SpanQuery , and PhraseQuery . Frequencies are floating-point values: an approximate within-document frequency adjusted for \"sloppiness\" by ComputeSlopFactor(Int32) . Similarity.SimWeight Stores the weight for a query across the indexed collection. this abstract implementation is empty; descendants of Similarity should subclass Similarity.SimWeight and define the statistics they require in the subclass. Examples include idf, average field length, etc. SimilarityBase A subclass of Similarity that provides a simplified API for its descendants. Subclasses are only required to implement the Score(BasicStats, Single, Single) and ToString() methods. Implementing Explain(Explanation, BasicStats, Int32, Single, Single) is optional, inasmuch as SimilarityBase already provides a basic explanation of the score and the term frequency. However, implementers of a subclass are encouraged to include as much detail about the scoring method as possible. Note: multi-word queries such as phrase queries are scored in a different way than Lucene's default ranking algorithm: whereas it \"fakes\" an IDF value for the phrase as a whole (since it does not know it), this class instead scores phrases as a summation of the individual term scores. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TFIDFSimilarity Implementation of Similarity with the Vector Space Model. Expert: Scoring API. TFIDFSimilarity defines the components of Lucene scoring. Overriding computation of these components is a convenient way to alter Lucene scoring. Suggested reading: Introduction To Information Retrieval, Chapter 6 . The following describes how Lucene scoring evolves from underlying information retrieval models to (efficient) implementation. We first brief on VSM Score , then derive from it Lucene's Conceptual Scoring Formula , from which, finally, evolves Lucene's Practical Scoring Function (the latter is connected directly with Lucene classes and methods). Lucene combines Boolean model (BM) of Information Retrieval with Vector Space Model (VSM) of Information Retrieval - documents \"approved\" by BM are scored by VSM. In VSM, documents and queries are represented as weighted vectors in a multi-dimensional space, where each distinct index term is a dimension, and weights are Tf-idf values. VSM does not require weights to be Tf-idf values, but Tf-idf values are believed to produce search results of high quality, and so Lucene is using Tf-idf . Tf and Idf are described in more detail below, but for now, for completion, let's just say that for given term t and document (or query) x , Tf(t,x) varies with the number of occurrences of term t in x (when one increases so does the other) and idf(t) similarly varies with the inverse of the number of index documents containing term t . VSM score of document d for query q is the Cosine Similarity of the weighted query vectors V(q) and V(d) : cosine-similarity(q,d) = V(q) · V(d) ––––––––– |V(q)| |V(d)| VSM Score Where V(q) · V(d) is the dot product of the weighted vectors, and |V(q)| and |V(d)| are their Euclidean norms . Note: the above equation can be viewed as the dot product of the normalized weighted vectors, in the sense that dividing V(q) by its euclidean norm is normalizing it to a unit vector. Lucene refines VSM score for both search quality and usability: Normalizing V(d) to the unit vector is known to be problematic in that it removes all document length information. For some documents removing this info is probably ok, e.g. a document made by duplicating a certain paragraph 10 times, especially if that paragraph is made of distinct terms. But for a document which contains no duplicated paragraphs, this might be wrong. To avoid this problem, a different document length normalization factor is used, which normalizes to a vector equal to or larger than the unit vector: doc-len-norm(d) . At indexing, users can specify that certain documents are more important than others, by assigning a document boost. For this, the score of each document is also multiplied by its boost value doc-boost(d) . Lucene is field based, hence each query term applies to a single field, document length normalization is by the length of the certain field, and in addition to document boost there are also document fields boosts. The same field can be added to a document during indexing several times, and so the boost of that field is the multiplication of the boosts of the separate additions (or parts) of that field within the document. At search time users can specify boosts to each query, sub-query, and each query term, hence the contribution of a query term to the score of a document is multiplied by the boost of that query term query-boost(q) . A document may match a multi term query without containing all the terms of that query (this is correct for some of the queries), and users can further reward documents matching more query terms through a coordination factor, which is usually larger when more terms are matched: coord-factor(q,d) . Under the simplifying assumption of a single field in the index, we get Lucene's Conceptual scoring formula : score(q,d) = coord-factor(q,d) · query-boost(q) · V(q) · V(d) ––––––––– |V(q)| · doc-len-norm(d) · doc-boost(d) Lucene Conceptual Scoring Formula The conceptual formula is a simplification in the sense that (1) terms and documents are fielded and (2) boosts are usually per query term rather than per query. We now describe how Lucene implements this conceptual scoring formula, and derive from it Lucene's Practical Scoring Function . For efficient score computation some scoring components are computed and aggregated in advance: Query-boost for the query (actually for each query term) is known when search starts. Query Euclidean norm |V(q)| can be computed when search starts, as it is independent of the document being scored. From search optimization perspective, it is a valid question why bother to normalize the query at all, because all scored documents will be multiplied by the same |V(q)| , and hence documents ranks (their order by score) will not be affected by this normalization. There are two good reasons to keep this normalization: Recall that Cosine Similarity can be used find how similar two documents are. One can use Lucene for e.g. clustering, and use a document as a query to compute its similarity to other documents. In this use case it is important that the score of document d3 for query d1 is comparable to the score of document d3 for query d2 . In other words, scores of a document for two distinct queries should be comparable. There are other applications that may require this. And this is exactly what normalizing the query vector V(q) provides: comparability (to a certain extent) of two or more queries. Applying query normalization on the scores helps to keep the scores around the unit vector, hence preventing loss of score data because of floating point precision limitations. Document length norm doc-len-norm(d) and document boost doc-boost(d) are known at indexing time. They are computed in advance and their multiplication is saved as a single value in the index: norm(d) . (In the equations below, norm(t in d) means norm(field(t) in doc d) where field(t) is the field associated with term t .) Lucene's Practical Scoring Function is derived from the above. The color codes demonstrate how it relates to those of the conceptual formula: score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t) 2 · t.Boost · norm(t,d) ) t in q Lucene Practical Scoring Function where tf(t in d) correlates to the term's frequency , defined as the number of times term t appears in the currently scored document d . Documents that have more occurrences of a given term receive a higher score. Note that tf(t in q) is assumed to be 1 and therefore it does not appear in this equation, However if a query contains twice the same term, there will be two term-queries with that same term and hence the computation would still be correct (although not very efficient). The default computation for tf(t in d) in DefaultSimilarity ( Tf(Single) ) is: tf(t in d) = frequency ½ idf(t) stands for Inverse Document Frequency. this value correlates to the inverse of DocFreq (the number of documents in which the term t appears). this means rarer terms give higher contribution to the total score. idf(t) appears for t in both the query and the document, hence it is squared in the equation. The default computation for idf(t) in DefaultSimilarity ( Idf(Int64, Int64) ) is: idf(t) = 1 + log ( NumDocs ––––––––– DocFreq+1 ) coord(q,d) is a score factor based on how many of the query terms are found in the specified document. Typically, a document that contains more of the query's terms will receive a higher score than another document with fewer query terms. this is a search time factor computed in coord(q,d) ( Coord(Int32, Int32) ) by the Similarity in effect at search time. queryNorm(q) is a normalizing factor used to make scores between queries comparable. this factor does not affect document ranking (since all ranked documents are multiplied by the same factor), but rather just attempts to make scores from different queries (or even different indexes) comparable. this is a search time factor computed by the Similarity in effect at search time. The default computation in DefaultSimilarity ( QueryNorm(Single) ) produces a Euclidean norm : queryNorm(q) = queryNorm(sumOfSquaredWeights) = 1 –––––––––––––– sumOfSquaredWeights ½ The sum of squared weights (of the query terms) is computed by the query Weight object. For example, a BooleanQuery computes this value as: sumOfSquaredWeights = q.Boost 2 · ∑ ( idf(t) · t.Boost ) 2 t in q where sumOfSquaredWeights is GetValueForNormalization() and q.Boost is Boost t.Boost is a search time boost of term t in the query q as specified in the query text (see query syntax ), or as set by application calls to Boost . Notice that there is really no direct API for accessing a boost of one term in a multi term query, but rather multi terms are represented in a query as multi TermQuery objects, and so the boost of a term in the query is accessible by calling the sub-query Boost . norm(t,d) encapsulates a few (indexing time) boost and length factors: Field boost - set Boost before adding the field to a document. lengthNorm - computed when the document is added to the index in accordance with the number of tokens of this field in the document, so that shorter fields contribute more to the score. LengthNorm is computed by the Similarity class in effect at indexing. The ComputeNorm(FieldInvertState) method is responsible for combining all of these factors into a single System.Single . When a document is added to the index, all the above factors are multiplied. If the document has multiple fields with the same name, all their boosts are multiplied together: norm(t,d) = lengthNorm · ∏ Boost field f in d named as t Note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Interfaces LMSimilarity.ICollectionModel A strategy for computing the collection language model."
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.IPruner.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherLifetimeManager.IPruner.html",
    "title": "Interface SearcherLifetimeManager.IPruner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface SearcherLifetimeManager.IPruner See Prune(SearcherLifetimeManager.IPruner) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IPruner Methods | Improve this Doc View Source DoPrune(Double, IndexSearcher) Return true if this searcher should be removed. Declaration bool DoPrune(double ageSec, IndexSearcher searcher) Parameters Type Name Description System.Double ageSec How much time has passed since this searcher was the current (live) searcher IndexSearcher searcher Searcher Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.SearcherFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.SearcherFactory.html",
    "title": "Class SearcherFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherFactory Factory class used by SearcherManager to create new IndexSearcher s. The default implementation just creates an IndexSearcher with no custom behavior: public IndexSearcher NewSearcher(IndexReader r) { return new IndexSearcher(r); } You can pass your own factory instead if you want custom behavior, such as: Setting a custom scoring model: Similarity Parallel per-segment search: IndexSearcher(IndexReader, TaskScheduler) Return custom subclasses of IndexSearcher (for example that implement distributed scoring) Run queries to warm your IndexSearcher before it is used. Note: when using near-realtime search you may want to also set MergedSegmentWarmer to warm newly merged segments in the background, outside of the reopen path. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SearcherFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class SearcherFactory Methods | Improve this Doc View Source NewSearcher(IndexReader) Returns a new IndexSearcher over the given reader. Declaration public virtual IndexSearcher NewSearcher(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description IndexSearcher Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadSpanUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadSpanUtil.html",
    "title": "Class PayloadSpanUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadSpanUtil Experimental class to get set of payloads for most standard Lucene queries. Operates like Highlighter - IndexReader should only contain doc of interest, best to use MemoryIndex. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PayloadSpanUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadSpanUtil Constructors | Improve this Doc View Source PayloadSpanUtil(IndexReaderContext) Declaration public PayloadSpanUtil(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context that contains doc with payloads to extract See Also Context Methods | Improve this Doc View Source GetPayloadsForQuery(Query) Query should be rewritten for wild/fuzzy support. Declaration public virtual ICollection<byte[]> GetPayloadsForQuery(Query query) Parameters Type Name Description Query query rewritten query Returns Type Description System.Collections.Generic.ICollection < System.Byte []> payloads Collection Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.html",
    "title": "Class IndexSearcher | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexSearcher Implements search over a single IndexReader . Applications usually need only call the inherited Search(Query, Int32) or Search(Query, Filter, Int32) methods. For performance reasons, if your index is unchanging, you should share a single IndexSearcher instance across multiple searches instead of creating a new one per-search. If your index has changed and you wish to see the changes reflected in searching, you should use OpenIfChanged(DirectoryReader) to obtain a new reader and then create a new IndexSearcher from that. Also, for low-latency turnaround it's best to use a near-real-time reader ( Open(IndexWriter, Boolean) ). Once you have a new IndexReader , it's relatively cheap to create a new IndexSearcher from it. NOTE : IndexSearcher instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexSearcher instance; use your own (non-Lucene) objects instead. Inheritance System.Object IndexSearcher Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class IndexSearcher Constructors | Improve this Doc View Source IndexSearcher(IndexReader) Creates a searcher searching the provided index. Declaration public IndexSearcher(IndexReader r) Parameters Type Name Description IndexReader r | Improve this Doc View Source IndexSearcher(IndexReader, TaskScheduler) Runs searches for each segment separately, using the provided System.Threading.Tasks.TaskScheduler . IndexSearcher will not shutdown/awaitTermination this System.Threading.Tasks.TaskScheduler on dispose; you must do so, eventually, on your own. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public IndexSearcher(IndexReader r, TaskScheduler executor) Parameters Type Name Description IndexReader r System.Threading.Tasks.TaskScheduler executor | Improve this Doc View Source IndexSearcher(IndexReaderContext) Creates a searcher searching the provided top-level IndexReaderContext . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public IndexSearcher(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context See Also IndexReaderContext Context | Improve this Doc View Source IndexSearcher(IndexReaderContext, TaskScheduler) Creates a searcher searching the provided top-level IndexReaderContext . Given a non- null System.Threading.Tasks.TaskScheduler this method runs searches for each segment separately, using the provided System.Threading.Tasks.TaskScheduler . IndexSearcher will not shutdown/awaitTermination this System.Threading.Tasks.TaskScheduler on close; you must do so, eventually, on your own. @lucene.experimental Declaration public IndexSearcher(IndexReaderContext context, TaskScheduler executor) Parameters Type Name Description IndexReaderContext context System.Threading.Tasks.TaskScheduler executor See Also IndexReaderContext Context Fields | Improve this Doc View Source m_leafContexts Declaration protected readonly IList<AtomicReaderContext> m_leafContexts Field Value Type Description System.Collections.Generic.IList < AtomicReaderContext > | Improve this Doc View Source m_leafSlices Used with executor - each slice holds a set of leafs executed within one thread Declaration protected readonly IndexSearcher.LeafSlice[] m_leafSlices Field Value Type Description IndexSearcher.LeafSlice [] | Improve this Doc View Source m_readerContext Declaration protected readonly IndexReaderContext m_readerContext Field Value Type Description IndexReaderContext Properties | Improve this Doc View Source DefaultSimilarity Expert: returns a default Similarity instance. In general, this method is only called to initialize searchers and writers. User code and query implementations should respect Similarity . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static Similarity DefaultSimilarity { get; } Property Value Type Description Similarity | Improve this Doc View Source IndexReader Return the IndexReader this searches. Declaration public virtual IndexReader IndexReader { get; } Property Value Type Description IndexReader | Improve this Doc View Source Similarity Expert: Set the Similarity implementation used by this IndexSearcher. Declaration public virtual Similarity Similarity { get; set; } Property Value Type Description Similarity | Improve this Doc View Source TopReaderContext Returns this searchers the top-level IndexReaderContext . Declaration public virtual IndexReaderContext TopReaderContext { get; } Property Value Type Description IndexReaderContext See Also Context Methods | Improve this Doc View Source CollectionStatistics(String) Returns CollectionStatistics for a field. This can be overridden for example, to return a field's statistics across a distributed collection. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual CollectionStatistics CollectionStatistics(string field) Parameters Type Name Description System.String field Returns Type Description CollectionStatistics | Improve this Doc View Source CreateNormalizedWeight(Query) Creates a normalized weight for a top-level Query . The query is rewritten by this method and CreateWeight(IndexSearcher) called, afterwards the Weight is normalized. The returned Weight can then directly be used to get a Scorer . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual Weight CreateNormalizedWeight(Query query) Parameters Type Name Description Query query Returns Type Description Weight | Improve this Doc View Source Doc(Int32) Sugar for .IndexReader.Document(docID) Declaration public virtual Document Doc(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Document See Also Document ( System.Int32 ) | Improve this Doc View Source Doc(Int32, StoredFieldVisitor) Sugar for .IndexReader.Document(docID, fieldVisitor) Declaration public virtual void Doc(int docID, StoredFieldVisitor fieldVisitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor fieldVisitor See Also Document ( System.Int32 , StoredFieldVisitor ) | Improve this Doc View Source Doc(Int32, ISet<String>) Sugar for .IndexReader.Document(docID, fieldsToLoad) Declaration public virtual Document Doc(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID System.Collections.Generic.ISet < System.String > fieldsToLoad Returns Type Description Document See Also Document ( System.Int32 , System.Collections.Generic.ISet < System.String >) | Improve this Doc View Source Document(Int32, ISet<String>) Declaration [Obsolete(\"Use <seealso cref=#doc(int, java.util.Set)/> instead.\")] public Document Document(int docID, ISet<string> fieldsToLoad) Parameters Type Name Description System.Int32 docID System.Collections.Generic.ISet < System.String > fieldsToLoad Returns Type Description Document | Improve this Doc View Source Explain(Query, Int32) Returns an Explanation that describes how doc scored against query . This is intended to be used in developing Similarity implementations, and, for good performance, should not be displayed with every hit. Computing an explanation is as expensive as executing the query over the entire index. Declaration public virtual Explanation Explain(Query query, int doc) Parameters Type Name Description Query query System.Int32 doc Returns Type Description Explanation | Improve this Doc View Source Explain(Weight, Int32) Expert: low-level implementation method Returns an Explanation that describes how doc scored against weight . This is intended to be used in developing Similarity implementations, and, for good performance, should not be displayed with every hit. Computing an explanation is as expensive as executing the query over the entire index. Applications should call Explain(Query, Int32) . Declaration protected virtual Explanation Explain(Weight weight, int doc) Parameters Type Name Description Weight weight System.Int32 doc Returns Type Description Explanation Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Rewrite(Query) Expert: called to re-write queries into primitive queries. Declaration public virtual Query Rewrite(Query original) Parameters Type Name Description Query original Returns Type Description Query Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, ICollector) Lower-level search API. Collect(Int32) is called for every matching document. Declaration public virtual void Search(Query query, Filter filter, ICollector results) Parameters Type Name Description Query query To match documents Filter filter Ef non-null, used to permit documents to be collected. ICollector results To receive hits Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32) Finds the top n hits for query , applying filter if non-null. Declaration public virtual TopDocs Search(Query query, Filter filter, int n) Parameters Type Name Description Query query Filter filter System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32, Sort) Search implementation with arbitrary sorting. Finds the top n hits for query , applying filter if non-null, and sorting the hits by the criteria in sort . NOTE: this does not compute scores by default; use Search(Query, Filter, Int32, Sort, Boolean, Boolean) to control scoring. Declaration public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort) Parameters Type Name Description Query query Filter filter System.Int32 n Sort sort Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Filter, Int32, Sort, Boolean, Boolean) Search implementation with arbitrary sorting, plus control over whether hit scores and max score should be computed. Finds the top n hits for query , applying filter if non-null, and sorting the hits by the criteria in sort . If doDocScores is true then the score of each hit will be computed and returned. If doMaxScore is true then the maximum score over all collected hits will be computed. Declaration public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description Query query Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, ICollector) Lower-level search API. Collect(Int32) is called for every matching document. Declaration public virtual void Search(Query query, ICollector results) Parameters Type Name Description Query query ICollector results Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Int32) Finds the top n hits for query . Declaration public virtual TopDocs Search(Query query, int n) Parameters Type Name Description Query query System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Query, Int32, Sort) Search implementation with arbitrary sorting and no filter. Declaration public virtual TopFieldDocs Search(Query query, int n, Sort sort) Parameters Type Name Description Query query The query to search for System.Int32 n Return only the top n results Sort sort The Sort object Returns Type Description TopFieldDocs The top docs, sorted according to the supplied Sort instance Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source Search(Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) Just like Search(Weight, Int32, Sort, Boolean, Boolean) , but you choose whether or not the fields in the returned FieldDoc instances should be set by specifying fillFields . Declaration protected virtual TopFieldDocs Search(Weight weight, FieldDoc after, int nDocs, Sort sort, bool fillFields, bool doDocScores, bool doMaxScore) Parameters Type Name Description Weight weight FieldDoc after System.Int32 nDocs Sort sort System.Boolean fillFields System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs | Improve this Doc View Source Search(Weight, ScoreDoc, Int32) Expert: Low-level search implementation. Finds the top nDocs hits for query , applying filter if non-null. Applications should usually call Search(Query, Int32) or Search(Query, Filter, Int32) instead. Declaration protected virtual TopDocs Search(Weight weight, ScoreDoc after, int nDocs) Parameters Type Name Description Weight weight ScoreDoc after System.Int32 nDocs Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(Weight, Int32, Sort, Boolean, Boolean) Expert: Low-level search implementation with arbitrary sorting and control over whether hit scores and max score should be computed. Finds the top nDocs hits for query and sorting the hits by the criteria in sort . Applications should usually call Search(Query, Filter, Int32, Sort) instead. Declaration protected virtual TopFieldDocs Search(Weight weight, int nDocs, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description Weight weight System.Int32 nDocs Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, FieldDoc, Int32, Sort, Boolean, Boolean, Boolean) Just like Search(Weight, Int32, Sort, Boolean, Boolean) , but you choose whether or not the fields in the returned FieldDoc instances should be set by specifying fillFields . Declaration protected virtual TopFieldDocs Search(IList<AtomicReaderContext> leaves, Weight weight, FieldDoc after, int nDocs, Sort sort, bool fillFields, bool doDocScores, bool doMaxScore) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves Weight weight FieldDoc after System.Int32 nDocs Sort sort System.Boolean fillFields System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopFieldDocs | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, ICollector) Lower-level search API. Collect(Int32) is called for every document. NOTE: this method executes the searches on all given leaves exclusively. To search across all the searchers leaves use m_leafContexts . Declaration protected virtual void Search(IList<AtomicReaderContext> leaves, Weight weight, ICollector collector) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves The searchers leaves to execute the searches on Weight weight To match documents ICollector collector To receive hits Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Search(IList<AtomicReaderContext>, Weight, ScoreDoc, Int32) Expert: Low-level search implementation. Finds the top n hits for query . Applications should usually call Search(Query, Int32) or Search(Query, Filter, Int32) instead. Declaration protected virtual TopDocs Search(IList<AtomicReaderContext> leaves, Weight weight, ScoreDoc after, int nDocs) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves Weight weight ScoreDoc after System.Int32 nDocs Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32) Finds the top n hits for query , applying filter if non-null, where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) Finds the top n hits for query , applying filter if non-null, where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n, Sort sort) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Sort sort Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean) Finds the top n hits for query where all results are after a previous result ( after ), allowing control over whether hit scores and max score should be computed. By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. If doDocScores is true then the score of each hit will be computed and returned. If doMaxScore is true then the maximum score over all collected hits will be computed. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description ScoreDoc after Query query Filter filter System.Int32 n Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Int32) Finds the top n hits for top query where all results are after a previous result (top after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, int n) Parameters Type Name Description ScoreDoc after Query query System.Int32 n Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source SearchAfter(ScoreDoc, Query, Int32, Sort) Finds the top n hits for query where all results are after a previous result ( after ). By passing the bottom result from a previous page as after , this method can be used for efficient 'deep-paging' across potentially large result sets. Declaration public virtual TopDocs SearchAfter(ScoreDoc after, Query query, int n, Sort sort) Parameters Type Name Description ScoreDoc after Query query System.Int32 n Sort sort Returns Type Description TopDocs Exceptions Type Condition BooleanQuery.TooManyClausesException If a query would exceed MaxClauseCount clauses. | Improve this Doc View Source Slices(IList<AtomicReaderContext>) Expert: Creates an array of leaf slices each holding a subset of the given leaves. Each IndexSearcher.LeafSlice is executed in a single thread. By default there will be one IndexSearcher.LeafSlice per leaf ( AtomicReaderContext ). Declaration protected virtual IndexSearcher.LeafSlice[] Slices(IList<AtomicReaderContext> leaves) Parameters Type Name Description System.Collections.Generic.IList < AtomicReaderContext > leaves Returns Type Description IndexSearcher.LeafSlice [] | Improve this Doc View Source TermStatistics(Term, TermContext) Returns TermStatistics for a term. This can be overridden for example, to return a term's statistics across a distributed collection. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual TermStatistics TermStatistics(Term term, TermContext context) Parameters Type Name Description Term term TermContext context Returns Type Description TermStatistics | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source WrapFilter(Query, Filter) @lucene.internal Declaration protected virtual Query WrapFilter(Query query, Filter filter) Parameters Type Name Description Query query Filter filter Returns Type Description Query Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeSpecification.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.MergeSpecification.html",
    "title": "Class MergePolicy.MergeSpecification | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.MergeSpecification A MergePolicy.MergeSpecification instance provides the information necessary to perform multiple merges. It simply contains a list of MergePolicy.OneMerge instances. Inheritance System.Object MergePolicy.MergeSpecification Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class MergeSpecification Constructors | Improve this Doc View Source MergeSpecification() Sole constructor. Use Add(MergePolicy.OneMerge) to add merges. Declaration public MergeSpecification() Properties | Improve this Doc View Source Merges The subset of segments to be included in the primitive merge. Declaration public IList<MergePolicy.OneMerge> Merges { get; } Property Value Type Description System.Collections.Generic.IList < MergePolicy.OneMerge > Methods | Improve this Doc View Source Add(MergePolicy.OneMerge) Adds the provided MergePolicy.OneMerge to this specification. Declaration public virtual void Add(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source SegString(Directory) Returns a description of the merges in this specification. Declaration public virtual string SegString(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.DocMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.DocMap.html",
    "title": "Class MergePolicy.DocMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.DocMap A map of doc IDs. Inheritance System.Object MergePolicy.DocMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocMap Constructors | Improve this Doc View Source DocMap() Sole constructor, typically invoked from sub-classes constructors. Declaration protected DocMap() Methods | Improve this Doc View Source Map(Int32) Return the new doc ID according to its old value. Declaration public abstract int Map(int old) Parameters Type Name Description System.Int32 old Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IndexReaderWarmer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IndexReaderWarmer.html",
    "title": "Class IndexWriter.IndexReaderWarmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexWriter.IndexReaderWarmer If Open(IndexWriter, Boolean) has been called (ie, this writer is in near real-time mode), then after a merge completes, this class can be invoked to warm the reader on the newly merged segment, before the merge commits. This is not required for near real-time search, but will reduce search latency on opening a new near real-time reader after a merge completes. @lucene.experimental NOTE : Warm(AtomicReader) is called before any deletes have been carried over to the merged segment. Inheritance System.Object IndexWriter.IndexReaderWarmer SimpleMergedSegmentWarmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReaderWarmer Constructors | Improve this Doc View Source IndexReaderWarmer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected IndexReaderWarmer() Methods | Improve this Doc View Source Warm(AtomicReader) Invoked on the AtomicReader for the newly merged segment, before that segment is made visible to near-real-time readers. Declaration public abstract void Warm(AtomicReader reader) Parameters Type Name Description AtomicReader reader Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IEvent.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexWriter.IEvent.html",
    "title": "Interface IndexWriter.IEvent | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IndexWriter.IEvent Interface for internal atomic events. See Lucene.Net.Index.DocumentsWriter for details. Events are executed concurrently and no order is guaranteed. Each event should only rely on the serializeability within it's process method. All actions that must happen before or after a certain action must be encoded inside the Process(IndexWriter, Boolean, Boolean) method. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IEvent Methods | Improve this Doc View Source Process(IndexWriter, Boolean, Boolean) Processes the event. this method is called by the IndexWriter passed as the first argument. Declaration void Process(IndexWriter writer, bool triggerMerge, bool clearBuffers) Parameters Type Name Description IndexWriter writer the IndexWriter that executes the event. System.Boolean triggerMerge false iff this event should not trigger any segment merges System.Boolean clearBuffers true iff this event should clear all buffers associated with the event. Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IIndexableField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IIndexableField.html",
    "title": "Interface IIndexableField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IIndexableField Represents a single field for indexing. IndexWriter consumes IEnumerable<IndexableField> as a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IIndexableField Properties | Improve this Doc View Source Boost Returns the field's index-time boost. Only fields can have an index-time boost, if you want to simulate a \"document boost\", then you must pre-multiply it across all the relevant fields yourself. The boost is used to compute the norm factor for the field. By default, in the ComputeNorm(FieldInvertState) method, the boost value is multiplied by the length normalization factor and then rounded by EncodeNormValue(Single) before it is stored in the index. One should attempt to ensure that this product does not overflow the range of that encoding. It is illegal to return a boost other than 1.0f for a field that is not indexed ( IsIndexed is false) or omits normalization values ( OmitNorms returns true). Declaration float Boost { get; } Property Value Type Description System.Single See Also ComputeNorm ( FieldInvertState ) EncodeNormValue ( System.Single ) | Improve this Doc View Source IndexableFieldType IIndexableFieldType describing the properties of this field. Declaration IIndexableFieldType IndexableFieldType { get; } Property Value Type Description IIndexableFieldType | Improve this Doc View Source Name Field name Declaration string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumericType Gets the NumericFieldType of the underlying value, or NONE if the value is not set or non-numeric. Expert: The difference between this property and NumericType is this is represents the current state of the field (whether being written or read) and the FieldType property represents instructions on how the field will be written, but does not re-populate when reading back from an index (it is write-only). In Java, the numeric type was determined by checking the type of GetNumericValue() . However, since there are no reference number types in .NET, using GetNumericValue() so will cause boxing/unboxing. It is therefore recommended to use this property to check the underlying type and the corresponding Get*Value() method to retrieve the value. NOTE: Since Lucene codecs do not support BYTE or INT16 , fields created with these types will always be INT32 when read back from the index. Declaration NumericFieldType NumericType { get; } Property Value Type Description NumericFieldType Methods | Improve this Doc View Source GetBinaryValue() Non-null if this field has a binary value. Declaration BytesRef GetBinaryValue() Returns Type Description BytesRef | Improve this Doc View Source GetByteValue() Returns the field value as System.Byte or null if the type is non-numeric. Declaration byte? GetByteValue() Returns Type Description System.Nullable < System.Byte > The field value or null if the type is non-numeric. | Improve this Doc View Source GetDoubleValue() Returns the field value as System.Double or null if the type is non-numeric. Declaration double? GetDoubleValue() Returns Type Description System.Nullable < System.Double > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt16Value() Returns the field value as System.Int16 or null if the type is non-numeric. Declaration short? GetInt16Value() Returns Type Description System.Nullable < System.Int16 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt32Value() Returns the field value as System.Int32 or null if the type is non-numeric. Declaration int? GetInt32Value() Returns Type Description System.Nullable < System.Int32 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetInt64Value() Returns the field value as System.Int64 or null if the type is non-numeric. Declaration long? GetInt64Value() Returns Type Description System.Nullable < System.Int64 > The field value or null if the type is non-numeric. | Improve this Doc View Source GetNumericValue() Non-null if this field has a numeric value. Declaration [Obsolete(\"In .NET, use of this method will cause boxing/unboxing. Instead, use the NumericType property to check the underlying type and call the appropriate GetXXXValue() method to retrieve the value.\")] object GetNumericValue() Returns Type Description System.Object | Improve this Doc View Source GetReaderValue() Non-null if this field has a System.IO.TextReader value Declaration TextReader GetReaderValue() Returns Type Description System.IO.TextReader | Improve this Doc View Source GetSingleValue() Returns the field value as System.Single or null if the type is non-numeric. Declaration float? GetSingleValue() Returns Type Description System.Nullable < System.Single > The field value or null if the type is non-numeric. | Improve this Doc View Source GetStringValue() Non-null if this field has a string value. Declaration string GetStringValue() Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(string format) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetStringValue(String, IFormatProvider) The value of the field as a System.String , or null . If null , the System.IO.TextReader value or binary value is used. Exactly one of GetStringValue() , GetReaderValue() , and GetBinaryValue() must be set. Declaration string GetStringValue(string format, IFormatProvider provider) Parameters Type Name Description System.String format A standard or custom numeric format string. This parameter has no effect if this field is non-numeric. System.IFormatProvider provider An object that supplies culture-specific formatting information. This parameter has no effect if this field is non-numeric. Returns Type Description System.String The string representation of the value if it is either a System.String or numeric type. | Improve this Doc View Source GetTokenStream(Analyzer) Creates the TokenStream used for indexing this field. If appropriate, implementations should use the given Analyzer to create the TokenStream s. Declaration TokenStream GetTokenStream(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Analyzer that should be used to create the TokenStream s from Returns Type Description TokenStream TokenStream value for indexing the document. Should always return a non-null value if the field is to be indexed Exceptions Type Condition System.IO.IOException Can be thrown while creating the TokenStream Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene3x.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene3x | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene3x <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codec to support Lucene 3.x indexes (readonly) Classes Lucene3xCodec Supports the Lucene 3.x index format (readonly) Lucene3xSegmentInfoFormat Lucene3x ReadOnly SegmentInfoFormat implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene3xSegmentInfoReader Lucene 3x implementation of SegmentInfoReader . @lucene.experimental"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosFormat.html",
    "title": "Class FieldInfosFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfosFormat Encodes/decodes FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosFormat Lucene40FieldInfosFormat Lucene42FieldInfosFormat Lucene46FieldInfosFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosFormat Constructors | Improve this Doc View Source FieldInfosFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosFormat() Properties | Improve this Doc View Source FieldInfosReader Returns a FieldInfosReader to read field infos from the index. Declaration public abstract FieldInfosReader FieldInfosReader { get; } Property Value Type Description FieldInfosReader | Improve this Doc View Source FieldInfosWriter Returns a FieldInfosWriter to write field infos to the index. Declaration public abstract FieldInfosWriter FieldInfosWriter { get; } Property Value Type Description FieldInfosWriter Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamToAutomaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenStreamToAutomaton.html",
    "title": "Class TokenStreamToAutomaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenStreamToAutomaton Consumes a TokenStream and creates an Automaton where the transition labels are UTF8 bytes (or Unicode code points if unicodeArcs is true) from the ITermToBytesRefAttribute . Between tokens we insert POS_SEP and for holes we insert HOLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TokenStreamToAutomaton Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public class TokenStreamToAutomaton Constructors | Improve this Doc View Source TokenStreamToAutomaton() Sole constructor. Declaration public TokenStreamToAutomaton() Fields | Improve this Doc View Source HOLE We add this arc to represent a hole. Declaration public const int HOLE = 30 Field Value Type Description System.Int32 | Improve this Doc View Source POS_SEP We create transition between two adjacent tokens. Declaration public const int POS_SEP = 31 Field Value Type Description System.Int32 Properties | Improve this Doc View Source PreservePositionIncrements Whether to generate holes in the automaton for missing positions, true by default. Declaration public virtual bool PreservePositionIncrements { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source UnicodeArcs Whether to make transition labels Unicode code points instead of UTF8 bytes, false by default Declaration public virtual bool UnicodeArcs { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ChangeToken(BytesRef) Subclass & implement this if you need to change the token (such as escaping certain bytes) before it's turned into a graph. Declaration protected virtual BytesRef ChangeToken(BytesRef in) Parameters Type Name Description BytesRef in Returns Type Description BytesRef | Improve this Doc View Source ToAutomaton(TokenStream) Pulls the graph (including IPositionLengthAttribute from the provided TokenStream , and creates the corresponding automaton where arcs are bytes (or Unicode code points if unicodeArcs = true) from each term. Declaration public virtual Automaton ToAutomaton(TokenStream in) Parameters Type Name Description TokenStream in Returns Type Description Automaton Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.html",
    "title": "Namespace Lucene.Net.Search.Suggest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest Classes BufferedInputIterator This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BufferingTermFreqIteratorWrapper This wrapper buffers incoming elements. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocumentDictionary Dictionary with terms, weights, payload (optional) and contexts (optional) information taken from stored/indexed fields in a Lucene index. NOTE: The term and (optionally) payload fields have to be stored The weight field can be stored or can be a NumericDocValues . If the weight field is not defined, the value of the weight is 0 if any of the term or (optionally) payload fields supplied do not have a value for a document, then the document is skipped by the dictionary DocumentDictionary.DocumentInputIterator Implements IInputIterator from stored fields. DocumentValueSourceDictionary Dictionary with terms and optionally payload information taken from stored fields in a Lucene index. Similar to DocumentDictionary , except it obtains the weight of the terms in a document based on a ValueSource . NOTE: The term and (optionally) payload fields have to be stored if the term or (optionally) payload fields supplied do not have a value for a document, then the document is rejected by the dictionary In practice the ValueSource will likely be obtained using the lucene expression module. The following example shows how to create a ValueSource from a simple addition of two fields: Expression expression = JavascriptCompiler.Compile(\"f1 + f2\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"f1\", SortField.Type_e.LONG)); bindings.Add(new SortField(\"f2\", SortField.Type_e.LONG)); ValueSource valueSource = expression.GetValueSource(bindings); EmptyInputIterator Singleton IInputIterator that iterates over 0 BytesRefs. FileDictionary Dictionary represented by a text file. Format allowed: 1 entry per line: An entry can be: suggestion suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight suggestion Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter weight Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter payload where the default Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter is DEFAULT_FIELD_DELIMITER (a tab) NOTE: In order to have payload enabled, the first entry has to have a payload If the weight for an entry is not specified then a value of 1 is used A payload cannot be specified without having the weight specified for an entry If the payload for an entry is not specified (assuming payload is enabled) then an empty payload is returned An entry cannot have more than two Lucene.Net.Search.Suggest.FileDictionary.fieldDelimiter s Example: word1 word2 TAB 100 TAB payload1 word3 TAB 101 word4 word3 TAB 102 InMemorySorter An IBytesRefSorter that keeps all the entries in memory. @lucene.experimental This is a Lucene.NET INTERNAL API, use at your own risk InputIteratorWrapper Wraps a IBytesRefIterator as a suggester IInputIterator , with all weights set to 1 and carries no payload Lookup Simple Lookup interface for System.String suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lookup.LookupPriorityQueue A PriorityQueue<T> collecting a fixed size of high priority Lookup.LookupResult s. Lookup.LookupResult Result of a lookup. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedInputIterator This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedTermFreqIteratorWrapper This wrapper buffers incoming elements and makes sure they are sorted based on given comparer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk UnsortedInputIterator This wrapper buffers the incoming elements and makes sure they are in random order. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IInputIterator Interface for enumerating term,weight,payload triples for suggester consumption; currently only AnalyzingSuggester , FuzzySuggester and AnalyzingInfixSuggester support payloads."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Tst | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Tst Classes TernaryTreeNode The class creates a TST node. TSTAutocomplete Ternary Search Trie implementation. TSTLookup Suggest implementation based on a Ternary Search Tree"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTAutocomplete.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TSTAutocomplete.html",
    "title": "Class TSTAutocomplete | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TSTAutocomplete Ternary Search Trie implementation. Inheritance System.Object TSTAutocomplete Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TSTAutocomplete Methods | Improve this Doc View Source BalancedTree(Object[], Object[], Int32, Int32, TernaryTreeNode) Inserting keys in TST in the order middle,small,big (lexicographic measure) recursively creates a balanced tree which reduces insertion and search times significantly. Declaration public virtual void BalancedTree(object[] tokens, object[] vals, int lo, int hi, TernaryTreeNode root) Parameters Type Name Description System.Object [] tokens Sorted list of keys to be inserted in TST. System.Object [] vals System.Int32 lo stores the lower index of current list. System.Int32 hi stores the higher index of current list. TernaryTreeNode root a reference object to root of TST. | Improve this Doc View Source Insert(TernaryTreeNode, String, Object, Int32) Inserts a key in TST creating a series of Binary Search Trees at each node. The key is actually stored across the eqKid of each node in a successive manner. Declaration public virtual TernaryTreeNode Insert(TernaryTreeNode currentNode, string s, object val, int x) Parameters Type Name Description TernaryTreeNode currentNode a reference node where the insertion will take currently. System.String s key to be inserted in TST. System.Object val System.Int32 x index of character in key to be inserted currently. Returns Type Description TernaryTreeNode The new reference to root node of TST | Improve this Doc View Source PrefixCompletion(TernaryTreeNode, String, Int32) Auto-completes a given prefix query using Depth-First Search with the end of prefix as source node each time finding a new leaf to get a complete key to be added in the suggest list. Declaration public virtual IList<TernaryTreeNode> PrefixCompletion(TernaryTreeNode root, string s, int x) Parameters Type Name Description TernaryTreeNode root a reference to root node of TST. System.String s prefix query to be auto-completed. System.Int32 x index of current character to be searched while traversing through the prefix in TST. Returns Type Description System.Collections.Generic.IList < TernaryTreeNode > suggest list of auto-completed keys for the given prefix query. See Also TernaryTreeNode"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TernaryTreeNode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Tst.TernaryTreeNode.html",
    "title": "Class TernaryTreeNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TernaryTreeNode The class creates a TST node. Inheritance System.Object TernaryTreeNode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Tst Assembly : Lucene.Net.Suggest.dll Syntax public class TernaryTreeNode Constructors | Improve this Doc View Source TernaryTreeNode() Creates a new empty node Declaration public TernaryTreeNode()"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Lookup.html",
    "title": "Class Lookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lookup Simple Lookup interface for System.String suggestions. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lookup AnalyzingInfixSuggester AnalyzingSuggester FreeTextSuggester FSTCompletionLookup WFSTCompletionLookup JaspellLookup TSTLookup Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest Assembly : Lucene.Net.Suggest.dll Syntax public abstract class Lookup Constructors | Improve this Doc View Source Lookup() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Lookup() Fields | Improve this Doc View Source CHARSEQUENCE_COMPARER A simple char-by-char comparer for System.String Declaration public static readonly IComparer<string> CHARSEQUENCE_COMPARER Field Value Type Description System.Collections.Generic.IComparer < System.String > Properties | Improve this Doc View Source Count Get the number of entries the lookup was built with Declaration public abstract long Count { get; } Property Value Type Description System.Int64 total number of suggester entries Methods | Improve this Doc View Source Build(IDictionary) Build lookup from a dictionary. Some implementations may require sorted or unsorted keys from the dictionary's iterator - use SortedInputIterator or UnsortedInputIterator in such case. Declaration public virtual void Build(IDictionary dict) Parameters Type Name Description IDictionary dict | Improve this Doc View Source Build(IInputIterator) Builds up a new internal Lookup representation based on the given IInputIterator . The implementation might re-sort the data internally. Declaration public abstract void Build(IInputIterator inputIterator) Parameters Type Name Description IInputIterator inputIterator | Improve this Doc View Source DoLookup(String, Boolean, Int32) Look up a key and return possible completion for this key. Declaration public virtual IList<Lookup.LookupResult> DoLookup(string key, bool onlyMorePopular, int num) Parameters Type Name Description System.String key lookup key. Depending on the implementation this may be a prefix, misspelling, or even infix. System.Boolean onlyMorePopular return only more popular results System.Int32 num maximum number of results to return Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > a list of possible completions, with their relative weight (e.g. popularity) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Look up a key and return possible completion for this key. Declaration public abstract IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool onlyMorePopular, int num) Parameters Type Name Description System.String key lookup key. Depending on the implementation this may be a prefix, misspelling, or even infix. System.Collections.Generic.IEnumerable < BytesRef > contexts contexts to filter the lookup by, or null if all contexts are allowed; if the suggestion contains any of the contexts, it's a match System.Boolean onlyMorePopular return only more popular results System.Int32 num maximum number of results to return Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > a list of possible completions, with their relative weight (e.g. popularity) | Improve this Doc View Source GetSizeInBytes() Get the size of the underlying lookup implementation in memory Declaration public abstract long GetSizeInBytes() Returns Type Description System.Int64 ram size of the lookup implementation in bytes | Improve this Doc View Source Load(DataInput) Discard current lookup data and load it from a previously saved copy. Optional operation. Declaration public abstract bool Load(DataInput input) Parameters Type Name Description DataInput input the DataInput to load the lookup data. Returns Type Description System.Boolean true if completed successfully, false if unsuccessful or not supported. Exceptions Type Condition System.IO.IOException when fatal IO error occurs. | Improve this Doc View Source Load(Stream) Calls Load(DataInput) after converting System.IO.Stream to DataInput Declaration public virtual bool Load(Stream input) Parameters Type Name Description System.IO.Stream input Returns Type Description System.Boolean | Improve this Doc View Source Store(DataOutput) Persist the constructed lookup data to a directory. Optional operation. Declaration public abstract bool Store(DataOutput output) Parameters Type Name Description DataOutput output DataOutput to write the data to. Returns Type Description System.Boolean true if successful, false if unsuccessful or not supported. Exceptions Type Condition System.IO.IOException when fatal IO error occurs. | Improve this Doc View Source Store(Stream) Calls Store(DataOutput) after converting System.IO.Stream to DataOutput Declaration public virtual bool Store(Stream output) Parameters Type Name Description System.IO.Stream output Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Jaspell | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Jaspell Classes JaspellLookup Suggest implementation based on JaSpell . JaspellTernarySearchTrie Implementation of a Ternary Search Trie, a data structure for storing System.String s that combines the compact size of a binary search tree with the speed of a digital search trie, and is therefore ideal for practical use in sorting and searching data. This data structure is faster than hashing for many typical search problems, and supports a broader range of useful problems and operations. Ternary searches are faster than hashing and more powerful, too. The theory of ternary search trees was described at a symposium in 1997 (see \"Fast Algorithms for Sorting and Searching Strings,\" by J.L. Bentley and R. Sedgewick, Proceedings of the 8th Annual ACM-SIAM Symposium on Discrete Algorithms, January 1997). Algorithms in C, Third Edition, by Robert Sedgewick (Addison-Wesley, 1998) provides yet another view of ternary search trees. JaspellTernarySearchTrie.TSTNode An inner class of Ternary Search Trie that represents a node in the trie."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.html",
    "title": "Class JaspellTernarySearchTrie | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JaspellTernarySearchTrie Implementation of a Ternary Search Trie, a data structure for storing System.String s that combines the compact size of a binary search tree with the speed of a digital search trie, and is therefore ideal for practical use in sorting and searching data. This data structure is faster than hashing for many typical search problems, and supports a broader range of useful problems and operations. Ternary searches are faster than hashing and more powerful, too. The theory of ternary search trees was described at a symposium in 1997 (see \"Fast Algorithms for Sorting and Searching Strings,\" by J.L. Bentley and R. Sedgewick, Proceedings of the 8th Annual ACM-SIAM Symposium on Discrete Algorithms, January 1997). Algorithms in C, Third Edition, by Robert Sedgewick (Addison-Wesley, 1998) provides yet another view of ternary search trees. Inheritance System.Object JaspellTernarySearchTrie Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public class JaspellTernarySearchTrie Constructors | Improve this Doc View Source JaspellTernarySearchTrie() Constructs an empty Ternary Search Trie. Declaration public JaspellTernarySearchTrie() | Improve this Doc View Source JaspellTernarySearchTrie(CultureInfo) Constructs an empty Ternary Search Trie, specifying the System.Globalization.CultureInfo used for lowercasing. Declaration public JaspellTernarySearchTrie(CultureInfo culture) Parameters Type Name Description System.Globalization.CultureInfo culture | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo) Constructs a Ternary Search Trie and loads data from a System.IO.FileInfo into the Trie. The file is a normal text document, where each line is of the form word TAB float. Uses the culture of the current thread to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file) Parameters Type Name Description System.IO.FileInfo file The System.IO.FileInfo with the data to load into the Trie. Exceptions Type Condition System.IO.IOException A problem occured while reading the data. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, Boolean) Constructs a Ternary Search Trie and loads data from a System.IO.FileInfo into the Trie. The file is a normal text document, where each line is of the form \"word TAB float\". Uses the culture of the current thread to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, bool compression) Parameters Type Name Description System.IO.FileInfo file The System.IO.FileInfo with the data to load into the Trie. System.Boolean compression If true, the file is compressed with the GZIP algorithm, and if false, the file is a normal text document. Exceptions Type Condition System.IO.IOException A problem occured while reading the data. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, Boolean, CultureInfo) Constructs a Ternary Search Trie and loads data from a System.IO.FileInfo into the Trie. The file is a normal text document, where each line is of the form \"word TAB float\". Uses the supplied culture to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, bool compression, CultureInfo culture) Parameters Type Name Description System.IO.FileInfo file The System.IO.FileInfo with the data to load into the Trie. System.Boolean compression If true, the file is compressed with the GZIP algorithm, and if false, the file is a normal text document. System.Globalization.CultureInfo culture The culture used for lowercasing. Exceptions Type Condition System.IO.IOException A problem occured while reading the data. | Improve this Doc View Source JaspellTernarySearchTrie(FileInfo, CultureInfo) Constructs a Ternary Search Trie and loads data from a System.IO.FileInfo into the Trie. The file is a normal text document, where each line is of the form word TAB float. Uses the supplied culture to lowercase words before comparing. Declaration public JaspellTernarySearchTrie(FileInfo file, CultureInfo culture) Parameters Type Name Description System.IO.FileInfo file The System.IO.FileInfo with the data to load into the Trie. System.Globalization.CultureInfo culture The culture used for lowercasing. Exceptions Type Condition System.IO.IOException A problem occured while reading the data. Properties | Improve this Doc View Source MatchAlmostDiff Sets the number of characters by which words can differ from target word when calling the MatchAlmost(String, Int32) method. Arguments less than 0 will set the char difference to 0, and arguments greater than 3 will set the char difference to 3. Declaration public virtual int MatchAlmostDiff { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NumReturnValues Sets the default maximum number of values returned from the MatchPrefix(String, Int32) and MatchAlmost(String, Int32) methods. The value should be set this to -1 to get an unlimited number of return values. note that the methods mentioned above provide overloaded versions that allow you to specify the maximum number of return values, in which case this value is temporarily overridden. Declaration public virtual int NumReturnValues { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(String) Retrieve the object indexed by a key. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key A System.String index. Returns Type Description System.Object The object retrieved from the Ternary Search Trie. | Improve this Doc View Source GetAndIncrement(String) Retrieve the indexed by key, increment it by one unit and store the new . Declaration public virtual float? GetAndIncrement(string key) Parameters Type Name Description System.String key A System.String index. Returns Type Description System.Nullable < System.Single > The retrieved from the Ternary Search Trie. | Improve this Doc View Source GetKey(JaspellTernarySearchTrie.TSTNode) Returns the key that indexes the node argument. Declaration protected virtual string GetKey(JaspellTernarySearchTrie.TSTNode node) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode node The node whose index is to be calculated. Returns Type Description System.String The System.String that indexes the node argument. | Improve this Doc View Source GetNode(String) Returns the node indexed by key, or null if that node doesn't exist. Search begins at root node. Declaration public virtual JaspellTernarySearchTrie.TSTNode GetNode(string key) Parameters Type Name Description System.String key A System.String that indexes the node that is returned. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . | Improve this Doc View Source GetNode(String, JaspellTernarySearchTrie.TSTNode) Returns the node indexed by key, or null if that node doesn't exist. The search begins at root node. Declaration protected virtual JaspellTernarySearchTrie.TSTNode GetNode(string key, JaspellTernarySearchTrie.TSTNode startNode) Parameters Type Name Description System.String key A System.String that indexes the node that is returned. JaspellTernarySearchTrie.TSTNode startNode The top node defining the subtrie to be searched. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . | Improve this Doc View Source GetOrCreateNode(String) Returns the node indexed by key, creating that node if it doesn't exist, and creating any required intermediate nodes if they don't exist. Declaration protected virtual JaspellTernarySearchTrie.TSTNode GetOrCreateNode(string key) Parameters Type Name Description System.String key A System.String that indexes the node that is returned. Returns Type Description JaspellTernarySearchTrie.TSTNode The node object indexed by key. This object is an instance of an inner class named JaspellTernarySearchTrie.TSTNode . Exceptions Type Condition System.NullReferenceException If the key is null . System.ArgumentException If the key is an empty System.String . | Improve this Doc View Source GetSizeInBytes() Return an approximate memory usage for this trie. Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source MatchAlmost(String) Returns a System.Collections.Generic.IList<T> of keys that almost match the argument key. Keys returned will have exactly diff characters that do not match the target key, where diff is equal to the last value set to the MatchAlmostDiff property. If the MatchAlmost(String, Int32) method is called before the MatchAlmostDiff property has been called for the first time, then diff = 0. Declaration public virtual IList<string> MatchAlmost(string key) Parameters Type Name Description System.String key The target key. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results. | Improve this Doc View Source MatchAlmost(String, Int32) Returns a System.Collections.Generic.IList<T> of keys that almost match the argument key. Keys returned will have exactly diff characters that do not match the target key, where diff is equal to the last value set to the MatchAlmostDiff property. If the MatchAlmost(String, Int32) method is called before the MatchAlmostDiff property has been called for the first time, then diff = 0. Declaration public virtual IList<string> MatchAlmost(string key, int numReturnValues) Parameters Type Name Description System.String key The target key. System.Int32 numReturnValues The maximum number of values returned by this method. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results | Improve this Doc View Source MatchPrefix(String) Returns an alphabetical System.Collections.Generic.IList<T> of all keys in the trie that begin with a given prefix. Only keys for nodes having non-null data are included in the System.Collections.Generic.IList<T> . Declaration public virtual IList<string> MatchPrefix(string prefix) Parameters Type Name Description System.String prefix Each key returned from this method will begin with the characters in prefix. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results. | Improve this Doc View Source MatchPrefix(String, Int32) Returns an alphabetical System.Collections.Generic.IList<T> of all keys in the trie that begin with a given prefix. Only keys for nodes having non-null data are included in the System.Collections.Generic.IList<T> . Declaration public virtual IList<string> MatchPrefix(string prefix, int numReturnValues) Parameters Type Name Description System.String prefix Each key returned from this method will begin with the characters in prefix. System.Int32 numReturnValues The maximum number of values returned from this method. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results | Improve this Doc View Source NumDataNodes() Returns the number of nodes in the trie that have non-null data. Declaration public virtual int NumDataNodes() Returns Type Description System.Int32 The number of nodes in the trie that have non-null data. | Improve this Doc View Source NumDataNodes(JaspellTernarySearchTrie.TSTNode) Returns the number of nodes in the subtrie below and including the starting node. The method counts only nodes that have non-null data. Declaration protected virtual int NumDataNodes(JaspellTernarySearchTrie.TSTNode startingNode) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startingNode The top node of the subtrie. the node that defines the subtrie. Returns Type Description System.Int32 The total number of nodes in the subtrie. | Improve this Doc View Source NumNodes() Returns the total number of nodes in the trie. The method counts nodes whether or not they have data. Declaration public virtual int NumNodes() Returns Type Description System.Int32 The total number of nodes in the trie. | Improve this Doc View Source NumNodes(JaspellTernarySearchTrie.TSTNode) Returns the total number of nodes in the subtrie below and including the starting Node. The method counts nodes whether or not they have data. Declaration protected virtual int NumNodes(JaspellTernarySearchTrie.TSTNode startingNode) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startingNode The top node of the subtrie. The node that defines the subtrie. Returns Type Description System.Int32 The total number of nodes in the subtrie. | Improve this Doc View Source Put(String, Object) Stores a value in the trie. The value may be retrieved using the key. Declaration public virtual void Put(string key, object value) Parameters Type Name Description System.String key A System.String that indexes the object to be stored. System.Object value The object to be stored in the Trie. | Improve this Doc View Source Remove(String) Removes the value indexed by key. Also removes all nodes that are rendered unnecessary by the removal of this data. Declaration public virtual void Remove(string key) Parameters Type Name Description System.String key A System.String that indexes the object to be removed from the Trie. | Improve this Doc View Source SortKeys(JaspellTernarySearchTrie.TSTNode, Int32) Returns keys sorted in alphabetical order. This includes the start Node and all nodes connected to the start Node. The number of keys returned is limited to numReturnValues. To get a list that isn't limited in size, set numReturnValues to -1. Declaration protected virtual IList<string> SortKeys(JaspellTernarySearchTrie.TSTNode startNode, int numReturnValues) Parameters Type Name Description JaspellTernarySearchTrie.TSTNode startNode The top node defining the subtrie to be searched. System.Int32 numReturnValues The maximum number of values returned from this method. Returns Type Description System.Collections.Generic.IList < System.String > A System.Collections.Generic.IList<T> with the results."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.TSTNode.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Jaspell.JaspellTernarySearchTrie.TSTNode.html",
    "title": "Class JaspellTernarySearchTrie.TSTNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JaspellTernarySearchTrie.TSTNode An inner class of Ternary Search Trie that represents a node in the trie. Inheritance System.Object JaspellTernarySearchTrie.TSTNode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Jaspell Assembly : Lucene.Net.Suggest.dll Syntax public sealed class TSTNode Methods | Improve this Doc View Source GetSizeInBytes() Return an approximate memory usage for this node and its sub-nodes. Declaration public long GetSizeInBytes() Returns Type Description System.Int64"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.html",
    "title": "Namespace Lucene.Net.Search.Suggest.Fst | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Suggest.Fst Classes ExternalRefSorter Builds and iterates over sequences stored on disk. FSTCompletion Finite state automata based implementation of \"autocomplete\" functionality. FSTCompletion.Completion A single completion for a given key. FSTCompletionBuilder Finite state automata based implementation of \"autocomplete\" functionality. Implementation details The construction step in the object finalizer works as follows: A set of input terms and their buckets is given. All terms in the input are prefixed with a synthetic pseudo-character (code) of the weight bucket the term fell into. For example a term abc with a discretized weight equal '1' would become 1abc . The terms are then sorted by their raw value of UTF-8 character values (including the synthetic bucket code in front). A finite state automaton ( FST ) is constructed from the input. The root node has arcs labeled with all possible weights. We cache all these arcs, highest-weight first. At runtime, in DoLookup(String, Int32) , the automaton is utilized as follows: For each possible term weight encoded in the automaton (cached arcs from the root above), starting with the highest one, we descend along the path of the input key. If the key is not a prefix of a sequence in the automaton (path ends prematurely), we exit immediately -- no completions. Otherwise, we have found an internal automaton node that ends the key. The entire subautomaton (all paths) starting from this node form the key's completions. We start the traversal of this subautomaton. Every time we reach a final state (arc), we add a single suggestion to the list of results (the weight of this suggestion is constant and equal to the root path we started from). The tricky part is that because automaton edges are sorted and we scan depth-first, we can terminate the entire procedure as soon as we collect enough suggestions the user requested. In case the number of suggestions collected in the step above is still insufficient, we proceed to the next (smaller) weight leaving the root node and repeat the same algorithm again. Runtime behavior and performance characteristic The algorithm described above is optimized for finding suggestions to short prefixes in a top-weights-first order. This is probably the most common use case: it allows presenting suggestions early and sorts them by the global frequency (and then alphabetically). If there is an exact match in the automaton, it is returned first on the results list (even with by-weight sorting). Note that the maximum lookup time for any prefix is the time of descending to the subtree, plus traversal of the subtree up to the number of requested suggestions (because they are already presorted by weight on the root level and alphabetically at any node level). To order alphabetically only (no ordering by priorities), use identical term weights for all terms. Alphabetical suggestions are returned even if non-constant weights are used, but the algorithm for doing this is suboptimal. \"alphabetically\" in any of the documentation above indicates UTF-8 representation order, nothing else. NOTE : the FST file format is experimental and subject to suddenly change, requiring you to rebuild the FST suggest index. FSTCompletionLookup An adapter from Lookup API to FSTCompletion . This adapter differs from FSTCompletion in that it attempts to discretize any \"weights\" as passed from in Weight to match the number of buckets. For the rationale for bucketing, see FSTCompletion . Note: Discretization requires an additional sorting pass. The range of weights for bucketing/ discretization is determined by sorting the input by weight and then dividing into equal ranges. Then, scores within each range are assigned to that bucket. Note that this means that even large differences in weights may be lost during automaton construction, but the overall distinction between \"classes\" of weights will be preserved regardless of the distribution of weights. For fine-grained control over which weights are assigned to which buckets, use FSTCompletion directly or TSTLookup , for example. WFSTCompletionLookup Suggester based on a weighted FST: it first traverses the prefix, then walks the n shortest paths to retrieve top-ranked suggestions. NOTE : Input weights must be between 0 and System.Int32.MaxValue , any other values will be rejected. @lucene.experimental Interfaces IBytesRefSorter Collects BytesRef and then allows one to iterate over their sorted order. Implementations of this interface will be called in a single-threaded scenario."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.IBytesRefSorter.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.IBytesRefSorter.html",
    "title": "Interface IBytesRefSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IBytesRefSorter Collects BytesRef and then allows one to iterate over their sorted order. Implementations of this interface will be called in a single-threaded scenario. Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public interface IBytesRefSorter Properties | Improve this Doc View Source Comparer Comparer used to determine the sort order of entries. Declaration IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Add(BytesRef) Adds a single suggestion entry (possibly compound with its bucket). Declaration void Add(BytesRef utf8) Parameters Type Name Description BytesRef utf8 Exceptions Type Condition System.IO.IOException If an I/O exception occurs. System.InvalidOperationException If an addition attempt is performed after a call to GetIterator() has been made. | Improve this Doc View Source GetIterator() Sorts the entries added in Add(BytesRef) and returns an enumerator over all sorted entries. Declaration IBytesRefIterator GetIterator() Returns Type Description IBytesRefIterator Exceptions Type Condition System.IO.IOException If an I/O exception occurs."
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionBuilder.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionBuilder.html",
    "title": "Class FSTCompletionBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTCompletionBuilder Finite state automata based implementation of \"autocomplete\" functionality. Implementation details The construction step in the object finalizer works as follows: A set of input terms and their buckets is given. All terms in the input are prefixed with a synthetic pseudo-character (code) of the weight bucket the term fell into. For example a term abc with a discretized weight equal '1' would become 1abc . The terms are then sorted by their raw value of UTF-8 character values (including the synthetic bucket code in front). A finite state automaton ( FST ) is constructed from the input. The root node has arcs labeled with all possible weights. We cache all these arcs, highest-weight first. At runtime, in DoLookup(String, Int32) , the automaton is utilized as follows: For each possible term weight encoded in the automaton (cached arcs from the root above), starting with the highest one, we descend along the path of the input key. If the key is not a prefix of a sequence in the automaton (path ends prematurely), we exit immediately -- no completions. Otherwise, we have found an internal automaton node that ends the key. The entire subautomaton (all paths) starting from this node form the key's completions. We start the traversal of this subautomaton. Every time we reach a final state (arc), we add a single suggestion to the list of results (the weight of this suggestion is constant and equal to the root path we started from). The tricky part is that because automaton edges are sorted and we scan depth-first, we can terminate the entire procedure as soon as we collect enough suggestions the user requested. In case the number of suggestions collected in the step above is still insufficient, we proceed to the next (smaller) weight leaving the root node and repeat the same algorithm again. Runtime behavior and performance characteristic The algorithm described above is optimized for finding suggestions to short prefixes in a top-weights-first order. This is probably the most common use case: it allows presenting suggestions early and sorts them by the global frequency (and then alphabetically). If there is an exact match in the automaton, it is returned first on the results list (even with by-weight sorting). Note that the maximum lookup time for any prefix is the time of descending to the subtree, plus traversal of the subtree up to the number of requested suggestions (because they are already presorted by weight on the root level and alphabetically at any node level). To order alphabetically only (no ordering by priorities), use identical term weights for all terms. Alphabetical suggestions are returned even if non-constant weights are used, but the algorithm for doing this is suboptimal. \"alphabetically\" in any of the documentation above indicates UTF-8 representation order, nothing else. NOTE : the FST file format is experimental and subject to suddenly change, requiring you to rebuild the FST suggest index. Inheritance System.Object FSTCompletionBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletionBuilder Constructors | Improve this Doc View Source FSTCompletionBuilder() Creates an FSTCompletion with default options: 10 buckets, exact match promoted to first position and InMemorySorter with a comparer obtained from UTF8SortedAsUnicodeComparer . Declaration public FSTCompletionBuilder() | Improve this Doc View Source FSTCompletionBuilder(Int32, IBytesRefSorter, Int32) Creates an FSTCompletion with the specified options. Declaration public FSTCompletionBuilder(int buckets, IBytesRefSorter sorter, int shareMaxTailLength) Parameters Type Name Description System.Int32 buckets The number of buckets for weight discretization. Buckets are used in Add(BytesRef, Int32) and must be smaller than the number given here. IBytesRefSorter sorter IBytesRefSorter used for re-sorting input for the automaton. For large inputs, use on-disk sorting implementations. The sorter is closed automatically in Build() if it implements System.IDisposable . System.Int32 shareMaxTailLength Max shared suffix sharing length. See the description of this parameter in Builder 's constructor. In general, for very large inputs you'll want to construct a non-minimal automaton which will be larger, but the construction will take far less ram. For minimal automata, set it to System.Int32.MaxValue . Fields | Improve this Doc View Source DEFAULT_BUCKETS Default number of buckets. Declaration public const int DEFAULT_BUCKETS = 10 Field Value Type Description System.Int32 Methods | Improve this Doc View Source Add(BytesRef, Int32) Appends a single suggestion and its weight to the internal buffers. Declaration public virtual void Add(BytesRef utf8, int bucket) Parameters Type Name Description BytesRef utf8 The suggestion (utf8 representation) to be added. The content is copied and the object can be reused. System.Int32 bucket The bucket to place this suggestion in. Must be non-negative and smaller than the number of buckets passed in the constructor. Higher numbers indicate suggestions that should be presented before suggestions placed in smaller buckets. | Improve this Doc View Source Build() Builds the final automaton from a list of added entries. This method may take a longer while as it needs to build the automaton. Declaration public virtual FSTCompletion Build() Returns Type Description FSTCompletion See Also FSTCompletion"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletion.html",
    "title": "Class FSTCompletion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTCompletion Finite state automata based implementation of \"autocomplete\" functionality. Inheritance System.Object FSTCompletion Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletion Constructors | Improve this Doc View Source FSTCompletion(FST<Object>) Defaults to higher weights first and exact first. Declaration public FSTCompletion(FST<object> automaton) Parameters Type Name Description FST < System.Object > automaton See Also FSTCompletion(FST<Object>, Boolean, Boolean) | Improve this Doc View Source FSTCompletion(FST<Object>, Boolean, Boolean) Constructs an FSTCompletion, specifying higherWeightsFirst and exactFirst. Declaration public FSTCompletion(FST<object> automaton, bool higherWeightsFirst, bool exactFirst) Parameters Type Name Description FST < System.Object > automaton Automaton with completions. See FSTCompletionBuilder . System.Boolean higherWeightsFirst Return most popular suggestions first. This is the default behavior for this implementation. Setting it to false has no effect (use constant term weights to sort alphabetically only). System.Boolean exactFirst Find and push an exact match to the first position of the result list if found. Fields | Improve this Doc View Source DEFAULT_BUCKETS Default number of buckets. Declaration public const int DEFAULT_BUCKETS = 10 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BucketCount Returns the bucket count (discretization thresholds). Declaration public virtual int BucketCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source FST Returns the internal automaton. Declaration public virtual FST<object> FST { get; } Property Value Type Description FST < System.Object > Methods | Improve this Doc View Source DoLookup(String, Int32) Lookup suggestions to key . Declaration public virtual IList<FSTCompletion.Completion> DoLookup(string key, int num) Parameters Type Name Description System.String key The prefix to which suggestions should be sought. System.Int32 num At most this number of suggestions will be returned. Returns Type Description System.Collections.Generic.IList < FSTCompletion.Completion > Returns the suggestions, sorted by their approximated weight first (decreasing) and then alphabetically (UTF-8 codepoint order). | Improve this Doc View Source GetBucket(String) Returns the bucket assigned to a given key (if found) or -1 if no exact match exists. Declaration public virtual int GetBucket(string key) Parameters Type Name Description System.String key Returns Type Description System.Int32 See Also FSTCompletionBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html",
    "title": "Interface IQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryNodeProcessor An IQueryNodeProcessor is an interface for classes that process a IQueryNode tree. The implementor of this class should perform some operation on a query node tree and return the same or another query node tree. It also may carry a QueryConfigHandler object that contains configuration about the query represented by the query tree or the collection/index where it's intended to be executed. In case there is any QueryConfigHandler associated to the query tree to be processed, it should be set using SetQueryConfigHandler(QueryConfigHandler) before Process(IQueryNode) is invoked. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryNodeProcessor Methods | Improve this Doc View Source GetQueryConfigHandler() Returns the QueryConfigHandler associated to the query tree if any, otherwise it returns null Declaration QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler the QueryConfigHandler associated to the query tree if any, otherwise it returns null | Improve this Doc View Source Process(IQueryNode) Processes a query node tree. It may return the same or another query tree. I should never return null . Declaration IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree tree root node Returns Type Description IQueryNode the processed query tree | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Sets the QueryConfigHandler associated to the query tree. Declaration void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler See Also IQueryNode IQueryNodeProcessor QueryConfigHandler"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Parser Interfaces IEscapeQuerySyntax A parser needs to implement IEscapeQuerySyntax to allow the IQueryNode to escape the queries, when the ToQueryString method is called. ISyntaxParser A parser needs to implement ISyntaxParser interface Enums EscapeQuerySyntaxType Type of escaping: String for escaping syntax, NORMAL for escaping reserved words (like AND) in terms"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.ISyntaxParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.ISyntaxParser.html",
    "title": "Interface ISyntaxParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISyntaxParser A parser needs to implement ISyntaxParser interface Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ISyntaxParser Methods | Improve this Doc View Source Parse(String, String) Declaration IQueryNode Parse(string query, string field) Parameters Type Name Description System.String query query data to be parsed System.String field default field name Returns Type Description IQueryNode QueryNode tree"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.IEscapeQuerySyntax.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.IEscapeQuerySyntax.html",
    "title": "Interface IEscapeQuerySyntax | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IEscapeQuerySyntax A parser needs to implement IEscapeQuerySyntax to allow the IQueryNode to escape the queries, when the ToQueryString method is called. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface IEscapeQuerySyntax Methods | Improve this Doc View Source Escape(ICharSequence, CultureInfo, EscapeQuerySyntaxType) Declaration ICharSequence Escape(ICharSequence text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description ICharSequence text text to be escaped System.Globalization.CultureInfo locale locale for the current query EscapeQuerySyntaxType type select the type of escape operation to use Returns Type Description ICharSequence escaped text | Improve this Doc View Source Escape(String, CultureInfo, EscapeQuerySyntaxType) Declaration string Escape(string text, CultureInfo locale, EscapeQuerySyntaxType type) Parameters Type Name Description System.String text text to be escaped System.Globalization.CultureInfo locale locale for the current query EscapeQuerySyntaxType type select the type of escape operation to use Returns Type Description System.String escaped text"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.EscapeQuerySyntaxType.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Parser.EscapeQuerySyntaxType.html",
    "title": "Enum EscapeQuerySyntaxType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum EscapeQuerySyntaxType Type of escaping: String for escaping syntax, NORMAL for escaping reserved words (like AND) in terms Namespace : Lucene.Net.QueryParsers.Flexible.Core.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public enum EscapeQuerySyntaxType Remarks Renamed from Type in Lucene to prevent collisions with System.Type. Fields Name Description NORMAL STRING"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Nodes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Core.Nodes Classes AndQueryNode A AndQueryNode represents an AND boolean operation performed on a list of nodes. AnyQueryNode A AnyQueryNode represents an ANY operator performed on a list of nodes. BooleanQueryNode A BooleanQueryNode represents a list of elements which do not have an explicit boolean operator defined between them. It can be used to express a boolean query that intends to use the default boolean operator. BoostQueryNode A BoostQueryNode boosts the QueryNode tree which is under this node. So, it must only and always have one child. The boost value may vary from 0.0 to 1.0. DeletedQueryNode A DeletedQueryNode represents a node that was deleted from the query node tree. It can be removed from the tree using the RemoveDeletedQueryNodesProcessor processor. FieldQueryNode A FieldQueryNode represents a element that contains field/text tuple FuzzyQueryNode A FuzzyQueryNode represents a element that contains field/text/similarity tuple GroupQueryNode A GroupQueryNode represents a location where the original user typed real parenthesis on the query string. This class is useful for queries like: a) a AND b OR c b) ( a AND b) OR c Parenthesis might be used to define the boolean operation precedence. MatchAllDocsQueryNode A MatchAllDocsQueryNode indicates that a query node tree or subtree will match all documents if executed in the index. MatchNoDocsQueryNode A MatchNoDocsQueryNode indicates that a query node tree or subtree will not match any documents if executed in the index. ModifierExtensions ModifierQueryNode A ModifierQueryNode indicates the modifier value (+,-,?,NONE) for each term on the query string. For example \"+t1 -t2 t3\" will have a tree of: <BooleanQueryNode> <ModifierQueryNode modifier=\"MOD_REQ\"> <t1/> </ModifierQueryNode> <ModifierQueryNode modifier=\"MOD_NOT\"> <t2/> </ModifierQueryNode> <t3/> </BooleanQueryNode> NoTokenFoundQueryNode A NoTokenFoundQueryNode is used if a term is convert into no tokens by the tokenizer/lemmatizer/analyzer (null). OpaqueQueryNode A OpaqueQueryNode is used for specify values that are not supposed to be parsed by the parser. For example: and XPATH query in the middle of a query string a b @xpath:&apos;/bookstore/book[1]/title&apos; c d OrQueryNode A OrQueryNode represents an OR boolean operation performed on a list of nodes. PathQueryNode A PathQueryNode is used to store queries like /company/USA/California /product/shoes/brown. QueryText are objects that contain the text, begin position and end position in the query. Example how the text parser creates these objects: IList<PathQueryNode.QueryText> values = new List<PathQueryNode.QueryText>(); values.Add(new PathQueryNode.QueryText(\"company\", 1, 7)); values.Add(new PathQueryNode.QueryText(\"USA\", 9, 12)); values.Add(new PathQueryNode.QueryText(\"California\", 14, 23)); QueryNode q = new PathQueryNode(values); PathQueryNode.QueryText Term text with a beginning and end position PhraseSlopQueryNode Query node for PhraseQuery 's slop factor. ProximityQueryNode A ProximityQueryNode represents a query where the terms should meet specific distance conditions. (a b c) WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] (\"a\" \"b\" \"c\") WITHIN [SENTENCE|PARAGRAPH|NUMBER] [INORDER] TODO: Add this to the future standard Lucene parser/processor/builder ProximityQueryNode_TypeExtensions ProximityType utility class containing the distance condition and number QueryNode A QueryNode is the default implementation of the interface IQueryNode QuotedFieldQueryNode A QuotedFieldQueryNode represents phrase query. Example: \"life is great\" SlopQueryNode A SlopQueryNode represents phrase query with a slop. From Lucene FAQ: Is there a way to use a proximity operator (like near or within) with Lucene? There is a variable called slop that allows you to perform NEAR/WITHIN-like queries. By default, slop is set to 0 so that only exact phrases will match. When using TextParser you can use this syntax to specify the slop: \"doug cutting\"~2 will find documents that contain \"doug cutting\" as well as ones that contain \"cutting doug\". TokenizedPhraseQueryNode A TokenizedPhraseQueryNode represents a node created by a code that tokenizes/lemmatizes/analyzes. Interfaces IFieldableNode A query node implements IFieldableNode interface to indicate that its children and itself are associated to a specific field. If it has any children which also implements this interface, it must ensure the children are associated to the same field. IFieldValuePairQueryNode<T> This interface should be implemented by IQueryNode that holds a field and an arbitrary value. IQueryNode A IQueryNode is a interface implemented by all nodes on a IQueryNode tree. IRangeQueryNode LUCENENET specific interface for identifying a RangeQueryNode without specifying its generic closing type IRangeQueryNode<T> This interface should be implemented by an IQueryNode that represents some kind of range query. ITextableQueryNode Interface for a node that has text as a ICharSequence IValueQueryNode<T> This interface should be implemented by IQueryNode that holds an arbitrary value. Enums Modifier Modifier type: such as required (REQ), prohibited (NOT) ProximityQueryNode.Type Distance condition: PARAGRAPH, SENTENCE, or NUMBER"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityType.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityType.html",
    "title": "Class ProximityType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ProximityType utility class containing the distance condition and number Inheritance System.Object ProximityType Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class ProximityType Constructors | Improve this Doc View Source ProximityType(ProximityQueryNode.Type) Declaration public ProximityType(ProximityQueryNode.Type type) Parameters Type Name Description ProximityQueryNode.Type type | Improve this Doc View Source ProximityType(ProximityQueryNode.Type, Int32) Declaration public ProximityType(ProximityQueryNode.Type type, int distance) Parameters Type Name Description ProximityQueryNode.Type type System.Int32 distance"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode_TypeExtensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode_TypeExtensions.html",
    "title": "Class ProximityQueryNode_TypeExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ProximityQueryNode_TypeExtensions Inheritance System.Object ProximityQueryNode_TypeExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public static class ProximityQueryNode_TypeExtensions Methods | Improve this Doc View Source ToQueryString(ProximityQueryNode.Type) Declaration public static string ToQueryString(this ProximityQueryNode.Type type) Parameters Type Name Description ProximityQueryNode.Type type Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.Type.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ProximityQueryNode.Type.html",
    "title": "Enum ProximityQueryNode.Type | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum ProximityQueryNode.Type Distance condition: PARAGRAPH, SENTENCE, or NUMBER Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public enum Type Fields Name Description NUMBER PARAGRAPH SENTENCE Extension Methods ProximityQueryNode_TypeExtensions.ToQueryString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.QueryText.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.PathQueryNode.QueryText.html",
    "title": "Class PathQueryNode.QueryText | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PathQueryNode.QueryText Term text with a beginning and end position Inheritance System.Object PathQueryNode.QueryText Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryText Constructors | Improve this Doc View Source QueryText(String, Int32, Int32) Declaration public QueryText(string value, int begin, int end) Parameters Type Name Description System.String value text value System.Int32 begin position in the query string System.Int32 end position in the query string Properties | Improve this Doc View Source Begin Gets the begin Declaration public virtual int Begin { get; } Property Value Type Description System.Int32 | Improve this Doc View Source End Gets the end Declaration public virtual int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Gets the value Declaration public virtual string Value { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierExtensions.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ModifierExtensions.html",
    "title": "Class ModifierExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ModifierExtensions Inheritance System.Object ModifierExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public static class ModifierExtensions Methods | Improve this Doc View Source ToDigitString(Modifier) Declaration public static string ToDigitString(this Modifier modifier) Parameters Type Name Description Modifier modifier Returns Type Description System.String | Improve this Doc View Source ToLargeString(Modifier) Declaration public static string ToLargeString(this Modifier modifier) Parameters Type Name Description Modifier modifier Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.Modifier.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.Modifier.html",
    "title": "Enum Modifier | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Modifier Modifier type: such as required (REQ), prohibited (NOT) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public enum Modifier Fields Name Description MOD_NONE MOD_NOT MOD_REQ Extension Methods ModifierExtensions.ToDigitString() ModifierExtensions.ToLargeString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ITextableQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.ITextableQueryNode.html",
    "title": "Interface ITextableQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITextableQueryNode Interface for a node that has text as a ICharSequence Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface ITextableQueryNode Properties | Improve this Doc View Source Text Declaration ICharSequence Text { get; set; } Property Value Type Description ICharSequence"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IRangeQueryNode.html",
    "title": "Interface IRangeQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IRangeQueryNode LUCENENET specific interface for identifying a RangeQueryNode without specifying its generic closing type Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IRangeQueryNode Properties | Improve this Doc View Source IsLowerInclusive Declaration bool IsLowerInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsUpperInclusive Declaration bool IsUpperInclusive { get; } Property Value Type Description System.Boolean"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html",
    "title": "Interface IQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryNode A IQueryNode is a interface implemented by all nodes on a IQueryNode tree. Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryNode Properties | Improve this Doc View Source IsLeaf verify if a node is a Leaf node Declaration bool IsLeaf { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Parent Declaration IQueryNode Parent { get; } Property Value Type Description IQueryNode | Improve this Doc View Source TagMap Gets a map containing all tags attached to this query node. Declaration IDictionary<string, object> TagMap { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Object > Methods | Improve this Doc View Source Add(IQueryNode) add a new child to a non Leaf node Declaration void Add(IQueryNode child) Parameters Type Name Description IQueryNode child | Improve this Doc View Source Add(IList<IQueryNode>) Declaration void Add(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children | Improve this Doc View Source CloneTree() Recursive clone the IQueryNode tree. The tags are not copied to the new tree when you call the CloneTree() method. Declaration IQueryNode CloneTree() Returns Type Description IQueryNode the cloned tree | Improve this Doc View Source ContainsTag(String) verify if a node contains a tag Declaration bool ContainsTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Boolean | Improve this Doc View Source GetChildren() get Children nodes Declaration IList<IQueryNode> GetChildren() Returns Type Description System.Collections.Generic.IList < IQueryNode > | Improve this Doc View Source GetTag(String) Returns object stored under that tag name Declaration object GetTag(string tagName) Parameters Type Name Description System.String tagName Returns Type Description System.Object | Improve this Doc View Source RemoveFromParent() Removes this query node from its parent. Declaration void RemoveFromParent() | Improve this Doc View Source Set(IList<IQueryNode>) reset the children of a node Declaration void Set(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children | Improve this Doc View Source SetTag(String, Object) Associate the specified value with the specified tagName . If the tagName already exists, the old value is replaced. The tagName and value cannot be null. tagName will be converted to lowercase. Declaration void SetTag(string tagName, object value) Parameters Type Name Description System.String tagName System.Object value | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) convert to a query string understood by the query parser Declaration string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String | Improve this Doc View Source ToString() for printing Declaration string ToString() Returns Type Description System.String | Improve this Doc View Source UnsetTag(String) Unset a tag. tagName will be converted to lowercase. Declaration void UnsetTag(string tagName) Parameters Type Name Description System.String tagName"
  },
  "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Bindings.html": {
    "href": "api/Lucene.Net.Expressions/Lucene.Net.Expressions.Bindings.html",
    "title": "Class Bindings | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Bindings Binds variable names in expressions to actual data. Inheritance System.Object Bindings SimpleBindings Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Expressions Assembly : Lucene.Net.Expressions.dll Syntax public abstract class Bindings Remarks Binds variable names in expressions to actual data. These are typically DocValues fields/FieldCache, the document's relevance score, or other ValueSource s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source Bindings() Sole constructor. Declaration public Bindings() Remarks Sole constructor. (For invocation by subclass constructors, typically implicit.) Methods | Improve this Doc View Source GetScoreValueSource() Returns a ValueSource over relevance scores Declaration protected ValueSource GetScoreValueSource() Returns Type Description ValueSource | Improve this Doc View Source GetValueSource(String) Returns a ValueSource bound to the variable name. Declaration public abstract ValueSource GetValueSource(string name) Parameters Type Name Description System.String name Returns Type Description ValueSource"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.SearchFiles.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.SearchFiles.html",
    "title": "Class SearchFiles | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchFiles Simple command-line based search demo. Inheritance System.Object SearchFiles Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo Assembly : Lucene.Net.Demo.dll Syntax public class SearchFiles Methods | Improve this Doc View Source DoPagingSearch(IndexSearcher, Query, Int32, Boolean, Boolean) This demonstrates a typical paging search scenario, where the search engine presents pages of size n to the user. The user can then go to the next page if interested in the next hits. When the query is executed for the first time, then only enough results are collected to fill 5 result pages. If the user wants to page beyond this limit, then the query is executed another time and all hits are collected. Declaration public static void DoPagingSearch(IndexSearcher searcher, Query query, int hitsPerPage, bool raw, bool interactive) Parameters Type Name Description IndexSearcher searcher Query query System.Int32 hitsPerPage System.Boolean raw System.Boolean interactive | Improve this Doc View Source Main(String[]) Simple command-line based search demo. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.IndexFiles.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.IndexFiles.html",
    "title": "Class IndexFiles | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexFiles Index all text files under a directory. This is a command-line application demonstrating simple Lucene indexing. Run it with no command-line arguments for usage information. Inheritance System.Object IndexFiles Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo Assembly : Lucene.Net.Demo.dll Syntax public class IndexFiles Methods | Improve this Doc View Source Main(String[]) Index all text files under a directory. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.html",
    "title": "Namespace Lucene.Net.Demo.Facet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Demo.Facet Classes AssociationsFacetsExample Shows example usage of category associations. DistanceFacetsExample Shows simple usage of dynamic range faceting, using the expressions module to calculate distance. ExpressionAggregationFacetsExample Shows facets aggregation by an expression. MultiCategoryListsFacetsExample Demonstrates indexing categories into different indexed fields. RangeFacetsExample Shows simple usage of dynamic range faceting. SimpleFacetsExample Shows simple usage of faceted indexing and search. SimpleSortedSetFacetsExample Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts ."
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleSortedSetFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleSortedSetFacetsExample.html",
    "title": "Class SimpleSortedSetFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleSortedSetFacetsExample Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts . Inheritance System.Object SimpleSortedSetFacetsExample Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class SimpleSortedSetFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.SortedSet; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of faceted indexing and search /// using <see cref=\"SortedSetDocValuesFacetField\"/> and /// <see cref=\"SortedSetDocValuesFacetCounts\"/>. /// </summary> public class SimpleSortedSetFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) { Document doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Bob\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2010\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Lisa\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2010\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Lisa\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2012\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Susan\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"2012\")); indexWriter.AddDocument(config.Build(doc)); doc = new Document(); doc.Add(new SortedSetDocValuesFacetField(\"Author\", \"Frank\")); doc.Add(new SortedSetDocValuesFacetField(\"Publish Year\", \"1999\")); indexWriter.AddDocument(config.Build(doc)); } // Disposes indexWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> Search() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); SortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader); // Aggregatses the facet counts FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); IList<FacetResult> results = new List<FacetResult>(); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Year\")); return results; } // Disposes indexWriter } /// <summary>User drills down on 'Publish Year/2010'.</summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); SortedSetDocValuesReaderState state = new DefaultSortedSetDocValuesReaderState(indexReader); // Now user drills down on Publish Year/2010: DrillDownQuery q = new DrillDownQuery(config); q.Add(\"Publish Year\", \"2010\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); FacetResult result = facets.GetTopChildren(10, \"Author\"); return result; } // Disposes indexReader } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return Search(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); SimpleSortedSetFacetsExample example = new SimpleSortedSetFacetsExample(); IList<FacetResult> results = example.RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Year: \" + results[0]); Console.WriteLine(); Console.WriteLine(\"Facet drill-down example (Publish Year/2010):\"); Console.WriteLine(\"---------------------------------------------\"); Console.WriteLine(\"Author: \" + example.RunDrillDown()); } } } Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description System.Collections.Generic.IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.SimpleFacetsExample.html",
    "title": "Class SimpleFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleFacetsExample Shows simple usage of faceted indexing and search. Inheritance System.Object SimpleFacetsExample Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class SimpleFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows simple usage of faceted indexing and search. /// </summary> public class SimpleFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Constructor</summary> public SimpleFacetsExample() { config.SetHierarchical(\"Publish Date\", true); } /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new FacetField(\"Author\", \"Bob\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"15\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"20\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"1\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Susan\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"7\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Frank\")); doc.Add(new FacetField(\"Publish Date\", \"1999\", \"5\", \"5\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> FacetsWithSearch() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); // Count both \"Publish Date\" and \"Author\" dimensions Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Date\")); return results; } // Disposes indexReader and taxoReader } /// <summary>User runs a query and counts facets only without collecting the matching documents.</summary> private IList<FacetResult> FacetsOnly() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: searcher.Search(new MatchAllDocsQuery(), null /*Filter */, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); // Count both \"Publish Date\" and \"Author\" dimensions Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); results.Add(facets.GetTopChildren(10, \"Author\")); results.Add(facets.GetTopChildren(10, \"Publish Date\")); return results; } // Disposes indexReader and taxoReader } /// <summary> /// User drills down on 'Publish Date/2010', and we /// return facets for 'Author' /// </summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"Publish Date\", \"2010\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); FacetResult result = facets.GetTopChildren(10, \"Author\"); return result; } // Disposes indexReader and taxoReader } /// <summary> /// User drills down on 'Publish Date/2010', and we /// return facets for both 'Publish Date' and 'Author', /// using DrillSideways. /// </summary> private IList<FacetResult> DrillSideways() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"Publish Date\", \"2010\"); DrillSideways ds = new DrillSideways(searcher, config, taxoReader); DrillSidewaysResult result = ds.Search(q, 10); // Retrieve results IList<FacetResult> facets = result.Facets.GetAllDims(10); return facets; } // Disposes indexReader and taxoReader } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunFacetOnly() { Index(); return FacetsOnly(); } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return FacetsWithSearch(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the drill-sideways example.</summary> public IList<FacetResult> RunDrillSideways() { Index(); return DrillSideways(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); SimpleFacetsExample example1 = new SimpleFacetsExample(); IList<FacetResult> results1 = example1.RunFacetOnly(); Console.WriteLine(\"Author: \" + results1[0]); Console.WriteLine(\"Publish Date: \" + results1[1]); Console.WriteLine(\"Facet counting example (combined facets and search):\"); Console.WriteLine(\"-----------------------\"); SimpleFacetsExample example = new SimpleFacetsExample(); IList<FacetResult> results = example.RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Date: \" + results[1]); Console.WriteLine(); Console.WriteLine(\"Facet drill-down example (Publish Date/2010):\"); Console.WriteLine(\"---------------------------------------------\"); Console.WriteLine(\"Author: \" + example.RunDrillDown()); Console.WriteLine(); Console.WriteLine(\"Facet drill-sideways example (Publish Date/2010):\"); Console.WriteLine(\"---------------------------------------------\"); foreach (FacetResult result in example.RunDrillSideways()) { Console.WriteLine(result); } } } } Constructors | Improve this Doc View Source SimpleFacetsExample() Constructor Declaration public SimpleFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunDrillSideways() Runs the drill-sideways example. Declaration public IList<FacetResult> RunDrillSideways() Returns Type Description System.Collections.Generic.IList < FacetResult > | Improve this Doc View Source RunFacetOnly() Runs the search example. Declaration public IList<FacetResult> RunFacetOnly() Returns Type Description System.Collections.Generic.IList < FacetResult > | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description System.Collections.Generic.IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.html",
    "title": "Class MultiCategoryListsFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiCategoryListsFacetsExample Demonstrates indexing categories into different indexed fields. Inheritance System.Object MultiCategoryListsFacetsExample Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class MultiCategoryListsFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Demonstrates indexing categories into different indexed fields. /// </summary> public class MultiCategoryListsFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Creates a new instance and populates the catetory list params mapping.</summary> public MultiCategoryListsFacetsExample() { config.SetIndexFieldName(\"Author\", \"author\"); config.SetIndexFieldName(\"Publish Date\", \"pubdate\"); config.SetHierarchical(\"Publish Date\", true); } /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new FacetField(\"Author\", \"Bob\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"15\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2010\", \"10\", \"20\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Lisa\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"1\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Susan\")); doc.Add(new FacetField(\"Publish Date\", \"2012\", \"1\", \"7\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new FacetField(\"Author\", \"Frank\")); doc.Add(new FacetField(\"Publish Date\", \"1999\", \"5\", \"5\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and counts facets.</summary> private IList<FacetResult> Search() { IList<FacetResult> results = new List<FacetResult>(); using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results // Count both \"Publish Date\" and \"Author\" dimensions Facets author = new FastTaxonomyFacetCounts(\"author\", taxoReader, config, fc); results.Add(author.GetTopChildren(10, \"Author\")); Facets pubDate = new FastTaxonomyFacetCounts(\"pubdate\", taxoReader, config, fc); results.Add(pubDate.GetTopChildren(10, \"Publish Date\")); } // Disposes indexReader and taxoReader return results; } /// <summary>Runs the search example.</summary> public IList<FacetResult> RunSearch() { Index(); return Search(); } /// <summary>Runs the search example and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting over multiple category lists example:\"); Console.WriteLine(\"-----------------------\"); IList<FacetResult> results = new MultiCategoryListsFacetsExample().RunSearch(); Console.WriteLine(\"Author: \" + results[0]); Console.WriteLine(\"Publish Date: \" + results[1]); } } } Constructors | Improve this Doc View Source MultiCategoryListsFacetsExample() Creates a new instance and populates the catetory list params mapping. Declaration public MultiCategoryListsFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the search example and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunSearch() Runs the search example. Declaration public IList<FacetResult> RunSearch() Returns Type Description System.Collections.Generic.IList < FacetResult >"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.ExpressionAggregationFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.ExpressionAggregationFacetsExample.html",
    "title": "Class ExpressionAggregationFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExpressionAggregationFacetsExample Shows facets aggregation by an expression. Inheritance System.Object ExpressionAggregationFacetsExample Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class ExpressionAggregationFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Expressions; using Lucene.Net.Expressions.JS; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows facets aggregation by an expression. /// </summary> public class ExpressionAggregationFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config = new FacetsConfig(); /// <summary>Build the example index.</summary> private void Index() { using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)))) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); doc.Add(new TextField(\"c\", \"foo bar\", Field.Store.NO)); doc.Add(new NumericDocValuesField(\"popularity\", 5L)); doc.Add(new FacetField(\"A\", \"B\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); doc.Add(new TextField(\"c\", \"foo foo bar\", Field.Store.NO)); doc.Add(new NumericDocValuesField(\"popularity\", 3L)); doc.Add(new FacetField(\"A\", \"C\")); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and aggregates facets.</summary> private FacetResult Search() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Aggregate categories by an expression that combines the document's score // and its popularity field Expression expr = JavascriptCompiler.Compile(\"_score * sqrt(popularity)\"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField(\"_score\", SortFieldType.SCORE)); // the score of the document bindings.Add(new SortField(\"popularity\", SortFieldType.INT64)); // the value of the 'popularity' field // Aggregates the facet values FacetsCollector fc = new FacetsCollector(true); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); // Retrieve results Facets facets = new TaxonomyFacetSumValueSource(taxoReader, config, fc, expr.GetValueSource(bindings)); FacetResult result = facets.GetTopChildren(10, \"A\"); return result; } // Disposes indexReader and taxoReader } /// <summary>Runs the search example.</summary> public FacetResult RunSearch() { Index(); return Search(); } /// <summary>Runs the search and drill-down examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Facet counting example:\"); Console.WriteLine(\"-----------------------\"); FacetResult result = new ExpressionAggregationFacetsExample().RunSearch(); Console.WriteLine(result); } } } Methods | Improve this Doc View Source Main(String[]) Runs the search and drill-down examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunSearch() Runs the search example. Declaration public FacetResult RunSearch() Returns Type Description FacetResult"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.AssociationsFacetsExample.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.Facet.AssociationsFacetsExample.html",
    "title": "Class AssociationsFacetsExample | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssociationsFacetsExample Shows example usage of category associations. Inheritance System.Object AssociationsFacetsExample Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Demo.Facet Assembly : Lucene.Net.Demo.dll Syntax public class AssociationsFacetsExample Examples using Lucene.Net.Analysis.Core; using Lucene.Net.Documents; using Lucene.Net.Facet; using Lucene.Net.Facet.Taxonomy; using Lucene.Net.Facet.Taxonomy.Directory; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using Lucene.Net.Util; using System; using System.Collections.Generic; namespace Lucene.Net.Demo.Facet { /// <summary> /// Shows example usage of category associations. /// </summary> public class AssociationsFacetsExample { /// <summary> /// Using a constant for all functionality related to a specific index /// is the best strategy. This allows you to upgrade Lucene.Net first /// and plan the upgrade of the index binary format for a later time. /// Once the index is upgraded, you simply need to update the constant /// version and redeploy your application. /// </summary> private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48; private readonly Directory indexDir = new RAMDirectory(); private readonly Directory taxoDir = new RAMDirectory(); private readonly FacetsConfig config; /// <summary>Empty constructor</summary> public AssociationsFacetsExample() { config = new FacetsConfig(); config.SetMultiValued(\"tags\", true); config.SetIndexFieldName(\"tags\", \"$tags\"); config.SetMultiValued(\"genre\", true); config.SetIndexFieldName(\"genre\", \"$genre\"); } /// <summary>Build the example index.</summary> private void Index() { IndexWriterConfig iwc = new IndexWriterConfig(EXAMPLE_VERSION, new WhitespaceAnalyzer(EXAMPLE_VERSION)); using (IndexWriter indexWriter = new IndexWriter(indexDir, iwc)) // Writes facet ords to a separate directory from the main index using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir)) { Document doc = new Document(); // 3 occurrences for tag 'lucene' doc.AddInt32AssociationFacetField(3, \"tags\", \"lucene\"); // 87% confidence level of genre 'computing' doc.AddSingleAssociationFacetField(0.87f, \"genre\", \"computing\"); indexWriter.AddDocument(config.Build(taxoWriter, doc)); doc = new Document(); // 1 occurrence for tag 'lucene' doc.AddInt32AssociationFacetField(1, \"tags\", \"lucene\"); // 2 occurrence for tag 'solr' doc.AddInt32AssociationFacetField(2, \"tags\", \"solr\"); // 75% confidence level of genre 'computing' doc.AddSingleAssociationFacetField(0.75f, \"genre\", \"computing\"); // 34% confidence level of genre 'software' doc.AddSingleAssociationFacetField(0.34f, \"genre\", \"software\"); indexWriter.AddDocument(config.Build(taxoWriter, doc)); } // Disposes indexWriter and taxoWriter } /// <summary>User runs a query and aggregates facets by summing their association values.</summary> private IList<FacetResult> SumAssociations() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); // MatchAllDocsQuery is for \"browsing\" (counts facets // for all non-deleted docs in the index); normally // you'd use a \"normal\" query: FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc); Facets tags = new TaxonomyFacetSumInt32Associations(\"$tags\", taxoReader, config, fc); Facets genre = new TaxonomyFacetSumSingleAssociations(\"$genre\", taxoReader, config, fc); // Retrieve results IList<FacetResult> results = new List<FacetResult>(); results.Add(tags.GetTopChildren(10, \"tags\")); results.Add(genre.GetTopChildren(10, \"genre\")); return results; } // Disposes indexReader and taxoReader } /// <summary>User drills down on 'tags/solr'.</summary> private FacetResult DrillDown() { using (DirectoryReader indexReader = DirectoryReader.Open(indexDir)) using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir)) { IndexSearcher searcher = new IndexSearcher(indexReader); // Passing no baseQuery means we drill down on all // documents (\"browse only\"): DrillDownQuery q = new DrillDownQuery(config); // Now user drills down on Publish Date/2010: q.Add(\"tags\", \"solr\"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, fc); // Retrieve results Facets facets = new TaxonomyFacetSumSingleAssociations(\"$genre\", taxoReader, config, fc); FacetResult result = facets.GetTopChildren(10, \"genre\"); return result; } // Disposes indexReader and taxoReader } /// <summary>Runs summing association example.</summary> public IList<FacetResult> RunSumAssociations() { Index(); return SumAssociations(); } /// <summary>Runs the drill-down example.</summary> public FacetResult RunDrillDown() { Index(); return DrillDown(); } /// <summary>Runs the sum int/float associations examples and prints the results.</summary> public static void Main(string[] args) { Console.WriteLine(\"Sum associations example:\"); Console.WriteLine(\"-------------------------\"); IList<FacetResult> results = new AssociationsFacetsExample().RunSumAssociations(); Console.WriteLine(\"tags: \" + results[0]); Console.WriteLine(\"genre: \" + results[1]); } } } Constructors | Improve this Doc View Source AssociationsFacetsExample() Empty constructor Declaration public AssociationsFacetsExample() Methods | Improve this Doc View Source Main(String[]) Runs the sum int/float associations examples and prints the results. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source RunDrillDown() Runs the drill-down example. Declaration public FacetResult RunDrillDown() Returns Type Description FacetResult | Improve this Doc View Source RunSumAssociations() Runs summing association example. Declaration public IList<FacetResult> RunSumAssociations() Returns Type Description System.Collections.Generic.IList < FacetResult >"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.html",
    "title": "Namespace Lucene.Net.Codecs.SimpleText | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.SimpleText Classes SimpleTextCodec Plain text index format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextDocValuesFormat Plain text doc values format. FOR RECREATIONAL USE ONLY The .dat file contains the data. For numbers this is a \"fixed-width\" file, for example a single byte range: field myField type NUMERIC minvalue 0 pattern 000 005 T 234 T 123 T ... So a document's value (delta encoded from minvalue) can be retrieved by seeking to startOffset + (1+pattern.length()+2)*docid. The extra 1 is the newline. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. for bytes this is also a \"fixed-width\" file, for example: field myField type BINARY maxlength 6 pattern 0 length 6 foobar[space][space] T length 3 baz[space][space][space][space][space] T ... So a doc's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength+2)*doc the extra 9 is 2 newlines, plus \"length \" itself. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. For sorted bytes this is a fixed-width file, for example: field myField type SORTED numvalues 10 maxLength 8 pattern 0 ordpattern 00 length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 03 06 01 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid an ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord For sorted set this is a fixed-width file very similar to the SORTED case, for example: field myField type SORTED_SET numvalues 10 maxLength 8 pattern 0 ordpattern XXXXX length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 0,3,5 1,2 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord list can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid this is a comma-separated list, and its padded with spaces to be fixed width. so trim() and split() it. and beware the empty string! An ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord The reader can just scan this file when it opens, skipping over the data blocks and saving the offset/etc for each field. @lucene.experimental SimpleTextDocValuesReader SimpleTextDocValuesWriter SimpleTextFieldInfosFormat Plain text field infos format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextFieldInfosReader Reads plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextFieldInfosWriter Writes plain text field infos files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextLiveDocsFormat Reads/writes plain text live docs. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat Plain-text norms format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat.SimpleTextNormsConsumer Writes plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextNormsFormat.SimpleTextNormsProducer Reads plain-text norms. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextPostingsFormat For debugging, curiosity, transparency only!! Do not use this codec in production. This codec stores all postings data in a single human-readable text file (_N.pst). You can view this in any text editor, and even edit it to alter your index. @lucene.experimental SimpleTextSegmentInfoFormat Plain text segments file format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoReader Reads plaintext segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextSegmentInfoWriter Writes plain text segments files. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsFormat Plain text stored fields format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsReader Reads plain text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextStoredFieldsWriter Writes plain-text stored fields. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsFormat Plain text term vectors format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsReader Reads plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleTextTermVectorsWriter Writes plain-text term vectors. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Appending.html",
    "title": "Namespace Lucene.Net.Codecs.Appending | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Appending Classes AppendingCodec This codec uses an index format that is very similar to Lucene40Codec but works on append-only outputs, such as plain output streams and append-only filesystems. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AppendingTermsReader Reads append-only terms from AppendingTermsWriter. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.html",
    "title": "Namespace Lucene.Net.Classification | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Classification <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Provides a classification module which leverages Lucene index information. Classes ClassificationResult<T> The result of a call to AssignClass(String) holding an assigned class of type and a score. This is a Lucene.NET EXPERIMENTAL API, use at your own risk KNearestNeighborClassifier A k-Nearest Neighbor classifier (see http://en.wikipedia.org/wiki/K-nearest_neighbors ) based on MoreLikeThis This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleNaiveBayesClassifier A simplistic Lucene based NaiveBayes classifier, see http://en.wikipedia.org/wiki/Naive_Bayes_classifier This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IClassifier<T> A classifier, see http://en.wikipedia.org/wiki/Classifier_(mathematics) , which assign classes of type This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.html",
    "title": "Namespace Lucene.Net.Classification.Utils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Classification.Utils Classes DatasetSplitter Utility class for creating training / test / cross validation indexes from the original index."
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.DatasetSplitter.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.Utils.DatasetSplitter.html",
    "title": "Class DatasetSplitter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DatasetSplitter Utility class for creating training / test / cross validation indexes from the original index. Inheritance System.Object DatasetSplitter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Classification.Utils Assembly : Lucene.Net.Classification.dll Syntax public class DatasetSplitter Constructors | Improve this Doc View Source DatasetSplitter(Double, Double) Create a DatasetSplitter by giving test and cross validation IDXs sizes Declaration public DatasetSplitter(double testRatio, double crossValidationRatio) Parameters Type Name Description System.Double testRatio the ratio of the original index to be used for the test IDX as a System.Double between 0.0 and 1.0 System.Double crossValidationRatio the ratio of the original index to be used for the c.v. IDX as a System.Double between 0.0 and 1.0 Methods | Improve this Doc View Source Split(AtomicReader, Directory, Directory, Directory, Analyzer, String[]) Split a given index into 3 indexes for training, test and cross validation tasks respectively Declaration public virtual void Split(AtomicReader originalIndex, Directory trainingIndex, Directory testIndex, Directory crossValidationIndex, Analyzer analyzer, params string[] fieldNames) Parameters Type Name Description AtomicReader originalIndex an AtomicReader on the source index Directory trainingIndex a Directory used to write the training index Directory testIndex a Directory used to write the test index Directory crossValidationIndex a Directory used to write the cross validation index Analyzer analyzer Analyzer used to create the new docs System.String [] fieldNames names of fields that need to be put in the new indexes or null if all should be used Exceptions Type Condition System.IO.IOException if any writing operation fails on any of the indexes"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.IClassifier-1.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.IClassifier-1.html",
    "title": "Interface IClassifier<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IClassifier<T> A classifier, see http://en.wikipedia.org/wiki/Classifier_(mathematics) , which assign classes of type This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public interface IClassifier<T> Type Parameters Name Description T Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration ClassificationResult<T> AssignClass(string text) Parameters Type Name Description System.String text a string containing text to be classified Returns Type Description ClassificationResult <T> a ClassificationResult<T> holding assigned class of type T and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Analyzer analyzer the analyzer used to tokenize / filter the unseen text Query query the query to filter which documents use for training"
  },
  "api/Lucene.Net.Classification/Lucene.Net.Classification.ClassificationResult-1.html": {
    "href": "api/Lucene.Net.Classification/Lucene.Net.Classification.ClassificationResult-1.html",
    "title": "Class ClassificationResult<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ClassificationResult<T> The result of a call to AssignClass(String) holding an assigned class of type and a score. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ClassificationResult<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class ClassificationResult<T> Type Parameters Name Description T Constructors | Improve this Doc View Source ClassificationResult(T, Double) Constructor the class T assigned by a IClassifier<T> score the score for the assignedClass as a System.Double Declaration public ClassificationResult(T assignedClass, double score) Parameters Type Name Description T assignedClass System.Double score Properties | Improve this Doc View Source AssignedClass retrieve the result class @return a T representing an assigned class Declaration public virtual T AssignedClass { get; } Property Value Type Description T | Improve this Doc View Source Score Gets a System.Double representing a result score. Declaration public virtual double Score { get; } Property Value Type Description System.Double"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.html",
    "title": "Namespace Lucene.Net.Analysis.Cn.Smart | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn.Smart <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analyzer for Simplified Chinese, which indexes words. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. Classes AnalyzerProfile Manages analysis data configuration for SmartChineseAnalyzer SmartChineseAnalyzer has a built-in dictionary and stopword list out-of-box. NOTE: To use an alternate dicationary than the built-in one, put the \"bigramdict.dct\" and \"coredict.dct\" files in a subdirectory of your application named \"analysis-data\". This subdirectory can be placed in any directory up to and including the root directory (if the OS permission allows). To place the files in an alternate location, set an environment variable named \"analysis.data.dir\" with the name of the directory the \"bigramdict.dct\" and \"coredict.dct\" files can be located within. The default \"bigramdict.dct\" and \"coredict.dct\" files can be found at: https://issues.apache.org/jira/browse/LUCENE-1629 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk HMMChineseTokenizer Tokenizer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. HMMChineseTokenizerFactory Factory for HMMChineseTokenizer Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk SentenceTokenizer Tokenizes input text into sentences. The output tokens can then be broken into words with WordTokenFilter This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseAnalyzer SmartChineseAnalyzer is an analyzer for Chinese or mixed Chinese-English text. The analyzer uses probabilistic knowledge to find the optimal word segmentation for Simplified Chinese text. The text is first broken into sentences, then each sentence is segmented into words. Segmentation is based upon the Hidden Markov Model . A large training corpus was used to calculate Chinese word frequency probability. This analyzer requires a dictionary to provide statistical data. SmartChineseAnalyzer has an included dictionary out-of-box. The included dictionary data is from ICTCLAS1.0 . Thanks to ICTCLAS for their hard work, and for contributing the data under the Apache 2 License! This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseSentenceTokenizerFactory Factory for the SmartChineseAnalyzer SentenceTokenizer This is a Lucene.NET EXPERIMENTAL API, use at your own risk SmartChineseWordTokenFilterFactory Factory for the SmartChineseAnalyzer WordTokenFilter Note: this class will currently emit tokens for punctuation. So you should either add a WordDelimiterFilter after to remove these (with concatenate off), or use the SmartChinese stoplist with a StopFilterFactory via: words=\"org/apache/lucene/analysis/cn/smart/stopwords.txt\" This is a Lucene.NET EXPERIMENTAL API, use at your own risk Utility SmartChineseAnalyzer utility constants and methods This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordTokenFilter A TokenFilter that breaks sentences into words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums CharType Internal SmartChineseAnalyzer character type constants. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WordType Internal SmartChineseAnalyzer token type constants This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordType.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordType.html",
    "title": "Enum WordType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum WordType Internal SmartChineseAnalyzer token type constants This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax public enum WordType Fields Name Description CHINESE_WORD Chinese Word DELIMITER Punctuation Symbol FULLWIDTH_NUMBER Full-Width Alphanumeric FULLWIDTH_STRING Full-Width String NUMBER ASCII Alphanumeric SENTENCE_BEGIN Start of a Sentence SENTENCE_END End of a Sentence STRING ASCII String"
  },
  "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis.SmartCn/Lucene.Net.Analysis.Cn.Smart.WordTokenFilter.html",
    "title": "Class WordTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordTokenFilter A TokenFilter that breaks sentences into words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter WordTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Cn.Smart Assembly : Lucene.Net.Analysis.SmartCn.dll Syntax [Obsolete(\"Use HMMChineseTokenizer instead.\")] public sealed class WordTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source WordTokenFilter(TokenStream) Construct a new WordTokenFilter . Declaration public WordTokenFilter(TokenStream input) Parameters Type Name Description TokenStream input TokenStream of sentences. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ru.RussianLightStemmer.html",
    "title": "Class RussianLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RussianLightStemmer Light Stemmer for Russian. This stemmer implements the following algorithm: Indexing and Searching Strategies for the Russian Language. Ljiljana Dolamic and Jacques Savoy. Inheritance System.Object RussianLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ru Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RussianLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ro.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ro.html",
    "title": "Namespace Lucene.Net.Analysis.Ro | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ro Classes RomanianAnalyzer Analyzer for Romanian."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Reverse.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Reverse.html",
    "title": "Namespace Lucene.Net.Analysis.Reverse | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Reverse Classes ReverseStringFilter Reverse token string, for example \"country\" => \"yrtnuoc\". If Lucene.Net.Analysis.Reverse.ReverseStringFilter.marker is supplied, then tokens will be also prepended by that character. For example, with a marker of \\u0001, \"country\" => \"\\u0001yrtnuoc\". This is useful when implementing efficient leading wildcards search. You must specify the required LuceneVersion compatibility when creating ReverseStringFilter , or when using any of its static methods: As of 3.1, supplementary characters are handled correctly ReverseStringFilterFactory Factory for ReverseStringFilter . <fieldType name=\"text_rvsstr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ReverseStringFilterFactory\"/> </analyzer> </fieldType> @since solr 1.4"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Query.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Query.html",
    "title": "Namespace Lucene.Net.Analysis.Query | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Query Classes QueryAutoStopWordAnalyzer An Analyzer used primarily at query time to wrap another analyzer and provide a layer of protection which prevents very common words from being passed into queries. For very large indexes the cost of reading TermDocs for a very common word can be high. This analyzer was created after experience with a 38 million doc index which had a term in around 50% of docs and was causing TermQueries for this term to take 2 seconds."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.html",
    "title": "Namespace Lucene.Net.Analysis.Pt | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pt Classes PortugueseAnalyzer Analyzer for Portuguese. You must specify the required LuceneVersion compatibility when creating PortugueseAnalyzer : As of 3.6, PortugueseLightStemFilter is used for less aggressive stemming. PortugueseLightStemFilter A TokenFilter that applies PortugueseLightStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseLightStemFilterFactory Factory for PortugueseLightStemFilter . <fieldType name=\"text_ptlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseLightStemFilterFactory\"/> </analyzer> </fieldType> PortugueseLightStemmer Light Stemmer for Portuguese This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy PortugueseMinimalStemFilter A TokenFilter that applies PortugueseMinimalStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseMinimalStemFilterFactory Factory for PortugueseMinimalStemFilter . <fieldType name=\"text_ptminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseMinimalStemFilterFactory\"/> </analyzer> </fieldType> PortugueseMinimalStemmer Minimal Stemmer for Portuguese This follows the \"RSLP-S\" algorithm presented in: A study on the Use of Stemming for Monolingual Ad-Hoc Portuguese Information Retrieval (Orengo, et al) which is just the plural reduction step of the RSLP algorithm from A Stemming Algorithm for the Portuguese Language , Orengo et al. PortugueseStemFilter A TokenFilter that applies PortugueseStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . PortugueseStemFilterFactory Factory for PortugueseStemFilter . <fieldType name=\"text_ptstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseStemFilterFactory\"/> </analyzer> </fieldType> PortugueseStemmer Portuguese stemmer implementing the RSLP (Removedor de Sufixos da Lingua Portuguesa) algorithm. This is sometimes also referred to as the Orengo stemmer. RSLPStemmerBase Base class for stemmers that use a set of RSLP-like stemming steps. RSLP (Removedor de Sufixos da Lingua Portuguesa) is an algorithm designed originally for stemming the Portuguese language, described in the paper A Stemming Algorithm for the Portuguese Language , Orengo et. al. Since this time a plural-only modification (RSLP-S) as well as a modification for the Galician language have been implemented. This class parses a configuration file that describes RSLPStemmerBase.Step s, where each RSLPStemmerBase.Step contains a set of RSLPStemmerBase.Rule s. The general rule format is: { \"suffix\", N, \"replacement\", { \"exception1\", \"exception2\", ...}} where: suffix is the suffix to be removed (such as \"inho\"). N is the min stem size, where stem is defined as the candidate stem after removing the suffix (but before appending the replacement!) replacement is an optimal string to append after removing the suffix. This can be the empty string. exceptions is an optional list of exceptions, patterns that should not be stemmed. These patterns can be specified as whole word or suffix (ends-with) patterns, depending upon the exceptions format flag in the step header. A step is an ordered list of rules, with a structure in this format: { \"name\", N, B, { \"cond1\", \"cond2\", ... } ... rules ... }; where: name is a name for the step (such as \"Plural\"). N is the min word size. Words that are less than this length bypass the step completely, as an optimization. Note: N can be zero, in this case this implementation will automatically calculate the appropriate value from the underlying rules. B is a \"boolean\" flag specifying how exceptions in the rules are matched. A value of 1 indicates whole-word pattern matching, a value of 0 indicates that exceptions are actually suffixes and should be matched with ends-with. conds are an optional list of conditions to enter the step at all. If the list is non-empty, then a word must end with one of these conditions or it will bypass the step completely as an optimization. RSLP description This is a Lucene.NET INTERNAL API, use at your own risk RSLPStemmerBase.Rule A basic rule, with no exceptions. RSLPStemmerBase.RuleWithSetExceptions A rule with a set of whole-word exceptions. RSLPStemmerBase.RuleWithSuffixExceptions A rule with a set of exceptional suffixes. RSLPStemmerBase.Step A step containing a list of rules."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.html",
    "title": "Class RSLPStemmerBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RSLPStemmerBase Base class for stemmers that use a set of RSLP-like stemming steps. RSLP (Removedor de Sufixos da Lingua Portuguesa) is an algorithm designed originally for stemming the Portuguese language, described in the paper A Stemming Algorithm for the Portuguese Language , Orengo et. al. Since this time a plural-only modification (RSLP-S) as well as a modification for the Galician language have been implemented. This class parses a configuration file that describes RSLPStemmerBase.Step s, where each RSLPStemmerBase.Step contains a set of RSLPStemmerBase.Rule s. The general rule format is: { \"suffix\", N, \"replacement\", { \"exception1\", \"exception2\", ...}} where: suffix is the suffix to be removed (such as \"inho\"). N is the min stem size, where stem is defined as the candidate stem after removing the suffix (but before appending the replacement!) replacement is an optimal string to append after removing the suffix. This can be the empty string. exceptions is an optional list of exceptions, patterns that should not be stemmed. These patterns can be specified as whole word or suffix (ends-with) patterns, depending upon the exceptions format flag in the step header. A step is an ordered list of rules, with a structure in this format: { \"name\", N, B, { \"cond1\", \"cond2\", ... } ... rules ... }; where: name is a name for the step (such as \"Plural\"). N is the min word size. Words that are less than this length bypass the step completely, as an optimization. Note: N can be zero, in this case this implementation will automatically calculate the appropriate value from the underlying rules. B is a \"boolean\" flag specifying how exceptions in the rules are matched. A value of 1 indicates whole-word pattern matching, a value of 0 indicates that exceptions are actually suffixes and should be matched with ends-with. conds are an optional list of conditions to enter the step at all. If the list is non-empty, then a word must end with one of these conditions or it will bypass the step completely as an optimization. RSLP description This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RSLPStemmerBase GalicianMinimalStemmer GalicianStemmer PortugueseMinimalStemmer PortugueseStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class RSLPStemmerBase Methods | Improve this Doc View Source Parse(Type, String) Parse a resource file into an RSLP stemmer description. Declaration protected static IDictionary<string, RSLPStemmerBase.Step> Parse(Type clazz, string resource) Parameters Type Name Description System.Type clazz System.String resource Returns Type Description System.Collections.Generic.IDictionary < System.String , RSLPStemmerBase.Step > a Map containing the named RSLPStemmerBase.Step s in this description."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Step.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.RSLPStemmerBase.Step.html",
    "title": "Class RSLPStemmerBase.Step | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RSLPStemmerBase.Step A step containing a list of rules. Inheritance System.Object RSLPStemmerBase.Step Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax protected class Step Constructors | Improve this Doc View Source Step(String, RSLPStemmerBase.Rule[], Int32, String[]) Create a new step Declaration public Step(string name, RSLPStemmerBase.Rule[] rules, int min, string[] suffixes) Parameters Type Name Description System.String name Step's name. RSLPStemmerBase.Rule [] rules an ordered list of rules. System.Int32 min minimum word size. if this is 0 it is automatically calculated. System.String [] suffixes optional list of conditional suffixes. may be null. Fields | Improve this Doc View Source m_min Declaration protected readonly int m_min Field Value Type Description System.Int32 | Improve this Doc View Source m_name Declaration protected readonly string m_name Field Value Type Description System.String | Improve this Doc View Source m_rules Declaration protected readonly RSLPStemmerBase.Rule[] m_rules Field Value Type Description RSLPStemmerBase.Rule [] | Improve this Doc View Source m_suffixes Declaration protected readonly char[][] m_suffixes Field Value Type Description System.Char [][] Methods | Improve this Doc View Source Apply(Char[], Int32) Declaration public virtual int Apply(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 new valid length of the string after applying the entire step."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.html",
    "title": "Namespace Lucene.Net.Analysis.NGram | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.NGram Classes EdgeNGramFilterFactory Creates new instances of EdgeNGramTokenFilter . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.EdgeNGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> EdgeNGramTokenFilter Tokenizes the given token into n-grams of given size(s). This TokenFilter create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this filter does not support BACK (you can use ReverseStringFilter up-front and afterward to get the same behavior), handles supplementary characters correctly and does not update offsets anymore. EdgeNGramTokenizer Tokenizes the input from an edge into n-grams of given size(s). This Tokenizer create n-grams from the beginning edge or ending edge of a input token. As of Lucene 4.4, this tokenizer can handle maxGram larger than 1024 chars, but beware that this will result in increased memory usage doesn't trim the input, sets position increments equal to 1 instead of 1 for the first token and 0 for all other ones doesn't support backward n-grams anymore. supports IsTokenChar(Int32) pre-tokenization, correctly handles supplementary characters. Although highly discouraged, it is still possible to use the old behavior through Lucene43EdgeNGramTokenizer . EdgeNGramTokenizerFactory Creates new instances of EdgeNGramTokenizer . <fieldType name=\"text_edgngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.EdgeNGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"1\"/> </analyzer> </fieldType> Lucene43EdgeNGramTokenizer Old version of EdgeNGramTokenizer which doesn't handle correctly supplementary characters. Lucene43NGramTokenizer Old broken version of NGramTokenizer . NGramFilterFactory Factory for NGramTokenFilter . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NGramFilterFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> NGramTokenFilter Tokenizes the input into n-grams of the given size(s). You must specify the required LuceneVersion compatibility when creating a NGramTokenFilter . As of Lucene 4.4, this token filters: handles supplementary characters correctly, emits all n-grams for the same token at the same position, does not modify offsets, sorts n-grams by their offset in the original token first, then increasing length (meaning that \"abc\" will give \"a\", \"ab\", \"abc\", \"b\", \"bc\", \"c\"). You can make this filter use the old behavior by providing a version < LUCENE_44 in the constructor but this is not recommended as it will lead to broken TokenStream s that will cause highlighting bugs. If you were using this TokenFilter to perform partial highlighting, this won't work anymore since this filter doesn't update offsets. You should modify your analysis chain to use NGramTokenizer , and potentially override IsTokenChar(Int32) to perform pre-tokenization. NGramTokenizer Tokenizes the input into n-grams of the given size(s). On the contrary to NGramTokenFilter , this class sets offsets so that characters between startOffset and endOffset in the original stream are the same as the term chars. For example, \"abcde\" would be tokenized as (minGram=2, maxGram=3): TermPosition incrementPosition lengthOffsets ab11[0,2[ abc11[0,3[ bc11[1,3[ bcd11[1,4[ cd11[2,4[ cde11[2,5[ de11[3,5[ This tokenizer changed a lot in Lucene 4.4 in order to: tokenize in a streaming fashion to support streams which are larger than 1024 chars (limit of the previous version), count grams based on unicode code points instead of java chars (and never split in the middle of surrogate pairs), give the ability to pre-tokenize the stream ( IsTokenChar(Int32) ) before computing n-grams. Additionally, this class doesn't trim trailing whitespaces and emits tokens in a different order, tokens are now emitted by increasing start offsets while they used to be emitted by increasing lengths (which prevented from supporting large input streams). Although highly discouraged, it is still possible to use the old behavior through Lucene43NGramTokenizer . NGramTokenizerFactory Factory for NGramTokenizer . <fieldType name=\"text_ngrm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\" minGramSize=\"1\" maxGramSize=\"2\"/> </analyzer> </fieldType> Enums EdgeNGramTokenFilter.Side Specifies which side of the input the n-gram should be generated from Lucene43EdgeNGramTokenizer.Side Specifies which side of the input the n-gram should be generated from"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.Side.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.Side.html",
    "title": "Enum Lucene43EdgeNGramTokenizer.Side | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Lucene43EdgeNGramTokenizer.Side Specifies which side of the input the n-gram should be generated from Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public enum Side Fields Name Description BACK Get the n-gram from the end of the input FRONT Get the n-gram from the front of the input"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.Side.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.Side.html",
    "title": "Enum EdgeNGramTokenFilter.Side | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum EdgeNGramTokenFilter.Side Specifies which side of the input the n-gram should be generated from Namespace : Lucene.Net.Analysis.NGram Assembly : Lucene.Net.Analysis.Common.dll Syntax public enum Side Fields Name Description BACK Get the n-gram from the end of the input FRONT Get the n-gram from the front of the input"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.html",
    "title": "Namespace Lucene.Net.Analysis.Miscellaneous | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Miscellaneous Classes ASCIIFoldingFilter This class converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the \"Basic Latin\" Unicode block) into their ASCII equivalents, if one exists. Characters from the following Unicode blocks are converted; however, only those characters with reasonable ASCII alternatives are converted: C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode For example, '&agrave;' will be replaced by 'a'. ASCIIFoldingFilterFactory Factory for ASCIIFoldingFilter . <fieldType name=\"text_ascii\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"false\"/> </analyzer> </fieldType> CapitalizationFilter A filter to apply normal capitalization rules to Tokens. It will make the first letter capital and the rest lower case. This filter is particularly useful to build nice looking facet parameters. This filter is not appropriate if you intend to use a prefix query. CapitalizationFilterFactory Factory for CapitalizationFilter . The factory takes parameters: \"onlyFirstWord\" - should each word be capitalized or all of the words? \"keep\" - a keep word list. Each word that should be kept separated by whitespace. \"keepIgnoreCase - true or false. If true, the keep list will be considered case-insensitive. \"forceFirstLetter\" - Force the first letter to be capitalized even if it is in the keep list \"okPrefix\" - do not change word capitalization if a word begins with something in this list. for example if \"McK\" is on the okPrefix list, the word \"McKinley\" should not be changed to \"Mckinley\" \"minWordLength\" - how long the word needs to be to get capitalization applied. If the minWordLength is 3, \"and\" > \"And\" but \"or\" stays \"or\" \"maxWordCount\" - if the token contains more then maxWordCount words, the capitalization is assumed to be correct. <fieldType name=\"text_cptlztn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CapitalizationFilterFactory\" onlyFirstWord=\"true\" keep=\"java solr lucene\" keepIgnoreCase=\"false\" okPrefix=\"McK McD McA\"/> </analyzer> </fieldType> @since solr 1.3 CodepointCountFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of Unicode codepoints. CodepointCountFilterFactory Factory for CodepointCountFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CodepointCountFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> EmptyTokenStream An always exhausted token stream. HyphenatedWordsFilter When the plain text is extracted from documents, we will often have many words hyphenated and broken into two lines. This is often the case with documents where narrow text columns are used, such as newsletters. In order to increase search efficiency, this filter puts hyphenated words broken into two lines back together. This filter should be used on indexing time only. Example field definition in schema.xml: <fieldtype name=\"text\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer type=\"index\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"index_synonyms.txt\" ignoreCase=\"true\" expand=\"false\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"1\" catenateNumbers=\"1\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> <analyzer type=\"query\"> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.SynonymFilterFactory\" synonyms=\"synonyms.txt\" ignoreCase=\"true\" expand=\"true\"/> <filter class=\"solr.StopFilterFactory\" ignoreCase=\"true\"/> <filter class=\"solr.WordDelimiterFilterFactory\" generateWordParts=\"1\" generateNumberParts=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldtype> HyphenatedWordsFilterFactory Factory for HyphenatedWordsFilter . <fieldType name=\"text_hyphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenatedWordsFilterFactory\"/> </analyzer> </fieldType> KeepWordFilter A TokenFilter that only keeps tokens with text contained in the required words. This filter behaves like the inverse of StopFilter . @since solr 1.3 KeepWordFilterFactory Factory for KeepWordFilter . <fieldType name=\"text_keepword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeepWordFilterFactory\" words=\"keepwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> KeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . KeywordMarkerFilterFactory Factory for KeywordMarkerFilter . <fieldType name=\"text_keyword\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.KeywordMarkerFilterFactory\" protected=\"protectedkeyword.txt\" pattern=\"^.+er$\" ignoreCase=\"false\"/> </analyzer> </fieldType> KeywordRepeatFilter This TokenFilter emits each incoming token twice once as keyword and once non-keyword, in other words once with IsKeyword set to true and once set to false . This is useful if used with a stem filter that respects the KeywordAttribute to index the stemmed and the un-stemmed version of a term into the same field. KeywordRepeatFilterFactory Factory for KeywordRepeatFilter . Since KeywordRepeatFilter emits two tokens for every input token, and any tokens that aren't transformed later in the analysis chain will be in the document twice. Therefore, consider adding RemoveDuplicatesTokenFilterFactory later in the analysis chain. LengthFilter Removes words that are too long or too short from the stream. Note: Length is calculated as the number of UTF-16 code units. LengthFilterFactory Factory for LengthFilter . <fieldType name=\"text_lngth\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LengthFilterFactory\" min=\"0\" max=\"1\" /> </analyzer> </fieldType> LimitTokenCountAnalyzer This Analyzer limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . LimitTokenCountFilter This TokenFilter limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been reached, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenCountFilter(TokenStream, Int32, Boolean) consumeAllTokens option. LimitTokenCountFilterFactory Factory for LimitTokenCountFilter . <fieldType name=\"text_lngthcnt\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenCountFilterFactory\" maxTokenCount=\"10\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenCountFilter for an explanation of it's use. LimitTokenPositionFilter This TokenFilter limits its emitted tokens to those with positions that are not greater than the configured limit. By default, this filter ignores any tokens in the wrapped TokenStream once the limit has been exceeded, which can result in Reset() being called prior to IncrementToken() returning false . For most TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a TokenStream which requires that the full stream of tokens be exhausted in order to function properly, use the LimitTokenPositionFilter(TokenStream, Int32, Boolean) consumeAllTokens option. LimitTokenPositionFilterFactory Factory for LimitTokenPositionFilter . <fieldType name=\"text_limit_pos\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.LimitTokenPositionFilterFactory\" maxTokenPosition=\"3\" consumeAllTokens=\"false\" /> </analyzer> </fieldType> The Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.consumeAllTokens property is optional and defaults to false . See LimitTokenPositionFilter for an explanation of its use. Lucene47WordDelimiterFilter Old Broken version of WordDelimiterFilter PatternAnalyzer Efficient Lucene analyzer/tokenizer that preferably operates on a System.String rather than a System.IO.TextReader , that can flexibly separate text into terms via a regular expression System.Text.RegularExpressions.Regex (with behaviour similar to System.Text.RegularExpressions.Regex.Split(System.String) ), and that combines the functionality of LetterTokenizer , LowerCaseTokenizer , WhitespaceTokenizer , StopFilter into a single efficient multi-purpose class. If you are unsure how exactly a regular expression should look like, consider prototyping by simply trying various expressions on some test texts via System.Text.RegularExpressions.Regex.Split(System.String) . Once you are satisfied, give that regex to PatternAnalyzer . Also see Regular Expression Tutorial . This class can be considerably faster than the \"normal\" Lucene tokenizers. It can also serve as a building block in a compound Lucene TokenFilter chain. For example as in this stemming example: PatternAnalyzer pat = ... TokenStream tokenStream = new SnowballFilter( pat.GetTokenStream(\"content\", \"James is running round in the woods\"), \"English\")); PatternKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token that matches the provided pattern is marked as a keyword by setting IsKeyword to true . PerFieldAnalyzerWrapper This analyzer is used to facilitate scenarios where different fields Require different analysis techniques. Use the Map argument in PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) to add non-default analyzers for fields. Example usage: IDictionary<string, Analyzer> analyzerPerField = new Dictionary<string, Analyzer>(); analyzerPerField[\"firstname\"] = new KeywordAnalyzer(); analyzerPerField[\"lastname\"] = new KeywordAnalyzer(); PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(version), analyzerPerField); In this example, StandardAnalyzer will be used for all fields except \"firstname\" and \"lastname\", for which KeywordAnalyzer will be used. A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing. PrefixAndSuffixAwareTokenFilter Links two PrefixAwareTokenFilter . NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. PrefixAwareTokenFilter Joins two token streams and leaves the last token of the first stream available to be used when updating the token values in the second stream based on that token. The default implementation adds last prefix token end offset to the suffix token start and end offsets. NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. RemoveDuplicatesTokenFilter A TokenFilter which filters out Token s at the same position and Term text as the previous token in the stream. RemoveDuplicatesTokenFilterFactory Factory for RemoveDuplicatesTokenFilter . <fieldType name=\"text_rmdup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> ScandinavianFoldingFilter This filter folds Scandinavian characters åÅäæÄÆ->a and öÖøØ->o. It also discriminate against use of double vowels aa, ae, ao, oe and oo, leaving just the first one. It's is a semantically more destructive solution than ScandinavianNormalizationFilter but can in addition help with matching raksmorgas as räksmörgås. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej == blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas == raksmorgas Background: Swedish åäö are in fact the same letters as Norwegian and Danish åæø and thus interchangeable when used between these languages. They are however folded differently when people type them on a keyboard lacking these characters. In that situation almost all Swedish people use a, a, o instead of å, ä, ö. Norwegians and Danes on the other hand usually type aa, ae and oe instead of å, æ and ø. Some do however use a, a, o, oo, ao and sometimes permutations of everything above. This filter solves that mismatch problem, but might also cause new. ScandinavianFoldingFilterFactory Factory for ScandinavianFoldingFilter . <fieldType name=\"text_scandfold\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianFoldingFilterFactory\"/> </analyzer> </fieldType> ScandinavianNormalizationFilter This filter normalize use of the interchangeable Scandinavian characters æÆäÄöÖøØ and folded variants (aa, ao, ae, oe and oo) by transforming them to åÅæÆøØ. It's a semantically less destructive solution than ScandinavianFoldingFilter , most useful when a person with a Norwegian or Danish keyboard queries a Swedish index and vice versa. This filter does not the common Swedish folds of å and ä to a nor ö to o. blåbærsyltetøj == blåbärsyltetöj == blaabaarsyltetoej but not blabarsyltetoj räksmörgås == ræksmørgås == ræksmörgaos == raeksmoergaas but not raksmorgas ScandinavianNormalizationFilterFactory Factory for ScandinavianNormalizationFilter . <fieldType name=\"text_scandnorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.ScandinavianNormalizationFilterFactory\"/> </analyzer> </fieldType> SetKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token contained in the provided set is marked as a keyword by setting IsKeyword to true . SingleTokenTokenStream A TokenStream containing a single token. StemmerOverrideFilter Provides the ability to override any KeywordAttribute aware stemmer with custom dictionary-based stemming. StemmerOverrideFilter.Builder This builder builds an FST for the StemmerOverrideFilter StemmerOverrideFilter.StemmerOverrideMap A read-only 4-byte FST backed map that allows fast case-insensitive key value lookups for StemmerOverrideFilter StemmerOverrideFilterFactory Factory for StemmerOverrideFilter . <fieldType name=\"text_dicstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.StemmerOverrideFilterFactory\" dictionary=\"dictionary.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> TrimFilter Trims leading and trailing whitespace from Tokens in the stream. As of Lucene 4.4, this filter does not support updateOffsets=true anymore as it can lead to broken token streams. TrimFilterFactory Factory for TrimFilter . <fieldType name=\"text_trm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.NGramTokenizerFactory\"/> <filter class=\"solr.TrimFilterFactory\" /> </analyzer> </fieldType> TruncateTokenFilter A token filter for truncating the terms into a specific length. Fixed prefix truncation, as a stemming method, produces good results on Turkish language. It is reported that F5, using first 5 characters, produced best results in Information Retrieval on Turkish Texts TruncateTokenFilterFactory Factory for TruncateTokenFilter . The following type is recommended for \" diacritics-insensitive search \" for Turkish. <fieldType name=\"text_tr_ascii_f5\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> <filter class=\"solr.ASCIIFoldingFilterFactory\" preserveOriginal=\"true\"/> <filter class=\"solr.KeywordRepeatFilterFactory\"/> <filter class=\"solr.TruncateTokenFilterFactory\" prefixLength=\"5\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> WordDelimiterFilter Splits words into subwords and performs optional transformations on subword groups. Words are split into subwords with the following rules: split on intra-word delimiters (by default, all non alpha-numeric characters): \"Wi-Fi\" → \"Wi\", \"Fi\" split on case transitions: \"PowerShot\" → \"Power\", \"Shot\" split on letter-number transitions: \"SD500\" → \"SD\", \"500\" leading and trailing intra-word delimiters on each subword are ignored: \"//hello---there, 'dude'\" → \"hello\", \"there\", \"dude\" trailing \"'s\" are removed for each subword: \"O'Neil's\" → \"O\", \"Neil\" Note: this step isn't performed in a separate filter because of possible subword combinations. The combinations parameter affects how subwords are combined: combinations=\"0\" causes no subword combinations: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" (0 and 1 are the token positions) combinations=\"1\" means that in addition to the subwords, maximum runs of non-numeric subwords are catenated and produced at the same position of the last subword in the run: \"PowerShot\" → 0:\"Power\", 1:\"Shot\" 1:\"PowerShot\" \"A's+B's&C's\" -gt; 0:\"A\", 1:\"B\", 2:\"C\", 2:\"ABC\" \"Super-Duper-XL500-42-AutoCoder!\" → 0:\"Super\", 1:\"Duper\", 2:\"XL\", 2:\"SuperDuperXL\", 3:\"500\" 4:\"42\", 5:\"Auto\", 6:\"Coder\", 6:\"AutoCoder\" One use for WordDelimiterFilter is to help match words with different subword delimiters. For example, if the source text contained \"wi-fi\" one may want \"wifi\" \"WiFi\" \"wi-fi\" \"wi+fi\" queries to all match. One way of doing so is to specify combinations=\"1\" in the analyzer used for indexing, and combinations=\"0\" (the default) in the analyzer used for querying. Given that the current StandardTokenizer immediately removes many intra-word delimiters, it is recommended that this filter be used after a tokenizer that does not do this (such as WhitespaceTokenizer ). WordDelimiterFilterFactory Factory for WordDelimiterFilter . <fieldType name=\"text_wd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.WordDelimiterFilterFactory\" protected=\"protectedword.txt\" preserveOriginal=\"0\" splitOnNumerics=\"1\" splitOnCaseChange=\"1\" catenateWords=\"0\" catenateNumbers=\"0\" catenateAll=\"0\" generateWordParts=\"1\" generateNumberParts=\"1\" stemEnglishPossessive=\"1\" types=\"wdfftypes.txt\" /> </analyzer> </fieldType> WordDelimiterIterator A BreakIterator-like API for iterating over subwords in text, according to WordDelimiterFilter rules. This is a Lucene.NET INTERNAL API, use at your own risk Enums WordDelimiterFlags Configuration options for the WordDelimiterFilter . LUCENENET specific - these options were passed as int constant flags in Lucene."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.WordDelimiterIterator.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.WordDelimiterIterator.html",
    "title": "Class WordDelimiterIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordDelimiterIterator A BreakIterator-like API for iterating over subwords in text, according to WordDelimiterFilter rules. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object WordDelimiterIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WordDelimiterIterator Fields | Improve this Doc View Source DEFAULT_WORD_DELIM_TABLE Declaration public static readonly byte[] DEFAULT_WORD_DELIM_TABLE Field Value Type Description System.Byte [] | Improve this Doc View Source DONE Indicates the end of iteration Declaration public const int DONE = -1 Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetType(Int32) Computes the type of the given character Declaration public static byte GetType(int ch) Parameters Type Name Description System.Int32 ch Character whose type is to be determined Returns Type Description System.Byte Type of the character"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFlags.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.WordDelimiterFlags.html",
    "title": "Enum WordDelimiterFlags | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum WordDelimiterFlags Configuration options for the WordDelimiterFilter . LUCENENET specific - these options were passed as int constant flags in Lucene. Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax [Flags] public enum WordDelimiterFlags Fields Name Description CATENATE_ALL Causes all subword parts to be catenated: \"wi-fi-4000\" => \"wifi4000\" CATENATE_NUMBERS Causes maximum runs of word parts to be catenated: \"wi-fi\" => \"wifi\" CATENATE_WORDS Causes maximum runs of word parts to be catenated: \"wi-fi\" => \"wifi\" GENERATE_NUMBER_PARTS Causes number subwords to be generated: \"500-42\" => \"500\" \"42\" GENERATE_WORD_PARTS Causes parts of words to be generated: \"PowerShot\" => \"Power\" \"Shot\" PRESERVE_ORIGINAL Causes original words are preserved and added to the subword list (Defaults to false) \"500-42\" => \"500\" \"42\" \"500-42\" SPLIT_ON_CASE_CHANGE If not set, causes case changes to be ignored (subwords will only be generated given SUBWORD_DELIM tokens) SPLIT_ON_NUMERICS If not set, causes numeric changes to be ignored (subwords will only be generated given SUBWORD_DELIM tokens). STEM_ENGLISH_POSSESSIVE Causes trailing \"'s\" to be removed for each subword \"O'Neil's\" => \"O\", \"Neil\""
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.GraphvizFormatter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.GraphvizFormatter.html",
    "title": "Class GraphvizFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GraphvizFormatter Outputs the dot (graphviz) string for the viterbi lattice. Inheritance System.Object GraphvizFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class GraphvizFormatter Constructors | Improve this Doc View Source GraphvizFormatter(ConnectionCosts) Declaration public GraphvizFormatter(ConnectionCosts costs) Parameters Type Name Description ConnectionCosts costs Methods | Improve this Doc View Source Finish() Declaration public virtual string Finish() Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.Dict | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.Dict Classes BinaryDictionary Base class for a binary-encoded in-memory dictionary. CharacterDefinition Character category data. ConnectionCosts n-gram connection cost data Dictionary TokenInfoDictionary Binary dictionary implementation for a known-word dictionary model: Words are encoded into an FST mapping to a list of wordIDs. TokenInfoFST Thin wrapper around an FST with root-arc caching for Japanese. Depending upon fasterButMoreRam, either just kana (191 arcs), or kana and han (28,607 arcs) are cached. The latter offers additional performance at the cost of more RAM. UnknownDictionary Dictionary for unknown-word handling. UserDictionary Class for building a User Dictionary. This class allows for custom segmentation of phrases. Interfaces IDictionary Dictionary interface for retrieving morphological data by id."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.TokenInfoFST.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.TokenInfoFST.html",
    "title": "Class TokenInfoFST | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoFST Thin wrapper around an FST with root-arc caching for Japanese. Depending upon fasterButMoreRam, either just kana (191 arcs), or kana and han (28,607 arcs) are cached. The latter offers additional performance at the cost of more RAM. Inheritance System.Object TokenInfoFST Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class TokenInfoFST Constructors | Improve this Doc View Source TokenInfoFST(FST<Nullable<Int64>>, Boolean) Declaration public TokenInfoFST(FST<long?> fst, bool fasterButMoreRam) Parameters Type Name Description FST < System.Nullable < System.Int64 >> fst System.Boolean fasterButMoreRam Properties | Improve this Doc View Source NoOutput Declaration public long? NoOutput { get; } Property Value Type Description System.Nullable < System.Int64 > Methods | Improve this Doc View Source FindTargetArc(Int32, FST.Arc<Nullable<Int64>>, FST.Arc<Nullable<Int64>>, Boolean, FST.BytesReader) Declaration public FST.Arc<long?> FindTargetArc(int ch, FST.Arc<long?> follow, FST.Arc<long?> arc, bool useCache, FST.BytesReader fstReader) Parameters Type Name Description System.Int32 ch FST.Arc < System.Nullable < System.Int64 >> follow FST.Arc < System.Nullable < System.Int64 >> arc System.Boolean useCache FST.BytesReader fstReader Returns Type Description FST.Arc < System.Nullable < System.Int64 >> | Improve this Doc View Source GetBytesReader() Declaration public FST.BytesReader GetBytesReader() Returns Type Description FST.BytesReader | Improve this Doc View Source GetFirstArc(FST.Arc<Nullable<Int64>>) Declaration public FST.Arc<long?> GetFirstArc(FST.Arc<long?> arc) Parameters Type Name Description FST.Arc < System.Nullable < System.Int64 >> arc Returns Type Description FST.Arc < System.Nullable < System.Int64 >>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.IDictionary.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.IDictionary.html",
    "title": "Interface IDictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDictionary Dictionary interface for retrieving morphological data by id. Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IDictionary Methods | Improve this Doc View Source GetBaseForm(Int32, Char[], Int32, Int32) Get base form of word. Declaration string GetBaseForm(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Base form (only different for inflected words, otherwise null). | Improve this Doc View Source GetInflectionForm(Int32) Get inflection form of tokens. Declaration string GetInflectionForm(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Inflection form, or null. | Improve this Doc View Source GetInflectionType(Int32) Get inflection type of tokens. Declaration string GetInflectionType(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Inflection type, or null. | Improve this Doc View Source GetLeftId(Int32) Get left id of specified word. Declaration int GetLeftId(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Left id. | Improve this Doc View Source GetPartOfSpeech(Int32) Get Part-Of-Speech of tokens Declaration string GetPartOfSpeech(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.String Part-Of-Speech of the token. | Improve this Doc View Source GetPronunciation(Int32, Char[], Int32, Int32) Get pronunciation of tokens Declaration string GetPronunciation(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Pronunciation of the token. | Improve this Doc View Source GetReading(Int32, Char[], Int32, Int32) Get reading of tokens. Declaration string GetReading(int wordId, char[] surface, int off, int len) Parameters Type Name Description System.Int32 wordId Word ID of token. System.Char [] surface System.Int32 off System.Int32 len Returns Type Description System.String Reading of the token. | Improve this Doc View Source GetRightId(Int32) Get right id of specified word. Declaration int GetRightId(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Right id. | Improve this Doc View Source GetWordCost(Int32) Get word cost of specified word Declaration int GetWordCost(int wordId) Parameters Type Name Description System.Int32 wordId Word ID of token. Returns Type Description System.Int32 Word's cost."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.Dictionary.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.Dictionary.html",
    "title": "Class Dictionary | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Dictionary Inheritance System.Object Dictionary Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class Dictionary Fields | Improve this Doc View Source INTERNAL_SEPARATOR Declaration public static readonly string INTERNAL_SEPARATOR Field Value Type Description System.String"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.ConnectionCosts.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.ConnectionCosts.html",
    "title": "Class ConnectionCosts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCosts n-gram connection cost data Inheritance System.Object ConnectionCosts Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class ConnectionCosts Fields | Improve this Doc View Source FILENAME_SUFFIX Declaration public static readonly string FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source HEADER Declaration public static readonly string HEADER Field Value Type Description System.String | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32, Int32) Declaration public int Get(int forwardId, int backwardId) Parameters Type Name Description System.Int32 forwardId System.Int32 backwardId Returns Type Description System.Int32 | Improve this Doc View Source GetInstance() Declaration public static ConnectionCosts GetInstance() Returns Type Description ConnectionCosts"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.CharacterDefinition.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Dict.CharacterDefinition.html",
    "title": "Class CharacterDefinition | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterDefinition Character category data. Inheritance System.Object CharacterDefinition Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Dict Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CharacterDefinition Fields | Improve this Doc View Source ALPHA Declaration public static readonly byte ALPHA Field Value Type Description System.Byte | Improve this Doc View Source CLASS_COUNT Declaration public static readonly int CLASS_COUNT Field Value Type Description System.Int32 | Improve this Doc View Source CYRILLIC Declaration public static readonly byte CYRILLIC Field Value Type Description System.Byte | Improve this Doc View Source DEFAULT Declaration public static readonly byte DEFAULT Field Value Type Description System.Byte | Improve this Doc View Source FILENAME_SUFFIX Declaration public static readonly string FILENAME_SUFFIX Field Value Type Description System.String | Improve this Doc View Source GREEK Declaration public static readonly byte GREEK Field Value Type Description System.Byte | Improve this Doc View Source HEADER Declaration public static readonly string HEADER Field Value Type Description System.String | Improve this Doc View Source HIRAGANA Declaration public static readonly byte HIRAGANA Field Value Type Description System.Byte | Improve this Doc View Source KANJI Declaration public static readonly byte KANJI Field Value Type Description System.Byte | Improve this Doc View Source KANJINUMERIC Declaration public static readonly byte KANJINUMERIC Field Value Type Description System.Byte | Improve this Doc View Source KATAKANA Declaration public static readonly byte KATAKANA Field Value Type Description System.Byte | Improve this Doc View Source NGRAM Declaration public static readonly byte NGRAM Field Value Type Description System.Byte | Improve this Doc View Source NUMERIC Declaration public static readonly byte NUMERIC Field Value Type Description System.Byte | Improve this Doc View Source SPACE Declaration public static readonly byte SPACE Field Value Type Description System.Byte | Improve this Doc View Source SYMBOL Declaration public static readonly byte SYMBOL Field Value Type Description System.Byte | Improve this Doc View Source VERSION Declaration public static readonly int VERSION Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetCharacterClass(Char) Declaration public byte GetCharacterClass(char c) Parameters Type Name Description System.Char c Returns Type Description System.Byte | Improve this Doc View Source GetInstance() Declaration public static CharacterDefinition GetInstance() Returns Type Description CharacterDefinition | Improve this Doc View Source IsGroup(Char) Declaration public bool IsGroup(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source IsInvoke(Char) Declaration public bool IsInvoke(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source IsKanji(Char) Declaration public bool IsKanji(char c) Parameters Type Name Description System.Char c Returns Type Description System.Boolean | Improve this Doc View Source LookupCharacterClass(String) Declaration public static byte LookupCharacterClass(string characterClassName) Parameters Type Name Description System.String characterClassName Returns Type Description System.Byte"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.html",
    "title": "Namespace Lucene.Net.Analysis.It | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.It Classes ItalianAnalyzer Analyzer for Italian. You must specify the required LuceneVersion compatibility when creating ItalianAnalyzer : As of 3.6, ItalianLightStemFilter is used for less aggressive stemming. As of 3.2, ElisionFilter with a set of Italian contractions is used by default. ItalianLightStemFilter A TokenFilter that applies ItalianLightStemmer to stem Italian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . ItalianLightStemFilterFactory Factory for ItalianLightStemFilter . <fieldType name=\"text_itlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ItalianLightStemFilterFactory\"/> </analyzer> </fieldType> ItalianLightStemmer Light Stemmer for Italian. This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.ItalianLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.It.ItalianLightStemmer.html",
    "title": "Class ItalianLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ItalianLightStemmer Light Stemmer for Italian. This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy Inheritance System.Object ItalianLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.It Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ItalianLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.html",
    "title": "Namespace Lucene.Net.Analysis.Compound | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Compound Classes CompoundWordTokenFilterBase Base class for decomposition token filters. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. As of 4.4, CompoundWordTokenFilterBase doesn't update offsets. CompoundWordTokenFilterBase.CompoundToken Helper class to hold decompounded token information DictionaryCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a brute-force algorithm to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. DictionaryCompoundWordTokenFilterFactory Factory for DictionaryCompoundWordTokenFilter . <fieldType name=\"text_dictcomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DictionaryCompoundWordTokenFilterFactory\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"true\"/> </analyzer> </fieldType> HyphenationCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a hyphenation grammar and a word dictionary to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. HyphenationCompoundWordTokenFilterFactory Factory for HyphenationCompoundWordTokenFilter . This factory accepts the following parameters: hyphenator (mandatory): path to the FOP xml hyphenation pattern. See http://offo.sourceforge.net/hyphenation/ . encoding (optional): encoding of the xml hyphenation file. defaults to UTF-8. dictionary (optional): dictionary of words. defaults to no dictionary. minWordSize (optional): minimal word length that gets decomposed. defaults to 5. minSubwordSize (optional): minimum length of subwords. defaults to 2. maxSubwordSize (optional): maximum length of subwords. defaults to 15. onlyLongestMatch (optional): if true, adds only the longest matching subword to the stream. defaults to false. <fieldType name=\"text_hyphncomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.HyphenationCompoundWordTokenFilterFactory\" hyphenator=\"hyphenator.xml\" encoding=\"UTF-8\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"false\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.html",
    "title": "Namespace Lucene.Net.Analysis.Compound.Hyphenation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Compound.Hyphenation Classes ByteVector This class implements a simple byte vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. CharVector This class implements a simple char vector with access to the underlying array. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Hyphen This class represents a hyphen. A 'full' hyphen is made of 3 parts: the pre-break text, post-break text and no-break. If no line-break is generated at this position, the no-break text is used, otherwise, pre-break and post-break are used. Typically, pre-break is equal to the hyphen character and the others are empty. However, this general scheme allows support for cases in some languages where words change spelling if they're split across lines, like german's 'backen' which hyphenates 'bak-ken'. BTW, this comes from TeX. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Hyphenation This class represents a hyphenated word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. HyphenationTree This tree structure stores the hyphenation patterns in an efficient way for fast lookup. It provides the provides the method to hyphenate a word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. PatternParser A XMLReader document handler to read and parse hyphenation patterns from a XML file. LUCENENET: This class has been refactored from its Java counterpart to use XmlReader rather than a SAX parser. TernaryTree Ternary Search Tree. A ternary search tree is a hybrid between a binary tree and a digital search tree (trie). Keys are limited to strings. A data value of type char is stored in each leaf node. It can be used as an index (or pointer) to the data. Branches that only contain one key are compressed to one node by storing a pointer to the trailer substring of the key. This class is intended to serve as base class or helper class to implement Dictionary collections or the like. Ternary trees have some nice properties as the following: the tree can be traversed in sorted order, partial matches (wildcard) can be implemented, retrieval of all keys within a given distance from the target, etc. The storage requirements are higher than a binary tree but a lot less than a trie. Performance is comparable with a hash table, sometimes it outperforms a hash function (most of the time can determine a miss faster than a hash). The main purpose of this java port is to serve as a base for implementing TeX's hyphenation algorithm (see The TeXBook, appendix H). Each language requires from 5000 to 15000 hyphenation patterns which will be keys in this tree. The strings patterns are usually small (from 2 to 5 characters), but each char in the tree is stored in a node. Thus memory usage is the main concern. We will sacrifice 'elegance' to keep memory requirements to the minimum. Using java's char type as pointer (yes, I know pointer it is a forbidden word in java) we can keep the size of the node to be just 8 bytes (3 pointers and the data char). This gives room for about 65000 nodes. In my tests the english patterns took 7694 nodes and the german patterns 10055 nodes, so I think we are safe. All said, this is a map with strings as keys and char as value. Pretty limited!. It can be extended to a general map by using the string representation of an object and using the char value as an index to an array that contains the object values. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. TernaryTree.Iterator Enumerator for TernaryTree LUCENENET NOTE: This differs a bit from its Java counterpart to adhere to .NET IEnumerator semantics. In Java, when the TernaryTree.Iterator is instantiated, it is already positioned at the first element. However, to act like a .NET IEnumerator, the initial state is undefined and considered to be before the first element until MoveNext() is called, and if a move took place it will return true ; Interfaces IPatternConsumer This interface is used to connect the XML pattern file parser to the hyphenation tree. This interface has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified."
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IReaderIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IReaderIterator.html",
    "title": "Interface PackedInt32s.IReaderIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface PackedInt32s.IReaderIterator Run-once iterator interface, to decode previously saved PackedInt32s . Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IReaderIterator Properties | Improve this Doc View Source BitsPerValue Returns number of bits per value. Declaration int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Count Returns number of values. NOTE: This was size() in Lucene. Declaration int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Ord Returns the current position. Declaration int Ord { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Next() Returns next value. Declaration long Next() Returns Type Description System.Int64 | Improve this Doc View Source Next(Int32) Returns at least 1 and at most count next values, the returned ref MUST NOT be modified. Declaration Int64sRef Next(int count) Parameters Type Name Description System.Int32 count Returns Type Description Int64sRef Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IEncoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IEncoder.html",
    "title": "Interface PackedInt32s.IEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface PackedInt32s.IEncoder An encoder for packed integers. Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IEncoder Properties | Improve this Doc View Source ByteBlockCount The minimum number of byte blocks to encode in a single iteration, when using byte encoding. Declaration int ByteBlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteValueCount The number of values that can be stored in ByteBlockCount byte blocks. Declaration int ByteValueCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64BlockCount The minimum number of long blocks to encode in a single iteration, when using long encoding. NOTE: This was longBlockCount() in Lucene Declaration int Int64BlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64ValueCount The number of values that can be stored in Int64BlockCount long blocks. NOTE: This was longValueCount() in Lucene Declaration int Int64ValueCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Encode(Int32[], Int32, Byte[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write 8 * iterations * BlockCount blocks into blocks . Declaration void Encode(int[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int32[], Int32, Int64[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write iterations * BlockCount blocks into blocks . Declaration void Encode(int[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int64[], Int32, Byte[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write 8 * iterations * BlockCount blocks into blocks . Declaration void Encode(long[] values, int valuesOffset, byte[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. | Improve this Doc View Source Encode(Int64[], Int32, Int64[], Int32, Int32) Read iterations * ValueCount values from values , encode them and write iterations * BlockCount blocks into blocks . Declaration void Encode(long[] values, int valuesOffset, long[] blocks, int blocksOffset, int iterations) Parameters Type Name Description System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start reading values. System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start writing blocks. System.Int32 iterations Controls how much data to encode. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IDecoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.IDecoder.html",
    "title": "Interface PackedInt32s.IDecoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface PackedInt32s.IDecoder A decoder for packed integers. Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public interface IDecoder Properties | Improve this Doc View Source ByteBlockCount The minimum number of System.Byte blocks to encode in a single iteration, when using byte encoding. Declaration int ByteBlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ByteValueCount The number of values that can be stored in ByteBlockCount System.Byte blocks. Declaration int ByteValueCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64BlockCount The minimum number of System.Int64 blocks to encode in a single iteration, when using long encoding. NOTE: This was longBlockCount() in Lucene. Declaration int Int64BlockCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Int64ValueCount The number of values that can be stored in Int64BlockCount System.Int64 blocks. NOTE: This was longValueCount() in Lucene. Declaration int Int64ValueCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Decode(Byte[], Int32, Int32[], Int32, Int32) Read 8 * iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(byte[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Byte[], Int32, Int64[], Int32, Int32) Read 8 * iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(byte[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Byte [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Int64[], Int32, Int32[], Int32, Int32) Read iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(long[] blocks, int blocksOffset, int[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int32 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. | Improve this Doc View Source Decode(Int64[], Int32, Int64[], Int32, Int32) Read iterations * BlockCount blocks from blocks , decode them and write iterations * ValueCount values into values . Declaration void Decode(long[] blocks, int blocksOffset, long[] values, int valuesOffset, int iterations) Parameters Type Name Description System.Int64 [] blocks The long blocks that hold packed integer values. System.Int32 blocksOffset The offset where to start reading blocks. System.Int64 [] values The values buffer. System.Int32 valuesOffset The offset where to start writing values. System.Int32 iterations Controls how much data to decode. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Header.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Header.html",
    "title": "Class PackedInt32s.Header | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Header Header identifying the structure of a packed integer array. Inheritance System.Object PackedInt32s.Header Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class Header Constructors | Improve this Doc View Source Header(PackedInt32s.Format, Int32, Int32, Int32) Declaration public Header(PackedInt32s.Format format, int valueCount, int bitsPerValue, int version) Parameters Type Name Description PackedInt32s.Format format System.Int32 valueCount System.Int32 bitsPerValue System.Int32 version Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.FormatAndBits.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.FormatAndBits.html",
    "title": "Class PackedInt32s.FormatAndBits | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.FormatAndBits Simple class that holds a format and a number of bits per value. Inheritance System.Object PackedInt32s.FormatAndBits Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class FormatAndBits Constructors | Improve this Doc View Source FormatAndBits(PackedInt32s.Format, Int32) Declaration public FormatAndBits(PackedInt32s.Format format, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format System.Int32 bitsPerValue Properties | Improve this Doc View Source BitsPerValue Declaration public int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Format Declaration public PackedInt32s.Format Format { get; } Property Value Type Description PackedInt32s.Format Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Format.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Format.html",
    "title": "Class PackedInt32s.Format | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Format A format to write packed System.Int32 s. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s.Format Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class Format Fields | Improve this Doc View Source PACKED Compact format, all bits are written contiguously. Declaration public static readonly PackedInt32s.Format PACKED Field Value Type Description PackedInt32s.Format | Improve this Doc View Source PACKED_SINGLE_BLOCK A format that may insert padding bits to improve encoding and decoding speed. Since this format doesn't support all possible bits per value, you should never use it directly, but rather use FastestFormatAndBits(Int32, Int32, Single) to find the format that best suits your needs. Declaration public static readonly PackedInt32s.Format PACKED_SINGLE_BLOCK Field Value Type Description PackedInt32s.Format Properties | Improve this Doc View Source Id Returns the ID of the format. Declaration public int Id { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Values Declaration public static IEnumerable<PackedInt32s.Format> Values { get; } Property Value Type Description System.Collections.Generic.IEnumerable < PackedInt32s.Format > Methods | Improve this Doc View Source ById(Int32) Get a format according to its ID. Declaration public static PackedInt32s.Format ById(int id) Parameters Type Name Description System.Int32 id Returns Type Description PackedInt32s.Format | Improve this Doc View Source ByteCount(Int32, Int32, Int32) Computes how many System.Byte blocks are needed to store valueCount values of size bitsPerValue . Declaration public virtual long ByteCount(int packedIntsVersion, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description System.Int64 | Improve this Doc View Source Int64Count(Int32, Int32, Int32) Computes how many System.Int64 blocks are needed to store valueCount values of size bitsPerValue . NOTE: This was longCount() in Lucene. Declaration public virtual int Int64Count(int packedIntsVersion, int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 packedIntsVersion System.Int32 valueCount System.Int32 bitsPerValue Returns Type Description System.Int32 | Improve this Doc View Source IsSupported(Int32) Tests whether the provided number of bits per value is supported by the format. Declaration public virtual bool IsSupported(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Boolean | Improve this Doc View Source OverheadPerValue(Int32) Returns the overhead per value, in bits. Declaration public virtual float OverheadPerValue(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Single | Improve this Doc View Source OverheadRatio(Int32) Returns the overhead ratio ( overhead per value / bits per value ). Declaration public virtual float OverheadRatio(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Single Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataOutput.html",
    "title": "Class PackedDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedDataOutput A DataOutput wrapper to write unaligned, variable-length packed integers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedDataOutput Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PackedDataOutput Constructors | Improve this Doc View Source PackedDataOutput(DataOutput) Create a new instance that wraps out . Declaration public PackedDataOutput(DataOutput out) Parameters Type Name Description DataOutput out Methods | Improve this Doc View Source Flush() Flush pending bits to the underlying DataOutput . Declaration public void Flush() | Improve this Doc View Source WriteInt64(Int64, Int32) Write a value using exactly bitsPerValue bits. NOTE: This was writeLong() in Lucene. Declaration public void WriteInt64(long value, int bitsPerValue) Parameters Type Name Description System.Int64 value System.Int32 bitsPerValue Extension Methods Number.IsNumber(Object) See Also PackedDataInput"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedDataInput.html",
    "title": "Class PackedDataInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedDataInput A DataInput wrapper to read unaligned, variable-length packed integers. This API is much slower than the PackedInt32s fixed-length API but can be convenient to save space. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedDataInput Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class PackedDataInput Constructors | Improve this Doc View Source PackedDataInput(DataInput) Create a new instance that wraps in . Declaration public PackedDataInput(DataInput in) Parameters Type Name Description DataInput in Methods | Improve this Doc View Source ReadInt64(Int32) Read the next System.Int64 using exactly bitsPerValue bits. NOTE: This was readLong() in Lucene. Declaration public long ReadInt64(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue Returns Type Description System.Int64 | Improve this Doc View Source SkipToNextByte() If there are pending bits (at most 7), they will be ignored and the next value will be read starting at the next byte. Declaration public void SkipToNextByte() Extension Methods Number.IsNumber(Object) See Also PackedDataOutput"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoEncoder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.EliasFanoEncoder.html",
    "title": "Class EliasFanoEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EliasFanoEncoder Encode a non decreasing sequence of non negative whole numbers in the Elias-Fano encoding that was introduced in the 1970's by Peter Elias and Robert Fano. The Elias-Fano encoding is a high bits / low bits representation of a monotonically increasing sequence of numValues > 0 natural numbers x[i] 0 <= x[0] <= x[1] <= ... <= x[numValues-2] <= x[numValues-1] <= upperBound where upperBound > 0 is an upper bound on the last value. The Elias-Fano encoding uses less than half a bit per encoded number more than the smallest representation that can encode any monotone sequence with the same bounds. The lower L bits of each x[i] are stored explicitly and contiguously in the lower-bits array, with L chosen as ( Log() base 2): L = max(0, floor(log(upperBound/numValues))) The upper bits are stored in the upper-bits array as a sequence of unary-coded gaps ( x[-1] = 0 ): (x[i]/2 L) - (x[i-1]/2 L) The unary code encodes a natural number n by n 0 bits followed by a 1 bit: 0...01 . In the upper bits the total the number of 1 bits is numValues and the total number of 0 bits is: floor(x[numValues-1]/2 L) <= upperBound/(2 max(0, floor(log(upperBound/numValues)))) <= 2 numValues The Elias-Fano encoding uses at most 2 + Ceil(Log(upperBound/numValues)) bits per encoded number. With upperBound in these bounds ( p is an integer): 2 p < x[numValues-1] <= upperBound <= 2 *(p+1) the number of bits per encoded number is minimized. In this implementation the values in the sequence can be given as long , numValues = 0 and upperBound = 0 are allowed, and each of the upper and lower bit arrays should fit in a long[] . An index of positions of zero's in the upper bits is also built. this implementation is based on this article: Sebastiano Vigna, \"Quasi Succinct Indices\", June 19, 2012, sections 3, 4 and 9. Retrieved from http://arxiv.org/pdf/1206.4300 . The articles originally describing the Elias-Fano representation are: Peter Elias, \"Efficient storage and retrieval by content and address of static files\", J. Assoc. Comput. Mach., 21(2):246â€\"260, 1974. Robert M. Fano, \"On the number of bits required to implement an associative memory\", Memorandum 61, Computer Structures Group, Project MAC, MIT, Cambridge, Mass., 1971. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object EliasFanoEncoder Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class EliasFanoEncoder Constructors | Improve this Doc View Source EliasFanoEncoder(Int64, Int64) Construct an Elias-Fano encoder using DEFAULT_INDEX_INTERVAL . Declaration public EliasFanoEncoder(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues System.Int64 upperBound | Improve this Doc View Source EliasFanoEncoder(Int64, Int64, Int64) Construct an Elias-Fano encoder. After construction, call EncodeNext(Int64) numValues times to encode a non decreasing sequence of non negative numbers. Declaration public EliasFanoEncoder(long numValues, long upperBound, long indexInterval) Parameters Type Name Description System.Int64 numValues The number of values that is to be encoded. System.Int64 upperBound At least the highest value that will be encoded. For space efficiency this should not exceed the power of two that equals or is the first higher than the actual maximum. When numValues >= (upperBound/3) a FixedBitSet will take less space. System.Int64 indexInterval The number of high zero bits for which a single index entry is built. The index will have at most 2 * numValues / indexInterval entries and each index entry will use at most Ceil(Log2(3 * numValues)) bits, see EliasFanoEncoder . Exceptions Type Condition System.ArgumentException when: numValues is negative, or numValues is non negative and upperBound is negative, or the low bits do not fit in a long[] : (L * numValues / 64) > System.Int32.MaxValue , or the high bits do not fit in a long[] : (2 * numValues / 64) > System.Int32.MaxValue , or indexInterval < 2 , the index bits do not fit in a long[] : (numValues / indexInterval * ceil(2log(3 * numValues)) / 64) > System.Int32.MaxValue . Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL The default index interval for zero upper bits. Declaration public const long DEFAULT_INDEX_INTERVAL = 256L Field Value Type Description System.Int64 Properties | Improve this Doc View Source IndexBits Expert. The index bits. Declaration public virtual long[] IndexBits { get; } Property Value Type Description System.Int64 [] | Improve this Doc View Source LowerBits Expert. The low bits. Declaration public virtual long[] LowerBits { get; } Property Value Type Description System.Int64 [] | Improve this Doc View Source UpperBits Expert. The high bits. Declaration public virtual long[] UpperBits { get; } Property Value Type Description System.Int64 [] Methods | Improve this Doc View Source EncodeNext(Int64) Call at most Lucene.Net.Util.Packed.EliasFanoEncoder.numValues times to encode a non decreasing sequence of non negative numbers. Declaration public virtual void EncodeNext(long x) Parameters Type Name Description System.Int64 x The next number to be encoded. Exceptions Type Condition System.InvalidOperationException when called more than Lucene.Net.Util.Packed.EliasFanoEncoder.numValues times. System.ArgumentException when: x is smaller than an earlier encoded value, or x is larger than Lucene.Net.Util.Packed.EliasFanoEncoder.upperBound . | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDecoder() Returns an EliasFanoDecoder to access the encoded values. Perform all calls to EncodeNext(Int64) before calling GetDecoder() . Declaration public virtual EliasFanoDecoder GetDecoder() Returns Type Description EliasFanoDecoder | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source SufficientlySmallerThanBitSet(Int64, Int64) Provide an indication that it is better to use an EliasFanoEncoder than a FixedBitSet to encode document identifiers. This indication is not precise and may change in the future. An EliasFanoEncoder is favored when the size of the encoding by the EliasFanoEncoder (including some space for its index) is at most about 5/6 of the size of the FixedBitSet , this is the same as comparing estimates of the number of bits accessed by a pair of FixedBitSet s and by a pair of non indexed EliasFanoDocIdSet s when determining the intersections of the pairs. A bit set is preferred when upperbound <= 256 . It is assumed that DEFAULT_INDEX_INTERVAL is used. Declaration public static bool SufficientlySmallerThanBitSet(long numValues, long upperBound) Parameters Type Name Description System.Int64 numValues The number of document identifiers that is to be encoded. Should be non negative. System.Int64 upperBound The maximum possible value for a document identifier. Should be at least numValues . Returns Type Description System.Boolean | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.INode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.INode.html",
    "title": "Interface Builder.INode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface Builder.INode Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public interface INode Properties | Improve this Doc View Source IsCompiled Declaration bool IsCompiled { get; } Property Value Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.FreezeTail-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.FreezeTail-1.html",
    "title": "Class Builder.FreezeTail<S> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder.FreezeTail<S> Expert: this is invoked by Builder whenever a suffix is serialized. Inheritance System.Object Builder.FreezeTail<S> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public abstract class FreezeTail<S> Type Parameters Name Description S Methods | Improve this Doc View Source Freeze(Builder.UnCompiledNode<S>[], Int32, Int32sRef) Declaration public abstract void Freeze(Builder.UnCompiledNode<S>[] frontier, int prefixLenPlus1, Int32sRef prevInput) Parameters Type Name Description Builder.UnCompiledNode <S>[] frontier System.Int32 prefixLenPlus1 Int32sRef prevInput Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.Arc-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Fst.Builder.Arc-1.html",
    "title": "Class Builder.Arc<S> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Builder.Arc<S> Expert: holds a pending (seen but not yet serialized) arc. Inheritance System.Object Builder.Arc<S> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Fst Assembly : Lucene.Net.dll Syntax public class Arc<S> Type Parameters Name Description S Properties | Improve this Doc View Source IsFinal Declaration public bool IsFinal { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Label Declaration public int Label { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source NextFinalOutput Declaration public S NextFinalOutput { get; set; } Property Value Type Description S | Improve this Doc View Source Output Declaration public S Output { get; set; } Property Value Type Description S | Improve this Doc View Source Target Declaration public Builder.INode Target { get; set; } Property Value Type Description Builder.INode Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicAutomata.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.BasicAutomata.html",
    "title": "Class BasicAutomata | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicAutomata Construction of basic automata. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicAutomata Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public sealed class BasicAutomata Methods | Improve this Doc View Source MakeAnyChar() Returns a new (deterministic) automaton that accepts any single codepoint. Declaration public static Automaton MakeAnyChar() Returns Type Description Automaton | Improve this Doc View Source MakeAnyString() Returns a new (deterministic) automaton that accepts all strings. Declaration public static Automaton MakeAnyString() Returns Type Description Automaton | Improve this Doc View Source MakeChar(Int32) Returns a new (deterministic) automaton that accepts a single codepoint of the given value. Declaration public static Automaton MakeChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description Automaton | Improve this Doc View Source MakeCharRange(Int32, Int32) Returns a new (deterministic) automaton that accepts a single codepoint whose value is in the given interval (including both end points). Declaration public static Automaton MakeCharRange(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source MakeEmpty() Returns a new (deterministic) automaton with the empty language. Declaration public static Automaton MakeEmpty() Returns Type Description Automaton | Improve this Doc View Source MakeEmptyString() Returns a new (deterministic) automaton that accepts only the empty string. Declaration public static Automaton MakeEmptyString() Returns Type Description Automaton | Improve this Doc View Source MakeInterval(Int32, Int32, Int32) Returns a new automaton that accepts strings representing decimal non-negative integers in the given interval. Declaration public static Automaton MakeInterval(int min, int max, int digits) Parameters Type Name Description System.Int32 min Minimal value of interval. System.Int32 max Maximal value of interval (both end points are included in the interval). System.Int32 digits If > 0, use fixed number of digits (strings must be prefixed by 0's to obtain the right length) - otherwise, the number of digits is not fixed. Returns Type Description Automaton Exceptions Type Condition System.ArgumentException If min > max or if numbers in the interval cannot be expressed with the given fixed number of digits. | Improve this Doc View Source MakeString(Int32[], Int32, Int32) Declaration public static Automaton MakeString(int[] word, int offset, int length) Parameters Type Name Description System.Int32 [] word System.Int32 offset System.Int32 length Returns Type Description Automaton | Improve this Doc View Source MakeString(String) Returns a new (deterministic) automaton that accepts the single given string. Declaration public static Automaton MakeString(string s) Parameters Type Name Description System.String s Returns Type Description Automaton | Improve this Doc View Source MakeStringUnion(ICollection<BytesRef>) Returns a new (deterministic and minimal) automaton that accepts the union of the given collection of BytesRef s representing UTF-8 encoded strings. Declaration public static Automaton MakeStringUnion(ICollection<BytesRef> utf8Strings) Parameters Type Name Description System.Collections.Generic.ICollection < BytesRef > utf8Strings The input strings, UTF-8 encoded. The collection must be in sorted order. Returns Type Description Automaton An Automaton accepting all input strings. The resulting automaton is codepoint based (full unicode codepoints on transitions). Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Automaton.Automaton.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Automaton.Automaton.html",
    "title": "Class Automaton | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Automaton Finite-state automaton with regular expression operations. Class invariants: An automaton is either represented explicitly (with State and Transition objects) or with a singleton string (see Singleton and ExpandSingleton() ) in case the automaton is known to accept exactly one string. (Implicitly, all states and transitions of an automaton are reachable from its initial state.) Automata are always reduced (see Reduce() ) and have no transitions to dead states (see RemoveDeadTransitions() ). If an automaton is nondeterministic, then IsDeterministic returns false (but the converse is not required). Automata provided as input to operations are generally assumed to be disjoint. If the states or transitions are manipulated manually, the RestoreInvariant() method and IsDeterministic setter should be used afterwards to restore representation invariants that are assumed by the built-in automata operations. Note: this class has internal mutable state and is not thread safe. It is the caller's responsibility to ensure any necessary synchronization if you wish to use the same Automaton from multiple threads. In general it is instead recommended to use a RunAutomaton for multithreaded matching: it is immutable, thread safe, and much faster. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Automaton Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Automaton Assembly : Lucene.Net.dll Syntax public class Automaton Constructors | Improve this Doc View Source Automaton() Declaration public Automaton() | Improve this Doc View Source Automaton(State) Constructs a new automaton that accepts the empty language. Using this constructor, automata can be constructed manually from State and Transition objects. Declaration public Automaton(State initial) Parameters Type Name Description State initial See Also State Transition Fields | Improve this Doc View Source MINIMIZE_HOPCROFT Minimize using Hopcroft's O(n log n) algorithm. this is regarded as one of the most generally efficient algorithms that exist. Declaration public const int MINIMIZE_HOPCROFT = 2 Field Value Type Description System.Int32 See Also SetMinimization(Int32) Properties | Improve this Doc View Source Info Associates extra information with this automaton. Declaration public virtual object Info { get; set; } Property Value Type Description System.Object | Improve this Doc View Source IsDeterministic Returns deterministic flag for this automaton. Declaration public virtual bool IsDeterministic { get; set; } Property Value Type Description System.Boolean true if the automaton is definitely deterministic, false if the automaton may be nondeterministic | Improve this Doc View Source IsEmptyString See IsEmptyString(Automaton) . Declaration public virtual bool IsEmptyString { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Singleton Returns the singleton string for this automaton. An automaton that accepts exactly one string may be represented in singleton mode. In that case, this method may be used to obtain the string. Declaration public virtual string Singleton { get; } Property Value Type Description System.String String, null if this automaton is not in singleton mode. Methods | Improve this Doc View Source ClearNumberedStates() Declaration public virtual void ClearNumberedStates() | Improve this Doc View Source Clone() Returns a clone of this automaton. Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Complement() See Complement(Automaton) . Declaration public virtual Automaton Complement() Returns Type Description Automaton | Improve this Doc View Source Concatenate(Automaton) See Concatenate(Automaton, Automaton) . Declaration public virtual Automaton Concatenate(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Concatenate(IList<Automaton>) See Concatenate(IList<Automaton>) . Declaration public static Automaton Concatenate(IList<Automaton> l) Parameters Type Name Description System.Collections.Generic.IList < Automaton > l Returns Type Description Automaton | Improve this Doc View Source Determinize() See Determinize(Automaton) . Declaration public virtual void Determinize() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source ExpandSingleton() Expands singleton representation to normal representation. Does nothing if not in singleton representation. Declaration public virtual void ExpandSingleton() | Improve this Doc View Source GetAcceptStates() Returns the set of reachable accept states. Declaration public virtual ISet<State> GetAcceptStates() Returns Type Description System.Collections.Generic.ISet < State > Set of State objects. | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetInitialState() Gets initial state. Declaration public virtual State GetInitialState() Returns Type Description State state | Improve this Doc View Source GetNumberedStates() Declaration public virtual State[] GetNumberedStates() Returns Type Description State [] | Improve this Doc View Source GetNumberOfStates() Returns the number of states in this automaton. Declaration public virtual int GetNumberOfStates() Returns Type Description System.Int32 | Improve this Doc View Source GetNumberOfTransitions() Returns the number of transitions in this automaton. This number is counted as the total number of edges, where one edge may be a character interval. Declaration public virtual int GetNumberOfTransitions() Returns Type Description System.Int32 | Improve this Doc View Source GetSortedTransitions() Returns a sorted array of transitions for each state (and sets state numbers). Declaration public virtual Transition[][] GetSortedTransitions() Returns Type Description Transition [][] | Improve this Doc View Source GetStartPoints() Returns sorted array of all interval start points. Declaration public virtual int[] GetStartPoints() Returns Type Description System.Int32 [] | Improve this Doc View Source Intersection(Automaton) See Intersection(Automaton, Automaton) . Declaration public virtual Automaton Intersection(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Minimize(Automaton) See Minimize(Automaton) . Returns the automaton being given as argument. Declaration public static Automaton Minimize(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Minus(Automaton) See Minus(Automaton, Automaton) . Declaration public virtual Automaton Minus(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Optional() See Optional(Automaton) . Declaration public virtual Automaton Optional() Returns Type Description Automaton | Improve this Doc View Source Reduce() Reduces this automaton. An automaton is \"reduced\" by combining overlapping and adjacent edge intervals with same destination. Declaration public virtual void Reduce() | Improve this Doc View Source RemoveDeadTransitions() Removes transitions to dead states and calls Reduce() . (A state is \"dead\" if no accept state is reachable from it.) Declaration public virtual void RemoveDeadTransitions() | Improve this Doc View Source Repeat() See Repeat(Automaton) . Declaration public virtual Automaton Repeat() Returns Type Description Automaton | Improve this Doc View Source Repeat(Int32) See Repeat(Automaton, Int32) . Declaration public virtual Automaton Repeat(int min) Parameters Type Name Description System.Int32 min Returns Type Description Automaton | Improve this Doc View Source Repeat(Int32, Int32) See Repeat(Automaton, Int32, Int32) . Declaration public virtual Automaton Repeat(int min, int max) Parameters Type Name Description System.Int32 min System.Int32 max Returns Type Description Automaton | Improve this Doc View Source RestoreInvariant() Restores representation invariant. This method must be invoked before any built-in automata operation is performed if automaton states or transitions are manipulated manually. Declaration public virtual void RestoreInvariant() See Also IsDeterministic | Improve this Doc View Source SetAllowMutate(Boolean) Sets or resets allow mutate flag. If this flag is set, then all automata operations may modify automata given as input; otherwise, operations will always leave input automata languages unmodified. By default, the flag is not set. Declaration public static bool SetAllowMutate(bool flag) Parameters Type Name Description System.Boolean flag if true , the flag is set Returns Type Description System.Boolean previous value of the flag | Improve this Doc View Source SetMinimization(Int32) Selects minimization algorithm (default: MINIMIZE_HOPCROFT ). Declaration public static void SetMinimization(int algorithm) Parameters Type Name Description System.Int32 algorithm minimization algorithm | Improve this Doc View Source SetMinimizeAlways(Boolean) Sets or resets minimize always flag. If this flag is set, then Minimize(Automaton) will automatically be invoked after all operations that otherwise may produce non-minimal automata. By default, the flag is not set. Declaration public static void SetMinimizeAlways(bool flag) Parameters Type Name Description System.Boolean flag if true , the flag is set | Improve this Doc View Source SetNumberedStates(State[]) Declaration public virtual void SetNumberedStates(State[] states) Parameters Type Name Description State [] states | Improve this Doc View Source SetNumberedStates(State[], Int32) Declaration public virtual void SetNumberedStates(State[] states, int count) Parameters Type Name Description State [] states System.Int32 count | Improve this Doc View Source SubsetOf(Automaton) See SubsetOf(Automaton, Automaton) . Declaration public virtual bool SubsetOf(Automaton a) Parameters Type Name Description Automaton a Returns Type Description System.Boolean | Improve this Doc View Source ToDot() Returns Graphviz Dot representation of this automaton. Declaration public virtual string ToDot() Returns Type Description System.String | Improve this Doc View Source ToString() Returns a string representation of this automaton. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source Union(Automaton) See Union(Automaton, Automaton) . Declaration public virtual Automaton Union(Automaton a) Parameters Type Name Description Automaton a Returns Type Description Automaton | Improve this Doc View Source Union(ICollection<Automaton>) See Union(ICollection<Automaton>) . Declaration public static Automaton Union(ICollection<Automaton> l) Parameters Type Name Description System.Collections.Generic.ICollection < Automaton > l Returns Type Description Automaton Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.AttributeSource.State.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.AttributeSource.State.html",
    "title": "Class AttributeSource.State | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AttributeSource.State This class holds the state of an AttributeSource . Inheritance System.Object AttributeSource.State Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class State Methods | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object Extension Methods Number.IsNumber(Object) See Also CaptureState () RestoreState ( AttributeSource.State )"
  },
  "api/Lucene.Net/Lucene.Net.Util.ArrayUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.ArrayUtil.html",
    "title": "Class ArrayUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArrayUtil Methods for manipulating arrays. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ArrayUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class ArrayUtil Fields | Improve this Doc View Source MAX_ARRAY_LENGTH Maximum length for an array; we set this to \"a bit\" below System.Int32.MaxValue because the exact max allowed byte[] is JVM dependent, so we want to avoid a case where a large value worked during indexing on one JVM but failed later at search time with a different JVM. Declaration public static readonly int MAX_ARRAY_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Byte[], Int32, Byte[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(byte[] left, int offsetLeft, byte[] right, int offsetRight, int length) Parameters Type Name Description System.Byte [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Byte [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Equals<T>(T[], T[]) | Improve this Doc View Source Equals(Char[], Int32, Char[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(char[] left, int offsetLeft, char[] right, int offsetRight, int length) Parameters Type Name Description System.Char [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Char [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Equals<T>(T[], T[]) | Improve this Doc View Source Equals(Int32[], Int32, Int32[], Int32, Int32) See if two array slices are the same. Declaration public static bool Equals(int[] left, int offsetLeft, int[] right, int offsetRight, int length) Parameters Type Name Description System.Int32 [] left The left array to compare System.Int32 offsetLeft The offset into the array. Must be positive System.Int32 [] right The right array to compare System.Int32 offsetRight the offset into the right array. Must be positive System.Int32 length The length of the section of the array to compare Returns Type Description System.Boolean true if the two arrays, starting at their respective offsets, are equal See Also Equals<T>(T[], T[]) | Improve this Doc View Source GetHashCode(Byte[], Int32, Int32) Returns hash of bytes in range start (inclusive) to end (inclusive) Declaration public static int GetHashCode(byte[] array, int start, int end) Parameters Type Name Description System.Byte [] array System.Int32 start System.Int32 end Returns Type Description System.Int32 | Improve this Doc View Source GetHashCode(Char[], Int32, Int32) Returns hash of chars in range start (inclusive) to end (inclusive) Declaration public static int GetHashCode(char[] array, int start, int end) Parameters Type Name Description System.Char [] array System.Int32 start System.Int32 end Returns Type Description System.Int32 | Improve this Doc View Source GetNaturalComparer<T>() Get the natural System.Collections.Generic.IComparer<T> for the provided object class. The comparer returned depends on the argument: If the type is System.String , the comparer returned uses the System.String.CompareOrdinal(System.String,System.String) to make the comparison to ensure that the current culture doesn't affect the results. This is the default string comparison used in Java, and what Lucene's design depends on. If the type implements System.IComparable<T> , the comparer uses System.IComparable<T>.CompareTo(T) for the comparison. This allows the use of types with custom comparison schemes. If neither of the above conditions are true, will default to System.Collections.Generic.Comparer`1.Default . NOTE: This was naturalComparer() in Lucene Declaration public static IComparer<T> GetNaturalComparer<T>() Returns Type Description System.Collections.Generic.IComparer <T> Type Parameters Name Description T | Improve this Doc View Source GetShrinkSize(Int32, Int32, Int32) Declaration public static int GetShrinkSize(int currentSize, int targetSize, int bytesPerElement) Parameters Type Name Description System.Int32 currentSize System.Int32 targetSize System.Int32 bytesPerElement Returns Type Description System.Int32 | Improve this Doc View Source Grow(Boolean[]) Declaration public static bool[] Grow(bool[] array) Parameters Type Name Description System.Boolean [] array Returns Type Description System.Boolean [] | Improve this Doc View Source Grow(Boolean[], Int32) Declaration public static bool[] Grow(bool[] array, int minSize) Parameters Type Name Description System.Boolean [] array System.Int32 minSize Returns Type Description System.Boolean [] | Improve this Doc View Source Grow(Byte[]) Declaration public static byte[] Grow(byte[] array) Parameters Type Name Description System.Byte [] array Returns Type Description System.Byte [] | Improve this Doc View Source Grow(Byte[], Int32) Declaration public static byte[] Grow(byte[] array, int minSize) Parameters Type Name Description System.Byte [] array System.Int32 minSize Returns Type Description System.Byte [] | Improve this Doc View Source Grow(Char[]) Declaration public static char[] Grow(char[] array) Parameters Type Name Description System.Char [] array Returns Type Description System.Char [] | Improve this Doc View Source Grow(Char[], Int32) Declaration public static char[] Grow(char[] array, int minSize) Parameters Type Name Description System.Char [] array System.Int32 minSize Returns Type Description System.Char [] | Improve this Doc View Source Grow(Double[]) Declaration public static double[] Grow(double[] array) Parameters Type Name Description System.Double [] array Returns Type Description System.Double [] | Improve this Doc View Source Grow(Double[], Int32) Declaration public static double[] Grow(double[] array, int minSize) Parameters Type Name Description System.Double [] array System.Int32 minSize Returns Type Description System.Double [] | Improve this Doc View Source Grow(Int16[]) Declaration public static short[] Grow(short[] array) Parameters Type Name Description System.Int16 [] array Returns Type Description System.Int16 [] | Improve this Doc View Source Grow(Int16[], Int32) Declaration public static short[] Grow(short[] array, int minSize) Parameters Type Name Description System.Int16 [] array System.Int32 minSize Returns Type Description System.Int16 [] | Improve this Doc View Source Grow(Int32[]) Declaration public static int[] Grow(int[] array) Parameters Type Name Description System.Int32 [] array Returns Type Description System.Int32 [] | Improve this Doc View Source Grow(Int32[], Int32) Declaration public static int[] Grow(int[] array, int minSize) Parameters Type Name Description System.Int32 [] array System.Int32 minSize Returns Type Description System.Int32 [] | Improve this Doc View Source Grow(Int32[][]) Declaration [CLSCompliant(false)] public static int[][] Grow(int[][] array) Parameters Type Name Description System.Int32 [][] array Returns Type Description System.Int32 [][] | Improve this Doc View Source Grow(Int32[][], Int32) Declaration [CLSCompliant(false)] public static int[][] Grow(int[][] array, int minSize) Parameters Type Name Description System.Int32 [][] array System.Int32 minSize Returns Type Description System.Int32 [][] | Improve this Doc View Source Grow(Int64[]) Declaration public static long[] Grow(long[] array) Parameters Type Name Description System.Int64 [] array Returns Type Description System.Int64 [] | Improve this Doc View Source Grow(Int64[], Int32) Declaration public static long[] Grow(long[] array, int minSize) Parameters Type Name Description System.Int64 [] array System.Int32 minSize Returns Type Description System.Int64 [] | Improve this Doc View Source Grow(SByte[], Int32) Declaration [CLSCompliant(false)] public static sbyte[] Grow(sbyte[] array, int minSize) Parameters Type Name Description System.SByte [] array System.Int32 minSize Returns Type Description System.SByte [] | Improve this Doc View Source Grow(Single[]) Declaration public static float[] Grow(float[] array) Parameters Type Name Description System.Single [] array Returns Type Description System.Single [] | Improve this Doc View Source Grow(Single[], Int32) Declaration public static float[] Grow(float[] array, int minSize) Parameters Type Name Description System.Single [] array System.Int32 minSize Returns Type Description System.Single [] | Improve this Doc View Source Grow(Single[][]) Declaration [CLSCompliant(false)] public static float[][] Grow(float[][] array) Parameters Type Name Description System.Single [][] array Returns Type Description System.Single [][] | Improve this Doc View Source Grow(Single[][], Int32) Declaration [CLSCompliant(false)] public static float[][] Grow(float[][] array, int minSize) Parameters Type Name Description System.Single [][] array System.Int32 minSize Returns Type Description System.Single [][] | Improve this Doc View Source IntroSort<T>(T[]) Sorts the given array in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a) Parameters Type Name Description T[] a Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], IComparer<T>) Sorts the given array using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, IComparer<T> comp) Parameters Type Name Description T[] a System.Collections.Generic.IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], Int32, Int32) Sorts the given array slice in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, int fromIndex, int toIndex) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(T[], Int32, Int32, IComparer<T>) Sorts the given array slice using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small arrays. Declaration public static void IntroSort<T>(T[] a, int fromIndex, int toIndex, IComparer<T> comp) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) System.Collections.Generic.IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source Oversize(Int32, Int32) Returns an array size >= minTargetSize , generally over-allocating exponentially to achieve amortized linear-time cost as the array grows. NOTE: this was originally borrowed from Python 2.4.2 listobject.c sources (attribution in LICENSE.txt), but has now been substantially changed based on discussions from java-dev thread with subject \"Dynamic array reallocation algorithms\", started on Jan 12 2010. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int Oversize(int minTargetSize, int bytesPerElement) Parameters Type Name Description System.Int32 minTargetSize Minimum required value to be returned. System.Int32 bytesPerElement Bytes used by each element of the array. See constants in RamUsageEstimator . Returns Type Description System.Int32 | Improve this Doc View Source ParseInt32(Char[]) Parses the string argument as if it was an System.Int32 value and returns the result. Throws System.FormatException if the string does not represent an int quantity. NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars) Parameters Type Name Description System.Char [] chars A string representation of an int quantity. Returns Type Description System.Int32 The value represented by the argument Exceptions Type Condition System.FormatException If the argument could not be parsed as an int quantity. | Improve this Doc View Source ParseInt32(Char[], Int32, Int32) Parses a char array into an System.Int32 . NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars, int offset, int len) Parameters Type Name Description System.Char [] chars The character array System.Int32 offset The offset into the array System.Int32 len The length Returns Type Description System.Int32 the System.Int32 Exceptions Type Condition System.FormatException If it can't parse | Improve this Doc View Source ParseInt32(Char[], Int32, Int32, Int32) Parses the string argument as if it was an System.Int32 value and returns the result. Throws System.FormatException if the string does not represent an System.Int32 quantity. The second argument specifies the radix to use when parsing the value. NOTE: This was parseInt() in Lucene Declaration public static int ParseInt32(char[] chars, int offset, int len, int radix) Parameters Type Name Description System.Char [] chars A string representation of an int quantity. System.Int32 offset System.Int32 len System.Int32 radix The base to use for conversion. Returns Type Description System.Int32 The value represented by the argument Exceptions Type Condition System.FormatException If the argument could not be parsed as an int quantity. | Improve this Doc View Source Shrink(Boolean[], Int32) Declaration public static bool[] Shrink(bool[] array, int targetSize) Parameters Type Name Description System.Boolean [] array System.Int32 targetSize Returns Type Description System.Boolean [] | Improve this Doc View Source Shrink(Byte[], Int32) Declaration public static byte[] Shrink(byte[] array, int targetSize) Parameters Type Name Description System.Byte [] array System.Int32 targetSize Returns Type Description System.Byte [] | Improve this Doc View Source Shrink(Char[], Int32) Declaration public static char[] Shrink(char[] array, int targetSize) Parameters Type Name Description System.Char [] array System.Int32 targetSize Returns Type Description System.Char [] | Improve this Doc View Source Shrink(Int16[], Int32) Declaration public static short[] Shrink(short[] array, int targetSize) Parameters Type Name Description System.Int16 [] array System.Int32 targetSize Returns Type Description System.Int16 [] | Improve this Doc View Source Shrink(Int32[], Int32) Declaration public static int[] Shrink(int[] array, int targetSize) Parameters Type Name Description System.Int32 [] array System.Int32 targetSize Returns Type Description System.Int32 [] | Improve this Doc View Source Shrink(Int32[][], Int32) Declaration [CLSCompliant(false)] public static int[][] Shrink(int[][] array, int targetSize) Parameters Type Name Description System.Int32 [][] array System.Int32 targetSize Returns Type Description System.Int32 [][] | Improve this Doc View Source Shrink(Int64[], Int32) Declaration public static long[] Shrink(long[] array, int targetSize) Parameters Type Name Description System.Int64 [] array System.Int32 targetSize Returns Type Description System.Int64 [] | Improve this Doc View Source Shrink(Single[][], Int32) Declaration [CLSCompliant(false)] public static float[][] Shrink(float[][] array, int targetSize) Parameters Type Name Description System.Single [][] array System.Int32 targetSize Returns Type Description System.Single [][] | Improve this Doc View Source Swap<T>(T[], Int32, Int32) Swap values stored in slots i and j Declaration public static void Swap<T>(T[] arr, int i, int j) Parameters Type Name Description T[] arr System.Int32 i System.Int32 j Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[]) Sorts the given array in natural order. this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a) Parameters Type Name Description T[] a Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], IComparer<T>) Sorts the given array using the System.Collections.Generic.IComparer<T> . this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, IComparer<T> comp) Parameters Type Name Description T[] a System.Collections.Generic.IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], Int32, Int32) Sorts the given array slice in natural order. this method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, int fromIndex, int toIndex) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(T[], Int32, Int32, IComparer<T>) Sorts the given array slice using the System.Collections.Generic.IComparer<T> . This method uses the Tim sort algorithm, but falls back to binary sort for small arrays. Declaration public static void TimSort<T>(T[] a, int fromIndex, int toIndex, IComparer<T> comp) Parameters Type Name Description T[] a System.Int32 fromIndex Start index (inclusive) System.Int32 toIndex End index (exclusive) System.Collections.Generic.IComparer <T> comp Type Parameters Name Description T | Improve this Doc View Source ToInt32Array(ICollection<Nullable<Int32>>) NOTE: This was toIntArray() in Lucene Declaration public static int[] ToInt32Array(ICollection<int?> ints) Parameters Type Name Description System.Collections.Generic.ICollection < System.Nullable < System.Int32 >> ints Returns Type Description System.Int32 [] Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ItemUpdatedMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.LurchTable-2.ItemUpdatedMethod.html",
    "title": "Delegate LurchTable<TKey, TValue>.ItemUpdatedMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate LurchTable<TKey, TValue>.ItemUpdatedMethod Method signature for the ItemUpdated event Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public delegate void ItemUpdatedMethod(KeyValuePair<TKey, TValue> previous, KeyValuePair<TKey, TValue> next); Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> previous System.Collections.Generic.KeyValuePair <TKey, TValue> next Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.KeyValueUpdate-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.KeyValueUpdate-2.html",
    "title": "Delegate KeyValueUpdate<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate KeyValueUpdate<TKey, TValue> Provides a delegate that performs an atomic update of a key/value pair Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public delegate TValue KeyValueUpdate<TKey, TValue>(TKey key, TValue original); Parameters Type Name Description TKey key TValue original Returns Type Description TValue Type Parameters Name Description TKey TValue Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.KeyValuePredicate-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.KeyValuePredicate-2.html",
    "title": "Delegate KeyValuePredicate<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate KeyValuePredicate<TKey, TValue> Provides a delegate that performs a test on key/value pair Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public delegate bool KeyValuePredicate<TKey, TValue>(TKey key, TValue original); Parameters Type Name Description TKey key TValue original Returns Type Description System.Boolean Type Parameters Name Description TKey TValue Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IChecksum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IChecksum.html",
    "title": "Interface IChecksum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IChecksum Contains conversion support elements such as classes, interfaces and static methods. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface IChecksum Properties | Improve this Doc View Source Value Declaration long Value { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Reset() Declaration void Reset() | Improve this Doc View Source Update(Byte[]) Declaration void Update(byte[] b) Parameters Type Name Description System.Byte [] b | Improve this Doc View Source Update(Byte[], Int32, Int32) Declaration void Update(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length | Improve this Doc View Source Update(Int32) Declaration void Update(int b) Parameters Type Name Description System.Int32 b Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ICharSequence.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ICharSequence.html",
    "title": "Interface ICharSequence | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharSequence This interface represents an ordered set of characters and defines the methods to probe them. Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface ICharSequence Properties | Improve this Doc View Source Item[Int32] Returns the character at the specified index, with the first character having index zero. Declaration char this[int index] { get; } Parameters Type Name Description System.Int32 index the index of the character to return. Property Value Type Description System.Char the requested character. Exceptions Type Condition System.IndexOutOfRangeException if index < 0 or index is greater than the length of this sequence. | Improve this Doc View Source Length Returns the number of characters in this sequence. Declaration int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source SubSequence(Int32, Int32) Returns a ICharSequence from the start index (inclusive) to the end index (exclusive) of this sequence. Declaration ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start the start offset of the sub-sequence. It is inclusive, that is, the index of the first character that is included in the sub-sequence. System.Int32 end the end offset of the sub-sequence. It is exclusive, that is, the index of the first character after those that are included in the sub-sequence Returns Type Description ICharSequence the requested sub-sequence. Exceptions Type Condition System.IndexOutOfRangeException if start < 0 , end < 0 , start > end , or if start or end are greater than the length of this sequence. | Improve this Doc View Source ToString() Returns a string with the same characters in the same order as in this sequence. Declaration string ToString() Returns Type Description System.String a string based on this sequence. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ICallable-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ICallable-1.html",
    "title": "Interface ICallable<V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICallable<V> Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public interface ICallable<V> Type Parameters Name Description V Methods | Improve this Doc View Source Call() Declaration V Call() Returns Type Description V Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IPriorityQueueHandle-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IPriorityQueueHandle-1.html",
    "title": "Interface IPriorityQueueHandle<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPriorityQueueHandle<T> The base type of a priority queue handle Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IPriorityQueueHandle<T> Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RateLimiter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RateLimiter.html",
    "title": "Class RateLimiter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RateLimiter Abstract base class to rate limit IO. Typically implementations are shared across multiple IndexInput s or IndexOutput s (for example those involved all merging). Those IndexInput s and IndexOutput s would call Pause(Int64) whenever they want to read bytes or write bytes. Inheritance System.Object RateLimiter RateLimiter.SimpleRateLimiter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class RateLimiter Properties | Improve this Doc View Source MbPerSec The current mb per second rate limit. Declaration public abstract double MbPerSec { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source Pause(Int64) Pauses, if necessary, to keep the instantaneous IO rate at or below the target. Note: the implementation is thread-safe Declaration public abstract long Pause(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.Int64 the pause time in nano seconds | Improve this Doc View Source SetMbPerSec(Double) Sets an updated mb per second rate limit. Declaration public abstract void SetMbPerSec(double mbPerSec) Parameters Type Name Description System.Double mbPerSec Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMFile.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMFile.html",
    "title": "Class RAMFile | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMFile Represents a file in RAM as a list of byte[] buffers. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RAMFile Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class RAMFile Constructors | Improve this Doc View Source RAMFile() File used as buffer, in no RAMDirectory Declaration public RAMFile() | Improve this Doc View Source RAMFile(RAMDirectory) Declaration public RAMFile(RAMDirectory directory) Parameters Type Name Description RAMDirectory directory Fields | Improve this Doc View Source m_buffers Declaration protected List<byte[]> m_buffers Field Value Type Description System.Collections.Generic.List < System.Byte []> | Improve this Doc View Source m_sizeInBytes Declaration protected long m_sizeInBytes Field Value Type Description System.Int64 Properties | Improve this Doc View Source Length For non-stream access from thread that might be concurrent with writing Declaration public virtual long Length { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source NumBuffers Declaration protected int NumBuffers { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddBuffer(Int32) Declaration protected byte[] AddBuffer(int size) Parameters Type Name Description System.Int32 size Returns Type Description System.Byte [] | Improve this Doc View Source GetBuffer(Int32) Declaration protected byte[] GetBuffer(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Byte [] | Improve this Doc View Source GetSizeInBytes() Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source NewBuffer(Int32) Expert: allocate a new buffer. Subclasses can allocate differently. Declaration protected virtual byte[] NewBuffer(int size) Parameters Type Name Description System.Int32 size size of allocated buffer. Returns Type Description System.Byte [] allocated buffer. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Weight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Weight.html",
    "title": "Class Weight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Weight Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching does not modify a Query , so that a Query instance can be reused. IndexSearcher dependent state of the query should reside in the Weight . AtomicReader dependent state should reside in the Scorer . Since Weight creates Scorer instances for a given AtomicReaderContext ( GetScorer(AtomicReaderContext, IBits) ) callers must maintain the relationship between the searcher's top-level IndexReaderContext and the context used to create a Scorer . A Weight is used in the following way: A Weight is constructed by a top-level query, given a IndexSearcher ( CreateWeight(IndexSearcher) ). The GetValueForNormalization() method is called on the Weight to compute the query normalization factor QueryNorm(Single) of the query clauses contained in the query. The query normalization factor is passed to Normalize(Single, Single) . At this point the weighting is complete. A Scorer is constructed by GetScorer(AtomicReaderContext, IBits) . @since 2.9 Inheritance System.Object Weight BooleanQuery.BooleanWeight ConstantScoreQuery.ConstantWeight DisjunctionMaxQuery.DisjunctionMaxWeight SpanWeight Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Weight Properties | Improve this Doc View Source Query The query that this concerns. Declaration public abstract Query Query { get; } Property Value Type Description Query | Improve this Doc View Source ScoresDocsOutOfOrder Returns true if this implementation scores docs only out of order. This method is used in conjunction with ICollector 's AcceptsDocsOutOfOrder and GetBulkScorer(AtomicReaderContext, Boolean, IBits) to create a matching Scorer instance for a given ICollector , or vice versa. NOTE: the default implementation returns false , i.e. the Scorer scores documents in-order. Declaration public virtual bool ScoresDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) An explanation of the score computation for the named document. Declaration public abstract Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context The readers context to create the Explanation for. System.Int32 doc The document's id relative to the given context's reader Returns Type Description Explanation An Explanation for the score Exceptions Type Condition System.IO.IOException if an System.IO.IOException occurs | Improve this Doc View Source GetBulkScorer(AtomicReaderContext, Boolean, IBits) Optional method, to return a BulkScorer to score the query and send hits to a ICollector . Only queries that have a different top-level approach need to override this; the default implementation pulls a normal Scorer and iterates and collects the resulting hits. Declaration public virtual BulkScorer GetBulkScorer(AtomicReaderContext context, bool scoreDocsInOrder, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context The AtomicReaderContext for which to return the Scorer . System.Boolean scoreDocsInOrder Specifies whether in-order scoring of documents is required. Note that if set to false (i.e., out-of-order scoring is required), this method can return whatever scoring mode it supports, as every in-order scorer is also an out-of-order one. However, an out-of-order scorer may not support NextDoc() and/or Advance(Int32) , therefore it is recommended to request an in-order scorer if use of these methods is required. IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description BulkScorer A BulkScorer which scores documents and passes them to a collector. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Returns a Scorer which scores documents in/out-of order according to scoreDocsInOrder . NOTE: even if scoreDocsInOrder is false , it is recommended to check whether the returned Scorer indeed scores documents out of order (i.e., call ScoresDocsOutOfOrder ), as some Scorer implementations will always return documents in-order. NOTE: null can be returned if no documents will be scored by this query. Declaration public abstract Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context The AtomicReaderContext for which to return the Scorer . IBits acceptDocs IBits that represent the allowable docs to match (typically deleted docs but possibly filtering other documents) Returns Type Description Scorer A Scorer which scores documents in/out-of order. Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source GetValueForNormalization() The value for normalization of contained query clauses (e.g. sum of squared weights). Declaration public abstract float GetValueForNormalization() Returns Type Description System.Single | Improve this Doc View Source Normalize(Single, Single) Assigns the query normalization factor and boost from parent queries to this. Declaration public abstract void Normalize(float norm, float topLevelBoost) Parameters Type Name Description System.Single norm System.Single topLevelBoost Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.html",
    "title": "Class Similarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Similarity Similarity defines the components of Lucene scoring. Expert: Scoring API. This is a low-level API, you should only extend this API if you want to implement an information retrieval model . If you are instead looking for a convenient way to alter Lucene's scoring, consider extending a higher-level implementation such as TFIDFSimilarity , which implements the vector space model with this API, or just tweaking the default implementation: DefaultSimilarity . Similarity determines how Lucene weights terms, and Lucene interacts with this class at both index-time and query-time . At indexing time, the indexer calls ComputeNorm(FieldInvertState) , allowing the Similarity implementation to set a per-document value for the field that will be later accessible via GetNormValues(String) . Lucene makes no assumption about what is in this norm, but it is most useful for encoding length normalization information. Implementations should carefully consider how the normalization is encoded: while Lucene's classical TFIDFSimilarity encodes a combination of index-time boost and length normalization information with SmallSingle into a single byte, this might not be suitable for all purposes. Many formulas require the use of average document length, which can be computed via a combination of SumTotalTermFreq and MaxDoc or DocCount , depending upon whether the average should reflect field sparsity. Additional scoring factors can be stored in named NumericDocValuesField s and accessed at query-time with GetNumericDocValues(String) . Finally, using index-time boosts (either via folding into the normalization byte or via DocValues ), is an inefficient way to boost the scores of different fields if the boost will be the same for every document, instead the Similarity can simply take a constant boost parameter C , and PerFieldSimilarityWrapper can return different instances with different boosts depending upon field name. At query-time, Queries interact with the Similarity via these steps: The ComputeWeight(Single, CollectionStatistics, TermStatistics[]) method is called a single time, allowing the implementation to compute any statistics (such as IDF, average document length, etc) across the entire collection . The TermStatistics and CollectionStatistics passed in already contain all of the raw statistics involved, so a Similarity can freely use any combination of statistics without causing any additional I/O. Lucene makes no assumption about what is stored in the returned Similarity.SimWeight object. The query normalization process occurs a single time: GetValueForNormalization() is called for each query leaf node, QueryNorm(Single) is called for the top-level query, and finally Normalize(Single, Single) passes down the normalization value and any top-level boosts (e.g. from enclosing BooleanQuery s). For each segment in the index, the Query creates a GetSimScorer(Similarity.SimWeight, AtomicReaderContext) The GetScore() method is called for each matching document. When Explain(Query, Int32) is called, queries consult the Similarity's DocScorer for an explanation of how it computed its score. The query passes in a the document id and an explanation of how the frequency was computed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity BM25Similarity MultiSimilarity PerFieldSimilarityWrapper SimilarityBase TFIDFSimilarity Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Similarity Constructors | Improve this Doc View Source Similarity() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Similarity() Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Computes the normalization value for a field, given the accumulated state of term processing for this field (see FieldInvertState ). Matches in longer fields are less precise, so implementations of this method usually set smaller values when state.Length is large, and larger values when state.Length is small. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public abstract long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state current processing state for this field Returns Type Description System.Int64 computed norm value | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Compute any collection-level weight (e.g. IDF, average document length, etc) needed for scoring a query. Declaration public abstract Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost the query-time boost. CollectionStatistics collectionStats collection-level statistics, such as the number of tokens in the collection. TermStatistics [] termStats term-level statistics, such as the document frequency of a term across the collection. Returns Type Description Similarity.SimWeight Similarity.SimWeight object with the information this Similarity needs to score a query. | Improve this Doc View Source Coord(Int32, Int32) Hook to integrate coordinate-level matching. By default this is disabled (returns 1 ), as with most modern models this will only skew performance, but some implementations such as TFIDFSimilarity override this. Declaration public virtual float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap the number of query terms matched in the document System.Int32 maxOverlap the total number of terms in the query Returns Type Description System.Single a score factor based on term overlap with the query | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Creates a new Similarity.SimScorer to score matching documents from a segment of the inverted index. Declaration public abstract Similarity.SimScorer GetSimScorer(Similarity.SimWeight weight, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight weight collection information from ComputeWeight(Single, CollectionStatistics, TermStatistics[]) AtomicReaderContext context segment of the inverted index to be scored. Returns Type Description Similarity.SimScorer Sloppy Similarity.SimScorer for scoring documents across context Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source QueryNorm(Single) Computes the normalization value for a query given the sum of the normalized weights GetValueForNormalization() of each of the query terms. this value is passed back to the weight ( Normalize(Single, Single) of each query term, to provide a hook to attempt to make scores from different queries comparable. By default this is disabled (returns 1 ), but some implementations such as TFIDFSimilarity override this. Declaration public virtual float QueryNorm(float valueForNormalization) Parameters Type Name Description System.Single valueForNormalization the sum of the term normalization values Returns Type Description System.Single a normalization factor for query weights Extension Methods Number.IsNumber(Object) See Also Similarity Similarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimWeight.html",
    "title": "Class Similarity.SimWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Similarity.SimWeight Stores the weight for a query across the indexed collection. this abstract implementation is empty; descendants of Similarity should subclass Similarity.SimWeight and define the statistics they require in the subclass. Examples include idf, average field length, etc. Inheritance System.Object Similarity.SimWeight BasicStats Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimWeight Constructors | Improve this Doc View Source SimWeight() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimWeight() Methods | Improve this Doc View Source GetValueForNormalization() The value for normalization of contained query clauses (e.g. sum of squared weights). NOTE: a Similarity implementation might not use any query normalization at all, its not required. However, if it wants to participate in query normalization, it can return a value here. Declaration public abstract float GetValueForNormalization() Returns Type Description System.Single | Improve this Doc View Source Normalize(Single, Single) Assigns the query normalization factor and boost from parent queries to this. NOTE: a Similarity implementation might not use this normalized value at all, its not required. However, its usually a good idea to at least incorporate the topLevelBoost (e.g. from an outer BooleanQuery ) into its score. Declaration public abstract void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Similarity.SimScorer.html",
    "title": "Class Similarity.SimScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Similarity.SimScorer API for scoring \"sloppy\" queries such as TermQuery , SpanQuery , and PhraseQuery . Frequencies are floating-point values: an approximate within-document frequency adjusted for \"sloppiness\" by ComputeSlopFactor(Int32) . Inheritance System.Object Similarity.SimScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class SimScorer Constructors | Improve this Doc View Source SimScorer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public SimScorer() Methods | Improve this Doc View Source ComputePayloadFactor(Int32, Int32, Int32, BytesRef) Calculate a scoring factor based on the data in the payload. Declaration public abstract float ComputePayloadFactor(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single | Improve this Doc View Source ComputeSlopFactor(Int32) Computes the amount of a sloppy phrase match, based on an edit distance. Declaration public abstract float ComputeSlopFactor(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single | Improve this Doc View Source Explain(Int32, Explanation) Explain the score for a single document Declaration public virtual Explanation Explain(int doc, Explanation freq) Parameters Type Name Description System.Int32 doc document id within the inverted index segment Explanation freq Explanation of how the sloppy term frequency was computed Returns Type Description Explanation document's score | Improve this Doc View Source Score(Int32, Single) Score a single document Declaration public abstract float Score(int doc, float freq) Parameters Type Name Description System.Int32 doc document id within the inverted index segment System.Single freq sloppy term frequency Returns Type Description System.Single document's score Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModel.html",
    "title": "Class BasicModel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModel This class acts as the base class for the specific basic model implementations in the DFR framework. Basic models compute the informative content Inf 1 = -log 2 Prob 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BasicModel BasicModelBE BasicModelD BasicModelG BasicModelIF BasicModelIn BasicModelIne BasicModelP Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class BasicModel Constructors | Improve this Doc View Source BasicModel() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public BasicModel() Methods | Improve this Doc View Source Explain(BasicStats, Single) Returns an explanation for the score. Most basic models use the number of documents and the total term frequency to compute Inf 1 . this method provides a generic explanation for such models. Subclasses that use other statistics must override this method. Declaration public virtual Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single) Returns the informative content score. Declaration public abstract float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the basic model formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffect.html",
    "title": "Class AfterEffect | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AfterEffect This class acts as the base class for the implementations of the first normalization of the informative content in the DFR framework. This component is also called the after effect and is defined by the formula Inf 2 = 1 - Prob 2 , where Prob 2 measures the information gain . @lucene.experimental Inheritance System.Object AfterEffect AfterEffect.NoAfterEffect AfterEffectB AfterEffectL Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class AfterEffect Constructors | Improve this Doc View Source AfterEffect() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public AfterEffect() Methods | Improve this Doc View Source Explain(BasicStats, Single) Returns an explanation for the score. Declaration public abstract Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation | Improve this Doc View Source Score(BasicStats, Single) Returns the aftereffect score. Declaration public abstract float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the after effect formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter.html",
    "title": "Class NumericRangeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeFilter LUCENENET specific static class to provide access to static methods without referring to the NumericRangeFilter<T> 's generic closing type. Inheritance System.Object NumericRangeFilter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class NumericRangeFilter Methods | Improve this Doc View Source NewDoubleRange(String, Int32, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a System.Double range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Double.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeFilter<double> NewDoubleRange(string field, int precisionStep, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Double > | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a System.Double range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Double.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeFilter<double> NewDoubleRange(string field, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Double > | Improve this Doc View Source NewInt32Range(String, Int32, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a System.Int32 range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeFilter<int> NewInt32Range(string field, int precisionStep, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int32 > | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a System.Int32 range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeFilter<int> NewInt32Range(string field, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int32 > | Improve this Doc View Source NewInt64Range(String, Int32, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a System.Int64 range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeFilter<long> NewInt64Range(string field, int precisionStep, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int64 > | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a System.Int64 range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeFilter<long> NewInt64Range(string field, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Int64 > | Improve this Doc View Source NewSingleRange(String, Int32, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that filters a System.Single range using the given PrecisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Single.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeFilter<float> NewSingleRange(string field, int precisionStep, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Single > | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeFilter , that queries a System.Single range using the default PrecisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Single.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeFilter<float> NewSingleRange(string field, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeFilter < System.Single >"
  },
  "api/Lucene.Net/Lucene.Net.Index.SortedSetDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SortedSetDocValues.html",
    "title": "Class SortedSetDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValues A per-document set of presorted byte[] values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. Inheritance System.Object SortedSetDocValues MultiDocValues.MultiSortedSetDocValues RandomAccessOrds Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class SortedSetDocValues Constructors | Improve this Doc View Source SortedSetDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SortedSetDocValues() Fields | Improve this Doc View Source NO_MORE_ORDS When returned by NextOrd() it means there are no more ordinals for the document. Declaration public static readonly long NO_MORE_ORDS Field Value Type Description System.Int64 Properties | Improve this Doc View Source ValueCount Returns the number of unique values. Declaration public abstract long ValueCount { get; } Property Value Type Description System.Int64 Number of unique values in this SortedDocValues . This is also equivalent to one plus the maximum ordinal. Methods | Improve this Doc View Source GetTermsEnum() Returns a TermsEnum over the values. The enum supports Ord and SeekExact(Int64) . Declaration public virtual TermsEnum GetTermsEnum() Returns Type Description TermsEnum | Improve this Doc View Source LookupOrd(Int64, BytesRef) Retrieves the value for the specified ordinal. Declaration public abstract void LookupOrd(long ord, BytesRef result) Parameters Type Name Description System.Int64 ord ordinal to lookup BytesRef result will be populated with the ordinal's value See Also NextOrd() | Improve this Doc View Source LookupTerm(BytesRef) If key exists, returns its ordinal, else returns -insertionPoint-1 , like System.Array.BinarySearch(System.Array,System.Int32,System.Int32,System.Object) . Declaration public virtual long LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Key to look up Returns Type Description System.Int64 | Improve this Doc View Source NextOrd() Returns the next ordinal for the current document (previously set by SetDocument(Int32) . Declaration public abstract long NextOrd() Returns Type Description System.Int64 Next ordinal for the document, or NO_MORE_ORDS . ordinals are dense, start at 0, then increment by 1 for the next value in sorted order. | Improve this Doc View Source SetDocument(Int32) Sets iteration to the specified docID Declaration public abstract void SetDocument(int docID) Parameters Type Name Description System.Int32 docID document ID Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IOUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IOUtils.html",
    "title": "Class IOUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IOUtils This class emulates the new Java 7 \"Try-With-Resources\" statement. Remove once Lucene is on Java 7. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object IOUtils Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class IOUtils Fields | Improve this Doc View Source CHARSET_UTF_8 UTF-8 System.Text.Encoding instance to prevent repeated System.Text.Encoding.UTF8 lookups Declaration [Obsolete(\"Use Encoding.UTF8 instead.\")] public static readonly Encoding CHARSET_UTF_8 Field Value Type Description System.Text.Encoding | Improve this Doc View Source UTF_8 UTF-8 charset string. Where possible, use System.Text.Encoding.UTF8 instead, as using the System.String constant may slow things down. Declaration public static readonly string UTF_8 Field Value Type Description System.String See Also System.Text.Encoding.UTF8 Methods | Improve this Doc View Source Close(IEnumerable<IDisposable>) Disposes all given System.IDisposable s. Declaration [Obsolete(\"Use Dispose(IEnumerable<IDisposable>) instead.\")] public static void Close(IEnumerable<IDisposable> objects) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also Dispose(IDisposable[]) | Improve this Doc View Source Close(IDisposable[]) Disposes all given System.IDisposable s. Some of the System.IDisposable s may be null ; they are ignored. After everything is closed, the method either throws the first exception it hit while closing, or completes normally if there were no exceptions. Declaration [Obsolete(\"Use Dispose(params IDisposable[]) instead.\")] public static void Close(params IDisposable[] objects) Parameters Type Name Description System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on | Improve this Doc View Source CloseWhileHandlingException(IEnumerable<IDisposable>) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Declaration [Obsolete(\"Use DisposeWhileHandlingException(IEnumerable<IDisposable>) instead.\")] public static void CloseWhileHandlingException(IEnumerable<IDisposable> objects) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also DisposeWhileHandlingException(IEnumerable<IDisposable>) DisposeWhileHandlingException(IDisposable[]) | Improve this Doc View Source CloseWhileHandlingException(Exception, IEnumerable<IDisposable>) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Declaration [Obsolete(\"Use DisposeWhileHandlingException(Exception, IEnumerable<IDisposable>) instead.\")] public static void CloseWhileHandlingException(Exception priorException, IEnumerable<IDisposable> objects) Parameters Type Name Description System.Exception priorException System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also DisposeWhileHandlingException(Exception, IDisposable[]) | Improve this Doc View Source CloseWhileHandlingException(Exception, IDisposable[]) Disposes all given IDisposable s, suppressing all thrown exceptions. Some of the IDisposable s may be null , they are ignored. After everything is disposed, method either throws priorException , if one is supplied, or the first of suppressed exceptions, or completes normally. Sample usage: IDisposable resource1 = null, resource2 = null, resource3 = null; ExpectedException priorE = null; try { resource1 = ...; resource2 = ...; resource3 = ...; // Acquisition may throw ExpectedException ..do..stuff.. // May throw ExpectedException } catch (ExpectedException e) { priorE = e; } finally { IOUtils.CloseWhileHandlingException(priorE, resource1, resource2, resource3); } Declaration [Obsolete(\"Use DisposeWhileHandlingException(Exception, params IDisposable[]) instead.\")] public static void CloseWhileHandlingException(Exception priorException, params IDisposable[] objects) Parameters Type Name Description System.Exception priorException null or an exception that will be rethrown after method completion. System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on. | Improve this Doc View Source CloseWhileHandlingException(IDisposable[]) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Some of the System.IDisposable s may be null , they are ignored. Declaration [Obsolete(\"Use DisposeWhileHandlingException(params IDisposable[]) instead.\")] public static void CloseWhileHandlingException(params IDisposable[] objects) Parameters Type Name Description System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on | Improve this Doc View Source Copy(FileInfo, FileInfo) Copy one file's contents to another file. The target will be overwritten if it exists. The source must exist. Declaration public static void Copy(FileInfo source, FileInfo target) Parameters Type Name Description System.IO.FileInfo source System.IO.FileInfo target | Improve this Doc View Source DeleteFilesIgnoringExceptions(Directory, String[]) Deletes all given files, suppressing all thrown System.Exception s. Note that the files should not be null . Declaration public static void DeleteFilesIgnoringExceptions(Directory dir, params string[] files) Parameters Type Name Description Directory dir System.String [] files | Improve this Doc View Source Dispose(IEnumerable<IDisposable>) Disposes all given System.IDisposable s. Declaration public static void Dispose(IEnumerable<IDisposable> objects) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also Dispose(IDisposable[]) | Improve this Doc View Source Dispose(IDisposable[]) Disposes all given System.IDisposable s. Some of the System.IDisposable s may be null ; they are ignored. After everything is closed, the method either throws the first exception it hit while closing, or completes normally if there were no exceptions. Declaration public static void Dispose(params IDisposable[] objects) Parameters Type Name Description System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on | Improve this Doc View Source DisposeWhileHandlingException(IEnumerable<IDisposable>) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Declaration public static void DisposeWhileHandlingException(IEnumerable<IDisposable> objects) Parameters Type Name Description System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also DisposeWhileHandlingException(IDisposable[]) | Improve this Doc View Source DisposeWhileHandlingException(Exception, IEnumerable<IDisposable>) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Declaration public static void DisposeWhileHandlingException(Exception priorException, IEnumerable<IDisposable> objects) Parameters Type Name Description System.Exception priorException System.Collections.Generic.IEnumerable < System.IDisposable > objects See Also DisposeWhileHandlingException(Exception, IDisposable[]) | Improve this Doc View Source DisposeWhileHandlingException(Exception, IDisposable[]) Disposes all given IDisposable s, suppressing all thrown exceptions. Some of the IDisposable s may be null , they are ignored. After everything is disposed, method either throws priorException , if one is supplied, or the first of suppressed exceptions, or completes normally. Sample usage: IDisposable resource1 = null, resource2 = null, resource3 = null; ExpectedException priorE = null; try { resource1 = ...; resource2 = ...; resource3 = ...; // Acquisition may throw ExpectedException ..do..stuff.. // May throw ExpectedException } catch (ExpectedException e) { priorE = e; } finally { IOUtils.DisposeWhileHandlingException(priorE, resource1, resource2, resource3); } Declaration public static void DisposeWhileHandlingException(Exception priorException, params IDisposable[] objects) Parameters Type Name Description System.Exception priorException null or an exception that will be rethrown after method completion. System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on. | Improve this Doc View Source DisposeWhileHandlingException(IDisposable[]) Disposes all given System.IDisposable s, suppressing all thrown exceptions. Some of the System.IDisposable s may be null , they are ignored. Declaration public static void DisposeWhileHandlingException(params IDisposable[] objects) Parameters Type Name Description System.IDisposable [] objects Objects to call System.IDisposable.Dispose() on | Improve this Doc View Source GetDecodingReader(FileInfo, Encoding) Opens a System.IO.TextReader for the given System.IO.FileInfo using a System.Text.Encoding . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected System.Text.Encoding . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(FileInfo file, Encoding charSet) Parameters Type Name Description System.IO.FileInfo file The file to open a reader on System.Text.Encoding charSet The expected charset Returns Type Description System.IO.TextReader A reader to read the given file | Improve this Doc View Source GetDecodingReader(Stream, Encoding) Wrapping the given System.IO.Stream in a reader using a System.Text.Encoding . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected System.Text.Encoding . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(Stream stream, Encoding charSet) Parameters Type Name Description System.IO.Stream stream The stream to wrap in a reader System.Text.Encoding charSet The expected charset Returns Type Description System.IO.TextReader A wrapping reader | Improve this Doc View Source GetDecodingReader(Type, String, Encoding) Opens a System.IO.TextReader for the given resource using a System.Text.Encoding . Unlike Java's defaults this reader will throw an exception if your it detects the read charset doesn't match the expected System.Text.Encoding . Decoding readers are useful to load configuration files, stopword lists or synonym files to detect character set problems. However, its not recommended to use as a common purpose reader. Declaration public static TextReader GetDecodingReader(Type clazz, string resource, Encoding charSet) Parameters Type Name Description System.Type clazz The class used to locate the resource System.String resource The resource name to load System.Text.Encoding charSet The expected charset Returns Type Description System.IO.TextReader A reader to read the given file | Improve this Doc View Source ReThrow(Exception) Simple utilty method that takes a previously caught System.Exception and rethrows either System.IO.IOException or an unchecked exception. If the argument is null then this method does nothing. Declaration public static void ReThrow(Exception th) Parameters Type Name Description System.Exception th | Improve this Doc View Source ReThrowUnchecked(Exception) Simple utilty method that takes a previously caught System.Exception and rethrows it as an unchecked exception. If the argument is null then this method does nothing. Declaration public static void ReThrowUnchecked(Exception th) Parameters Type Name Description System.Exception th Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.html",
    "title": "Class FieldCacheSanityChecker | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheSanityChecker Provides methods for sanity checking that entries in the FieldCache are not wasteful or inconsistent. Lucene 2.9 Introduced numerous enhancements into how the FieldCache is used by the low levels of Lucene searching (for Sorting and ValueSourceQueries) to improve both the speed for Sorting, as well as reopening of IndexReaders. But these changes have shifted the usage of FieldCache from \"top level\" IndexReaders (frequently a MultiReader or DirectoryReader) down to the leaf level SegmentReaders. As a result, existing applications that directly access the FieldCache may find RAM usage increase significantly when upgrading to 2.9 or Later. This class provides an API for these applications (or their Unit tests) to check at run time if the FieldCache contains \"insane\" usages of the FieldCache. @lucene.experimental Inheritance System.Object FieldCacheSanityChecker Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class FieldCacheSanityChecker Constructors | Improve this Doc View Source FieldCacheSanityChecker() Declaration public FieldCacheSanityChecker() | Improve this Doc View Source FieldCacheSanityChecker(Boolean) Declaration public FieldCacheSanityChecker(bool estimateRam) Parameters Type Name Description System.Boolean estimateRam If set, estimate size for all FieldCache.CacheEntry objects will be calculated. Methods | Improve this Doc View Source Check(FieldCache.CacheEntry[]) Tests a CacheEntry[] for indication of \"insane\" cache usage. NOTE: FieldCache CreationPlaceholder objects are ignored. (:TODO: is this a bad idea? are we masking a real problem?) Declaration public FieldCacheSanityChecker.Insanity[] Check(params FieldCache.CacheEntry[] cacheEntries) Parameters Type Name Description FieldCache.CacheEntry [] cacheEntries Returns Type Description FieldCacheSanityChecker.Insanity [] | Improve this Doc View Source CheckSanity(FieldCache.CacheEntry[]) Quick and dirty convenience method that instantiates an instance with \"good defaults\" and uses it to test the FieldCache.CacheEntry s Declaration public static FieldCacheSanityChecker.Insanity[] CheckSanity(params FieldCache.CacheEntry[] cacheEntries) Parameters Type Name Description FieldCache.CacheEntry [] cacheEntries Returns Type Description FieldCacheSanityChecker.Insanity [] See Also Check(FieldCache.CacheEntry[]) | Improve this Doc View Source CheckSanity(IFieldCache) Quick and dirty convenience method Declaration public static FieldCacheSanityChecker.Insanity[] CheckSanity(IFieldCache cache) Parameters Type Name Description IFieldCache cache Returns Type Description FieldCacheSanityChecker.Insanity [] See Also Check(FieldCache.CacheEntry[]) Extension Methods Number.IsNumber(Object) See Also IFieldCache FieldCacheSanityChecker.Insanity FieldCacheSanityChecker.InsanityType"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.InsanityType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.InsanityType.html",
    "title": "Class FieldCacheSanityChecker.InsanityType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheSanityChecker.InsanityType An Enumeration of the different types of \"insane\" behavior that may be detected in a IFieldCache . Inheritance System.Object FieldCacheSanityChecker.InsanityType Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class InsanityType Fields | Improve this Doc View Source EXPECTED Indicates an expected bit of \"insanity\". This may be useful for clients that wish to preserve/log information about insane usage but indicate that it was expected. Declaration public static readonly FieldCacheSanityChecker.InsanityType EXPECTED Field Value Type Description FieldCacheSanityChecker.InsanityType | Improve this Doc View Source SUBREADER Indicates an overlap in cache usage on a given field in sub/super readers. Declaration public static readonly FieldCacheSanityChecker.InsanityType SUBREADER Field Value Type Description FieldCacheSanityChecker.InsanityType | Improve this Doc View Source VALUEMISMATCH Indicates entries have the same reader+fieldname but different cached values. This can happen if different datatypes, or parsers are used -- and while it's not necessarily a bug it's typically an indication of a possible problem. NOTE: Only the reader, fieldname, and cached value are actually tested -- if two cache entries have different parsers or datatypes but the cached values are the same Object (== not just Equal()) this method does not consider that a red flag. This allows for subtle variations in the way a Parser is specified (null vs DEFAULT_INT64_PARSER, etc...) Declaration public static readonly FieldCacheSanityChecker.InsanityType VALUEMISMATCH Field Value Type Description FieldCacheSanityChecker.InsanityType Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also SUBREADER VALUEMISMATCH EXPECTED"
  },
  "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.Insanity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.FieldCacheSanityChecker.Insanity.html",
    "title": "Class FieldCacheSanityChecker.Insanity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCacheSanityChecker.Insanity Simple container for a collection of related FieldCache.CacheEntry objects that in conjunction with each other represent some \"insane\" usage of the IFieldCache . Inheritance System.Object FieldCacheSanityChecker.Insanity Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class Insanity Constructors | Improve this Doc View Source Insanity(FieldCacheSanityChecker.InsanityType, String, FieldCache.CacheEntry[]) Declaration public Insanity(FieldCacheSanityChecker.InsanityType type, string msg, params FieldCache.CacheEntry[] entries) Parameters Type Name Description FieldCacheSanityChecker.InsanityType type System.String msg FieldCache.CacheEntry [] entries Properties | Improve this Doc View Source CacheEntries FieldCache.CacheEntry objects which suggest a problem Declaration public FieldCache.CacheEntry[] CacheEntries { get; } Property Value Type Description FieldCache.CacheEntry [] | Improve this Doc View Source Msg Description of the insane behavior Declaration public string Msg { get; } Property Value Type Description System.String | Improve this Doc View Source Type Type of insane behavior this object represents Declaration public FieldCacheSanityChecker.InsanityType Type { get; } Property Value Type Description FieldCacheSanityChecker.InsanityType Methods | Improve this Doc View Source ToString() Multi-Line representation of this FieldCacheSanityChecker.Insanity object, starting with the Type and Msg, followed by each CacheEntry.ToString() on it's own line prefaced by a tab character Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.html",
    "title": "Class DoubleBarrelLRUCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleBarrelLRUCache LUCENENET specific class to nest the DoubleBarrelLRUCache.CloneableKey so it can be accessed without referencing the generic closing types of DoubleBarrelLRUCache<TKey, TValue> . Inheritance System.Object DoubleBarrelLRUCache DoubleBarrelLRUCache <TKey, TValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class DoubleBarrelLRUCache Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.CloneableKey.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DoubleBarrelLRUCache.CloneableKey.html",
    "title": "Class DoubleBarrelLRUCache.CloneableKey | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleBarrelLRUCache.CloneableKey Object providing clone(); the key class must subclass this. Inheritance System.Object DoubleBarrelLRUCache.CloneableKey Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class CloneableKey Methods | Improve this Doc View Source Clone() Declaration public abstract object Clone() Returns Type Description System.Object Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.html",
    "title": "Namespace Lucene.Net.Support | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support Classes Arrays AssemblyExtensions AssemblyUtils Methods for working with Assemblies. AssemblyUtils.DotNetFrameworkFilter Assembly filter logic from: https://raw.githubusercontent.com/Microsoft/dotnet-apiport/master/src/Microsoft.Fx.Portability/Analyzer/DotNetFrameworkFilter.cs AtomicBoolean AtomicInt32 NOTE: This was AtomicInteger in the JDK AtomicInt64 NOTE: This was AtomicLong in the JDK AtomicObject<T> AtomicReferenceArray<T> Mimics Java's AtomicReferenceArray class (partial implementation) BitArrayExtensions This class provides supporting methods of java.util.BitSet that are not present in System.Collections.BitArray. BundleResourceManagerFactory This implementation of IResourceManagerFactory uses a convention to retrieve resources. In Java NLS, the convention is to use the same name for the resource key propeties and for the resource file names. This presents a problem for .NET because the resource generator already creates an internal class with the same name as the .resx file. To work around this, we use the convention of appending the suffix \"Bundle\" to the end of the type the resource key propeties are stored in. For example, if our constants are stored in a class named ErrorMessages, the type that will be looked up by this factory will be ErrorMessagesBundle (which is the name of the .resx file that should be added to your project). This implementation can be inherited to use a different convention or can be replaced to get the resources from an external source. Character Mimics Java's Character class. Collections ConcurrentHashMapWrapper<TKey, TValue> ConcurrentHashSet<T> CRC32 CultureContext Allows switching the current thread to a new culture in a using block that will automatically return the culture to its previous state upon completion. DictionaryExtensions EnumerableExtensions .NET Specific Helper Extensions for IEnumerable Equatable A set of utilities uses for easily wrapping .NET collections so they can be used with System.Object.Equals(System.Object) System.Object.GetHashCode() , and System.Object.ToString() behavior similar to that in Java. The equality checking of collections will recursively compare the values of all elements and any nested collections. The same goes for using System.Object.ToString() - the string is based on the values in the collection and any nested collections. Do note this has a side-effect that any custom System.Object.Equals(System.Object) System.Object.GetHashCode() , and System.Object.ToString() implementations for types that implement System.Collections.Generic.IList<T> (including arrays), System.Collections.Generic.ISet<T> , or System.Collections.Generic.IDictionary<TKey, TValue> will be ignored. EquatableList<T> Represents a strongly typed list of objects that can be accessed by index. Provides methods to manipulate lists. Also provides functionality to compare lists against each other through an implementations of System.IEquatable<T> , or to wrap an existing list to use the same comparison logic as this one while not affecting any of its other functionality. EquatableSet<T> Represents a strongly typed set of objects. Provides methods to manipulate the set. Also provides functionality to compare sets against each other through an implementations of System.IEquatable<T> , or to wrap an existing set to use the same comparison logic as this one while not affecting any of its other functionality. ExceptionExtensions Extensions to the System.Exception class to allow for adding and retrieving suppressed exceptions, like you can do in Java. ExceptionToClassNameConventionAttribute Use this attribute to make an exception to the class naming rules (which should not be named like Interfaces). ExceptionToNetNumericConventionAttribute Properties, methods, or events marked with this attribute can ignore the numeric naming conventions of \"Int16\", \"Int32\", \"Int64\", and \"Single\" that are commonly used in .NET method and property names. ExceptionToNullableEnumConvention Use this attribute to make an exception to the nullable enum rule. Some of these cannot be avoided. HashMap<TKey, TValue> A C# emulation of the Java Hashmap A System.Collections.Generic.Dictionary`2 is a close equivalent to the Java Hashmap. One difference java implementation of the class is that the Hashmap supports both null keys and values, where the C# Dictionary only supports null values not keys. Also, V Get(TKey) method in Java returns null if the key doesn't exist, instead of throwing an exception. This implementation doesn't throw an exception when a key doesn't exist, it will return null. This class is slower than using a System.Collections.Generic.Dictionary`2 , because of extra checks that have to be done on each access, to check for null. NOTE: This class works best with nullable types. default(T) is returned when a key doesn't exist in the collection (this being similar to how Java returns null). Therefore, if the expected behavior of the java code is to execute code based on if the key exists, when the key is an integer type, it will return 0 instead of null. Consider also implementing IDictionary, IEnumerable, and ICollection like System.Collections.Generic.Dictionary`2 does, so HashMap can be used in substituted in place for the same interfaces it implements. IdentityComparer IdentityComparer<T> IdentityHashMap<TKey, TValue> IdentityHashSet<T> IdentityWeakReference<T> IndexWriterConfigExtensions Extension methods that can be used to provide similar IndexWriterConfig syntax as Java Lucene. (config.SetCheckIntegrityAtMerge(100).SetMaxBufferedDocs(1000);) LinkedHashMap<TKey, TValue> LinkedHashMap is a specialized dictionary that preserves the entry order of elements. Like a HashMap, there can be a null key, but it also guarantees that the enumeration order of the elements are the same as insertion order, regardless of the number of add/remove/update operations that are performed on it. ListExtensions LurchTable<TKey, TValue> LurchTable stands for \"Least Used Recently Concurrent Hash Table\" and has definate similarities to both the .NET 4 ConcurrentDictionary as well as Java's LinkedHashMap. This gives you a thread-safe dictionary/hashtable that stores element ordering by insertion, updates, or access. In addition it can be configured to use a 'hard-limit' count of items that will automatically 'pop' the oldest item in the collection. LurchTable<TKey, TValue>.KeyCollection Provides the collection of Keys for the LurchTable LurchTable<TKey, TValue>.ValueCollection Provides the collection of Values for the LurchTable LurchTableCorruptionException Exception class: LurchTableCorruptionException The LurchTable internal datastructure appears to be corrupted. MathExtensions Number A simple class for number conversions. NumberFormat PriorityQueue<T> A PriorityQueue<T> holds elements on a priority heap, which orders the elements according to their natural order or according to the comparator specified at construction time. If the queue uses natural ordering, only elements that are comparable are permitted to be inserted into the queue. The least element of the specified ordering is stored at the head of the queue and the greatest element is stored at the tail of the queue. A PriorityQueue<T> is not synchronized. RectangularArrays SetExtensions SignedZeroComparer LUCENENET specific comparer to handle the special case of comparing negative zero with positive zero. For IEEE floating-point numbers, there is a distinction of negative and positive zero. Reference: http://stackoverflow.com/a/3139636 SimpleStringInterner Simple lockless and memory barrier free String intern cache that is guaranteed to return the same String instance as String.intern() does. StringBuilderCharSequenceWrapper An adapter for System.Text.StringBuilder that implements ICharSequence StringBuilderExtensions StringCharSequenceWrapper An adapter for System.String that implements ICharSequence StringExtensions StringInterner Subclasses of StringInterner are required to return the same single String object for all equal strings. Depending on the implementation, this may not be the same object returned as String.intern(). This StringInterner base class simply delegates to String.intern(). LUCENENET specific. StringTokenizer The StringTokenizer class allows an application to break a string into tokens by performing code point comparison. The StringTokenizer methods do not distinguish among identifiers, numbers, and quoted strings, nor do they recognize and skip comments. SystemConsole Mimics System.Console , but allows for swapping the System.IO.TextWriter of Out and Error , or the System.IO.TextReader of In with user-defined implementations. SystemProperties Helper for environment variables. This class helps to convert the environment variables to int or bool data types and also silently handles read permission errors. For instructions how to set environment variables for your OS, see https://www.schrodinger.com/kb/1842 . Note that if you want to load any of these settings for your application from a configuration file, it is recommended your application load them at startup and call SetProperty(String, String) to set them. Set the environment variable lucene.ignoreSecurityExceptions to false to change the read behavior of these methods to throw the underlying exception instead of returning the default value. Time TreeDictionary<K, V> A sorted generic dictionary based on a red-black tree set. TreeSet<T> An implementation of Red-Black trees as an indexed, sorted collection with set semantics, cf. CLRS . C5.TreeBag`1 for a version with bag semantics. C5.TreeDictionary`2 for a sorted dictionary based on this tree implementation. The comparer (sorting order) may be either natural, because the item type is comparable (generic: C5.IComparable`1 or non-generic: System.IComparable) or it can be external and supplied by the user in the constructor. TODO: describe performance here TODO: discuss persistence and its useful usage modes. Warn about the space leak possible with other usage modes. WeakDictionary<TKey, TValue> WritableArrayAttribute Attribute to define a property or method as a writable array. Per MSDN, members should never return arrays because the array contents can be updated, which makes the behavior confusing. However, Lucene's design sometimes relies on other classes to update arrays - both as array fields and as methods that return arrays. So, in these cases we are making an exception to this rule and marking them with WritableArrayAttribute to signify that this is intentional. For properties that violate this rule, you should also use the System.Diagnostics.CodeAnalysis.SuppressMessageAttribute : [WritableArray, SuppressMessage(\"Microsoft.Performance\", \"CA1819\", Justification = \"Lucene's design requires some writable array properties\")] Structs LurchTable<TKey, TValue>.Enumerator Provides an enumerator that iterates through the collection. LurchTable<TKey, TValue>.KeyCollection.Enumerator Provides an enumerator that iterates through the collection. LurchTable<TKey, TValue>.ValueCollection.Enumerator Provides an enumerator that iterates through the collection. Interfaces ICallable<V> ICharSequence This interface represents an ordered set of characters and defines the methods to probe them. IChecksum Contains conversion support elements such as classes, interfaces and static methods. ICreateOrUpdateValue<TKey, TValue> An interface to provide conditional or custom creation or update logic to a concurrent dictionary. ICreateValue<TKey, TValue> An interface to provide conditional or custom creation logic to a concurrent dictionary. IRemoveValue<TKey, TValue> An interface to provide conditional removal of an item from a concurrent dictionary. IResourceManagerFactory LUCENENET specific interface used to inject instances of System.Resources.ResourceManager . This extension point can be used to override the default behavior to, for example, retrieve resources from a persistent data store, rather than getting them from resource files. IUpdateValue<TKey, TValue> An interface to provide conditional or custom update logic to a concurrent dictionary. Enums LurchTableOrder Defines if and how items added to a LurchTable are linked together, this defines the value returned from Peek/Dequeue as the oldest entry of the specified operation. Delegates KeyValuePredicate<TKey, TValue> Provides a delegate that performs a test on key/value pair KeyValueUpdate<TKey, TValue> Provides a delegate that performs an atomic update of a key/value pair LurchTable<TKey, TValue>.ItemUpdatedMethod Method signature for the ItemUpdated event"
  },
  "api/Lucene.Net/Lucene.Net.Support.Time.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Time.html",
    "title": "Class Time | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Time Inheritance System.Object Time Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Time Fields | Improve this Doc View Source MILLISECONDS_PER_NANOSECOND Declaration public const long MILLISECONDS_PER_NANOSECOND = 1000000L Field Value Type Description System.Int64 | Improve this Doc View Source TICKS_PER_NANOSECOND Declaration public const long TICKS_PER_NANOSECOND = 100L Field Value Type Description System.Int64 Methods | Improve this Doc View Source CurrentTimeMilliseconds() Declaration public static long CurrentTimeMilliseconds() Returns Type Description System.Int64 | Improve this Doc View Source NanoTime() Declaration public static long NanoTime() Returns Type Description System.Int64"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.html",
    "title": "Namespace Lucene.Net.Support.Threading | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support.Threading Classes DisposableThreadLocalProfiler For Debuging purposes. LimitedConcurrencyLevelTaskScheduler Provides a task scheduler that ensures a maximum concurrency level while running on top of the thread pool. Source: https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler(v=vs.110).aspx ReentrantLock TaskSchedulerCompletionService<T> ThreadClass Support class used to handle threads that is inheritable just like the Thread type in Java. This class also ensures that when an error is thrown on a background thread, it will be properly re-thrown on the calling thread, which is the same behavior as we see in Lucene. ThreadLock Abstract base class that provides a synchronization interface for derived lock types Interfaces ICompletionService<V> IThreadRunnable this interface should be implemented by any class whose instances are intended to be executed by a thread."
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.ThreadLock.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.ThreadLock.html",
    "title": "Class ThreadLock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThreadLock Abstract base class that provides a synchronization interface for derived lock types Inheritance System.Object ThreadLock Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public abstract class ThreadLock Properties | Improve this Doc View Source MonitorLock Wrapper class for the Monitor Enter/Exit methods using the ThreadLock interface Declaration public static ThreadLock MonitorLock { get; } Property Value Type Description ThreadLock | Improve this Doc View Source NullLock A ThreadLock class that actually does no locking Used in ParallelMultiSearcher/MultiSearcher Declaration public static ThreadLock NullLock { get; } Property Value Type Description ThreadLock Methods | Improve this Doc View Source Enter(Object) Declaration public abstract void Enter(object obj) Parameters Type Name Description System.Object obj | Improve this Doc View Source Exit(Object) Declaration public abstract void Exit(object obj) Parameters Type Name Description System.Object obj Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.FileSupport.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.FileSupport.html",
    "title": "Class FileSupport | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileSupport Represents the methods to support some operations over files. Inheritance System.Object FileSupport Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public static class FileSupport Methods | Improve this Doc View Source CreateTempFile(String, String) Creates a new empty file in a random subdirectory of System.IO.Path.GetTempPath , using the given prefix and suffix strings to generate its name. Declaration public static FileInfo CreateTempFile(string prefix, string suffix) Parameters Type Name Description System.String prefix The prefix string to be used in generating the file's name; must be at least three characters long System.String suffix The suffix string to be used in generating the file's name; may be null, in which case a random suffix will be generated Returns Type Description System.IO.FileInfo A System.IO.FileInfo instance representing the temp file that was created. Remarks If this method returns successfully then it is guaranteed that: The file denoted by the returned abstract pathname did not exist before this method was invoked, and Neither this method nor any of its variants will return the same abstract pathname again in the current invocation of the virtual machine. This method provides only part of a temporary-file facility. However, the file will not be deleted automatically, it must be deleted by the caller. The prefix argument must be at least three characters long. It is recommended that the prefix be a short, meaningful string such as \"hjb\" or \"mail\". The suffix argument may be null, in which case a random suffix will be used. Both prefix and suffix must be provided with valid characters for the underlying system, as specified by System.IO.Path.GetInvalidFileNameChars . If the directory argument is null then the system-dependent default temporary-file directory will be used, with a random subdirectory name. The default temporary-file directory is specified by the System.IO.Path.GetTempPath method. On UNIX systems the default value of this property is typically \"/tmp\" or \"/var/tmp\"; on Microsoft Windows systems it is typically \"C:\\Users\\[UserName]\\AppData\\Local\\Temp\". | Improve this Doc View Source CreateTempFile(String, String, DirectoryInfo) Creates a new empty file in the specified directory, using the given prefix and suffix strings to generate its name. Declaration public static FileInfo CreateTempFile(string prefix, string suffix, DirectoryInfo directory) Parameters Type Name Description System.String prefix The prefix string to be used in generating the file's name; must be at least three characters long System.String suffix The suffix string to be used in generating the file's name; may be null, in which case a random suffix will be generated System.IO.DirectoryInfo directory The directory in which the file is to be created, or null if the default temporary-file directory is to be used Returns Type Description System.IO.FileInfo A System.IO.FileInfo instance representing the temp file that was created. Remarks If this method returns successfully then it is guaranteed that: The file denoted by the returned abstract pathname did not exist before this method was invoked, and Neither this method nor any of its variants will return the same abstract pathname again in the current invocation of the virtual machine. This method provides only part of a temporary-file facility. However, the file will not be deleted automatically, it must be deleted by the caller. The prefix argument must be at least three characters long. It is recommended that the prefix be a short, meaningful string such as \"hjb\" or \"mail\". The suffix argument may be null, in which case a random suffix will be used. Both prefix and suffix must be provided with valid characters for the underlying system, as specified by System.IO.Path.GetInvalidFileNameChars . If the directory argument is null then the system-dependent default temporary-file directory will be used, with a random subdirectory name. The default temporary-file directory is specified by the System.IO.Path.GetTempPath method. On UNIX systems the default value of this property is typically \"/tmp\" or \"/var/tmp\"; on Microsoft Windows systems it is typically \"C:\\Users\\[UserName]\\AppData\\Local\\Temp\". | Improve this Doc View Source GetCanonicalPath(FileSystemInfo) Returns the absolute path of this System.IO.FileSystemInfo with all references resolved and any drive letters normalized to upper case on Windows. An absolute path is one that begins at the root of the file system. The canonical path is one in which all references have been resolved. For the cases of '..' and '.', where the file system supports parent and working directory respectively, these are removed and replaced with a direct directory reference. Declaration public static string GetCanonicalPath(this FileSystemInfo path) Parameters Type Name Description System.IO.FileSystemInfo path This System.IO.FileSystemInfo instance. Returns Type Description System.String The canonical path of this file."
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.FileStreamExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.FileStreamExtensions.html",
    "title": "Class FileStreamExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FileStreamExtensions Inheritance System.Object FileStreamExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public static class FileStreamExtensions Methods | Improve this Doc View Source Read(FileStream, ByteBuffer, Int64) Declaration public static int Read(this FileStream file, ByteBuffer dst, long position) Parameters Type Name Description System.IO.FileStream file ByteBuffer dst System.Int64 position Returns Type Description System.Int32"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.Endianness.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.Endianness.html",
    "title": "Enum Endianness | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Endianness Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public enum Endianness Fields Name Description BIG_ENDIAN LITTLE_ENDIAN Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.ByteOrder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.ByteOrder.html",
    "title": "Class ByteOrder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteOrder Defines byte order constants. Inheritance System.Object ByteOrder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public sealed class ByteOrder Fields | Improve this Doc View Source BIG_ENDIAN This constant represents big endian. Declaration public static readonly ByteOrder BIG_ENDIAN Field Value Type Description ByteOrder | Improve this Doc View Source LITTLE_ENDIAN This constant represents little endian. Declaration public static readonly ByteOrder LITTLE_ENDIAN Field Value Type Description ByteOrder Properties | Improve this Doc View Source NativeOrder Returns the current platform byte order. Declaration public static ByteOrder NativeOrder { get; } Property Value Type Description ByteOrder Methods | Improve this Doc View Source ToString() Returns a string that describes this object. Declaration public override string ToString() Returns Type Description System.String \"BIG_ENDIAN\" for BIG_ENDIAN objects, \"LITTLE_ENDIAN\" for LITTLE_ENDIAN objects. Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.MemoryType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.MemoryType.html",
    "title": "Enum MemoryType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum MemoryType It specifies the memory type strategy of the internal enumerator implemented to iterate over the collection. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public enum MemoryType Fields Name Description Normal Normal is the usual operator type. A new instance of an enumerator is always returned for multithread safety purposes. Safe Safe returns the same enumerator instance and updates references or a new instance in case of multiple enumeration and multithread access Strict Strict always returns the same enumerator instance. An exception is raised if the collection is enumerated more than once or if the collection is accessed by multiple threads concurrently. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.Logger.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.Logger.html",
    "title": "Class Logger | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Logger Logging module Inheritance System.Object Logger Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public static class Logger Properties | Improve this Doc View Source Log Gets or sets the log. Declaration public static Action<string> Log { get; set; } Property Value Type Description System.Action < System.String > The log. Remarks If Log is not set it will return a dummy action x => { return; }) eliminating the need for null-reference checks. Examples The following is an example of assigning a observer to the logging module: Logger.Log = x => Console.WriteLine(x);"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemsRemovedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemsRemovedHandler-1.html",
    "title": "Delegate ItemsRemovedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate ItemsRemovedHandler<T> The type of event raised after an item has been removed from a collection. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: The Clear() operation will not fire ItemsRemoved events. Note: an Update operation will fire an ItemsRemoved and an ItemsAdded event. Note: When an item is removed from a list by the RemoveAt operation, both an ItemsRemoved and an ItemRemovedAt event will be fired. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void ItemsRemovedHandler<T>(object sender, ItemCountEventArgs<T> eventArgs); Parameters Type Name Description System.Object sender ItemCountEventArgs <T> eventArgs An object with the item that was removed Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemsAddedHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemsAddedHandler-1.html",
    "title": "Delegate ItemsAddedHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate ItemsAddedHandler<T> The type of event raised after an item has been added to a collection. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an Update operation will fire an ItemsRemoved and an ItemsAdded event. Note: When an item is inserted into a list ( C5.IList`1 ), both ItemInserted and ItemsAdded events will be fired. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void ItemsAddedHandler<T>(object sender, ItemCountEventArgs<T> eventArgs); Parameters Type Name Description System.Object sender ItemCountEventArgs <T> eventArgs An object with the item that was added Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.ItemRemovedAtHandler-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.ItemRemovedAtHandler-1.html",
    "title": "Delegate ItemRemovedAtHandler<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Delegate ItemRemovedAtHandler<T> The type of event raised after an item has been removed from a list by a RemoveAt(int i) operation (or RemoveFirst(), RemoveLast(), Remove() operation). The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an ItemRemoved event will also be fired. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public delegate void ItemRemovedAtHandler<T>(object sender, ItemAtEventArgs<T> eventArgs); Parameters Type Name Description System.Object sender ItemAtEventArgs <T> eventArgs Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.BitArrayExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.BitArrayExtensions.html",
    "title": "Class BitArrayExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BitArrayExtensions This class provides supporting methods of java.util.BitSet that are not present in System.Collections.BitArray. Inheritance System.Object BitArrayExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class BitArrayExtensions Methods | Improve this Doc View Source And_UnequalLengths(BitArray, BitArray) Declaration public static BitArray And_UnequalLengths(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description System.Collections.BitArray bitsA System.Collections.BitArray bitsB Returns Type Description System.Collections.BitArray | Improve this Doc View Source AndNot(BitArray, BitArray) Declaration public static void AndNot(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description System.Collections.BitArray bitsA System.Collections.BitArray bitsB | Improve this Doc View Source BitWiseEquals(BitArray, BitArray) Declaration public static bool BitWiseEquals(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description System.Collections.BitArray bitsA System.Collections.BitArray bitsB Returns Type Description System.Boolean | Improve this Doc View Source Cardinality(BitArray) Returns the number of bits set to true in this BitSet. Declaration public static int Cardinality(this BitArray bits) Parameters Type Name Description System.Collections.BitArray bits The BitArray object. Returns Type Description System.Int32 The number of bits set to true in this BitSet. | Improve this Doc View Source Clear(BitArray) Sets all bits to false Declaration public static void Clear(this BitArray bits) Parameters Type Name Description System.Collections.BitArray bits The BitArray object. | Improve this Doc View Source Clear(BitArray, Int32) Sets the bit at the given index to false. Declaration public static void Clear(this BitArray bits, int index) Parameters Type Name Description System.Collections.BitArray bits The BitArray object. System.Int32 index The position to set to false. | Improve this Doc View Source Clear(BitArray, Int32, Int32) Declaration public static void Clear(this BitArray bits, int startIdx, int endIdx) Parameters Type Name Description System.Collections.BitArray bits System.Int32 startIdx System.Int32 endIdx | Improve this Doc View Source Equal(BitArray, OpenBitSet) Declaration public static bool Equal(this BitArray a, OpenBitSet b) Parameters Type Name Description System.Collections.BitArray a OpenBitSet b Returns Type Description System.Boolean | Improve this Doc View Source Flip(BitArray, Int32, Int32) Declaration public static void Flip(this BitArray bits, int startIdx, int endIdx) Parameters Type Name Description System.Collections.BitArray bits System.Int32 startIdx System.Int32 endIdx | Improve this Doc View Source NextClearBit(BitArray, Int32) Returns the next un-set bit at or after index, or -1 if no such bit exists. Declaration public static int NextClearBit(this BitArray bitArray, int index) Parameters Type Name Description System.Collections.BitArray bitArray System.Int32 index the index of bit array at which to start checking Returns Type Description System.Int32 the next set bit or -1 | Improve this Doc View Source NextSetBit(BitArray, Int32) Returns the next set bit at or after index, or -1 if no such bit exists. Declaration public static int NextSetBit(this BitArray bitArray, int index) Parameters Type Name Description System.Collections.BitArray bitArray System.Int32 index the index of bit array at which to start checking Returns Type Description System.Int32 the next set bit or -1 | Improve this Doc View Source Or_UnequalLengths(BitArray, BitArray) Declaration public static BitArray Or_UnequalLengths(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description System.Collections.BitArray bitsA System.Collections.BitArray bitsB Returns Type Description System.Collections.BitArray | Improve this Doc View Source PrevSetBit(BitArray, Int32) Declaration public static int PrevSetBit(this BitArray bitArray, int index) Parameters Type Name Description System.Collections.BitArray bitArray System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source SafeGet(BitArray, Int32) Declaration public static bool SafeGet(this BitArray a, int loc) Parameters Type Name Description System.Collections.BitArray a System.Int32 loc Returns Type Description System.Boolean | Improve this Doc View Source SafeSet(BitArray, Int32, Boolean) Declaration public static void SafeSet(this BitArray a, int loc, bool value) Parameters Type Name Description System.Collections.BitArray a System.Int32 loc System.Boolean value | Improve this Doc View Source Set(BitArray, Int32) Sets the bit at the given index to true. Declaration public static void Set(this BitArray bits, int index) Parameters Type Name Description System.Collections.BitArray bits The BitArray object. System.Int32 index The position to set to true. | Improve this Doc View Source Set(BitArray, Int32, Int32) Declaration public static void Set(this BitArray bits, int startIdx, int endIdx) Parameters Type Name Description System.Collections.BitArray bits System.Int32 startIdx System.Int32 endIdx | Improve this Doc View Source Set(BitArray, Int32, Int32, Boolean) Sets the bit at the given index range to true. Declaration public static void Set(this BitArray bits, int fromIndex, int toIndex, bool value) Parameters Type Name Description System.Collections.BitArray bits The BitArray object. System.Int32 fromIndex The start of the range to set(inclusive) System.Int32 toIndex The end of the range to set(exclusive) System.Boolean value the value to set to the range | Improve this Doc View Source Xor_UnequalLengths(BitArray, BitArray) Declaration public static BitArray Xor_UnequalLengths(this BitArray bitsA, BitArray bitsB) Parameters Type Name Description System.Collections.BitArray bitsA System.Collections.BitArray bitsB Returns Type Description System.Collections.BitArray"
  },
  "api/Lucene.Net/Lucene.Net.Support.AtomicInt64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AtomicInt64.html",
    "title": "Class AtomicInt64 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicInt64 NOTE: This was AtomicLong in the JDK Inheritance System.Object AtomicInt64 Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class AtomicInt64 Constructors | Improve this Doc View Source AtomicInt64() Declaration public AtomicInt64() | Improve this Doc View Source AtomicInt64(Int64) Declaration public AtomicInt64(long value) Parameters Type Name Description System.Int64 value Methods | Improve this Doc View Source AddAndGet(Int64) Declaration public long AddAndGet(long value) Parameters Type Name Description System.Int64 value Returns Type Description System.Int64 | Improve this Doc View Source CompareAndSet(Int64, Int64) Declaration public bool CompareAndSet(long expect, long update) Parameters Type Name Description System.Int64 expect System.Int64 update Returns Type Description System.Boolean | Improve this Doc View Source DecrementAndGet() Declaration public long DecrementAndGet() Returns Type Description System.Int64 | Improve this Doc View Source Get() Declaration public long Get() Returns Type Description System.Int64 | Improve this Doc View Source GetAndIncrement() Declaration public long GetAndIncrement() Returns Type Description System.Int64 | Improve this Doc View Source IncrementAndGet() Declaration public long IncrementAndGet() Returns Type Description System.Int64 | Improve this Doc View Source Set(Int32) Declaration public void Set(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public virtual string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String | Improve this Doc View Source ToString(String) Declaration public virtual string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public virtual string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.AtomicInt32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AtomicInt32.html",
    "title": "Class AtomicInt32 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicInt32 NOTE: This was AtomicInteger in the JDK Inheritance System.Object AtomicInt32 Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class AtomicInt32 Constructors | Improve this Doc View Source AtomicInt32() Declaration public AtomicInt32() | Improve this Doc View Source AtomicInt32(Int32) Declaration public AtomicInt32(int value_) Parameters Type Name Description System.Int32 value_ Methods | Improve this Doc View Source AddAndGet(Int32) Declaration public int AddAndGet(int value) Parameters Type Name Description System.Int32 value Returns Type Description System.Int32 | Improve this Doc View Source CompareAndSet(Int32, Int32) Declaration public bool CompareAndSet(int expect, int update) Parameters Type Name Description System.Int32 expect System.Int32 update Returns Type Description System.Boolean | Improve this Doc View Source DecrementAndGet() Declaration public int DecrementAndGet() Returns Type Description System.Int32 | Improve this Doc View Source Get() Declaration public int Get() Returns Type Description System.Int32 | Improve this Doc View Source GetAndDecrement() Declaration public int GetAndDecrement() Returns Type Description System.Int32 | Improve this Doc View Source GetAndIncrement() Declaration public int GetAndIncrement() Returns Type Description System.Int32 | Improve this Doc View Source IncrementAndGet() Declaration public int IncrementAndGet() Returns Type Description System.Int32 | Improve this Doc View Source Set(Int32) Declaration public void Set(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public virtual string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String | Improve this Doc View Source ToString(String) Declaration public virtual string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public virtual string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.AtomicBoolean.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AtomicBoolean.html",
    "title": "Class AtomicBoolean | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AtomicBoolean Inheritance System.Object AtomicBoolean Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class AtomicBoolean Constructors | Improve this Doc View Source AtomicBoolean() Declaration public AtomicBoolean() | Improve this Doc View Source AtomicBoolean(Boolean) Declaration public AtomicBoolean(bool initialValue) Parameters Type Name Description System.Boolean initialValue Methods | Improve this Doc View Source CompareAndSet(Boolean, Boolean) Declaration public bool CompareAndSet(bool expect, bool update) Parameters Type Name Description System.Boolean expect System.Boolean update Returns Type Description System.Boolean | Improve this Doc View Source Get() Declaration public bool Get() Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Boolean) Declaration public bool GetAndSet(bool newValue) Parameters Type Name Description System.Boolean newValue Returns Type Description System.Boolean | Improve this Doc View Source Set(Boolean) Declaration public void Set(bool newValue) Parameters Type Name Description System.Boolean newValue | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.AssemblyUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.AssemblyUtils.html",
    "title": "Class AssemblyUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssemblyUtils Methods for working with Assemblies. Inheritance System.Object AssemblyUtils Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class AssemblyUtils Methods | Improve this Doc View Source GetReferencedAssemblies() Gets a list of the host assembly's referenced assemblies excluding any Microsoft, System, or Mono prefixed assemblies or assemblies with official Microsoft key hashes. Essentially, we get a list of all non Microsoft assemblies here. Declaration public static IList<Assembly> GetReferencedAssemblies() Returns Type Description System.Collections.Generic.IList < System.Reflection.Assembly > Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.LeafSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IndexSearcher.LeafSlice.html",
    "title": "Class IndexSearcher.LeafSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexSearcher.LeafSlice A class holding a subset of the IndexSearcher s leaf contexts to be executed within a single thread. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object IndexSearcher.LeafSlice Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class LeafSlice Constructors | Improve this Doc View Source LeafSlice(AtomicReaderContext[]) Declaration public LeafSlice(params AtomicReaderContext[] leaves) Parameters Type Name Description AtomicReaderContext [] leaves Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.IFieldCache.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.IFieldCache.html",
    "title": "Interface IFieldCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFieldCache Expert: Maintains caches of term values. Created: May 19, 2004 11:13:14 AM @lucene.internal @since lucene 1.4 Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IFieldCache Properties | Improve this Doc View Source InfoStream If non-null, Lucene.Net.Search.FieldCacheImpl will warn whenever entries are created that are not sane according to FieldCacheSanityChecker . Declaration TextWriter InfoStream { get; set; } Property Value Type Description System.IO.TextWriter Methods | Improve this Doc View Source GetBytes(AtomicReader, String, FieldCache.IByteParser, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as bytes and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration [Obsolete(\"(4.4) Index as a numeric field using Int32Field and then use GetInt32s(AtomicReader, string, bool) instead.\")] FieldCache.Bytes GetBytes(AtomicReader reader, string field, FieldCache.IByteParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Byte s. FieldCache.IByteParser parser Computes System.Byte for string values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Bytes The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetBytes(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as a single System.Byte and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration [Obsolete(\"(4.4) Index as a numeric field using Int32Field and then use GetInt32s(AtomicReader, string, bool) instead.\")] FieldCache.Bytes GetBytes(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the single System.Byte values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Bytes The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetCacheEntries() EXPERT: Generates an array of FieldCache.CacheEntry objects representing all items currently in the IFieldCache . NOTE: These FieldCache.CacheEntry objects maintain a strong reference to the Cached Values. Maintaining references to a FieldCache.CacheEntry the AtomicReader associated with it has garbage collected will prevent the Value itself from being garbage collected when the Cache drops the System.WeakReference . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration FieldCache.CacheEntry[] GetCacheEntries() Returns Type Description FieldCache.CacheEntry [] | Improve this Doc View Source GetDocsWithField(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field and returns a bit set at the size of reader.MaxDoc , with turned on bits for each docid that does have a value for this field. Declaration IBits GetDocsWithField(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader System.String field Returns Type Description IBits | Improve this Doc View Source GetDocTermOrds(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a SortedSetDocValues instance, providing a method to retrieve the terms (as ords) per document. Declaration SortedSetDocValues GetDocTermOrds(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader Used to build a SortedSetDocValues instance System.String field Which field contains the strings. Returns Type Description SortedSetDocValues a SortedSetDocValues instance Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) Returns a FieldCache.Doubles over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Double s and returns an array of size reader.MaxDoc of the value each document has in the given field. Declaration FieldCache.Doubles GetDoubles(AtomicReader reader, string field, FieldCache.IDoubleParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Double s. FieldCache.IDoubleParser parser Computes System.Double for string values. May be null if the requested field was indexed as NumericDocValuesField or DoubleField . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Doubles The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetDoubles(AtomicReader, String, Boolean) Returns a FieldCache.Doubles over the values found in documents in the given field. Declaration FieldCache.Doubles GetDoubles(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Doubles See Also GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) | Improve this Doc View Source GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as shorts and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getShorts() in Lucene Declaration [Obsolete(\"(4.4) Index as a numeric field using Int32Field and then use GetInt32s(AtomicReader, string, bool) instead.\")] FieldCache.Int16s GetInt16s(AtomicReader reader, string field, FieldCache.IInt16Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Int16 s. FieldCache.IInt16Parser parser Computes System.Int16 for string values. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int16s The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetInt16s(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Int16 s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getShorts() in Lucene Declaration [Obsolete(\"(4.4) Index as a numeric field using Int32Field and then use GetInt32s(AtomicReader, string, bool) instead.\")] FieldCache.Int16s GetInt16s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Int16 s. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int16s The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) Returns an FieldCache.Int32s over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Int32 s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getInts() in Lucene Declaration FieldCache.Int32s GetInt32s(AtomicReader reader, string field, FieldCache.IInt32Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Int32 s. FieldCache.IInt32Parser parser Computes System.Int32 for string values. May be null if the requested field was indexed as NumericDocValuesField or Int32Field . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int32s The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetInt32s(AtomicReader, String, Boolean) Returns an FieldCache.Int32s over the values found in documents in the given field. NOTE: this was getInts() in Lucene Declaration FieldCache.Int32s GetInt32s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Int32s See Also GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) | Improve this Doc View Source GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) Returns a FieldCache.Int64s over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Int64 s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getLongs() in Lucene Declaration FieldCache.Int64s GetInt64s(AtomicReader reader, string field, FieldCache.IInt64Parser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Int64 s. FieldCache.IInt64Parser parser Computes System.Int64 for string values. May be null if the requested field was indexed as NumericDocValuesField or Int64Field . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Int64s The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetInt64s(AtomicReader, String, Boolean) Returns a FieldCache.Int64s over the values found in documents in the given field. NOTE: this was getLongs() in Lucene Declaration FieldCache.Int64s GetInt64s(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Int64s See Also GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) | Improve this Doc View Source GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) Returns a FieldCache.Singles over the values found in documents in the given field. If the field was indexed as NumericDocValuesField , it simply uses GetNumericDocValues(String) to read the values. Otherwise, it checks the internal cache for an appropriate entry, and if none is found, reads the terms in field as System.Single s and returns an array of size reader.MaxDoc of the value each document has in the given field. NOTE: this was getFloats() in Lucene Declaration FieldCache.Singles GetSingles(AtomicReader reader, string field, FieldCache.ISingleParser parser, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the System.Single s. FieldCache.ISingleParser parser Computes System.Single for string values. May be null if the requested field was indexed as NumericDocValuesField or SingleField . System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description FieldCache.Singles The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetSingles(AtomicReader, String, Boolean) Returns a FieldCache.Singles over the values found in documents in the given field. NOTE: this was getFloats() in Lucene Declaration FieldCache.Singles GetSingles(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField Returns Type Description FieldCache.Singles See Also GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) | Improve this Doc View Source GetTerms(AtomicReader, String, Boolean) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a BinaryDocValues instance, providing a method to retrieve the term (as a BytesRef ) per document. Declaration BinaryDocValues GetTerms(AtomicReader reader, string field, bool setDocsWithField) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the strings. System.Boolean setDocsWithField If true then GetDocsWithField(AtomicReader, String) will also be computed and stored in the IFieldCache . Returns Type Description BinaryDocValues The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetTerms(AtomicReader, String, Boolean, Single) Expert: just like GetTerms(AtomicReader, String, Boolean) , but you can specify whether more RAM should be consumed in exchange for faster lookups (default is \"true\"). Note that the first call for a given reader and field \"wins\", subsequent calls will share the same cache entry. Declaration BinaryDocValues GetTerms(AtomicReader reader, string field, bool setDocsWithField, float acceptableOverheadRatio) Parameters Type Name Description AtomicReader reader System.String field System.Boolean setDocsWithField System.Single acceptableOverheadRatio Returns Type Description BinaryDocValues | Improve this Doc View Source GetTermsIndex(AtomicReader, String) Checks the internal cache for an appropriate entry, and if none is found, reads the term values in field and returns a SortedDocValues instance, providing methods to retrieve sort ordinals and terms (as a BytesRef ) per document. Declaration SortedDocValues GetTermsIndex(AtomicReader reader, string field) Parameters Type Name Description AtomicReader reader Used to get field values. System.String field Which field contains the strings. Returns Type Description SortedDocValues The values in the given field for each document. Exceptions Type Condition System.IO.IOException If any error occurs. | Improve this Doc View Source GetTermsIndex(AtomicReader, String, Single) Expert: just like GetTermsIndex(AtomicReader, String) , but you can specify whether more RAM should be consumed in exchange for faster lookups (default is \"true\"). Note that the first call for a given reader and field \"wins\", subsequent calls will share the same cache entry. Declaration SortedDocValues GetTermsIndex(AtomicReader reader, string field, float acceptableOverheadRatio) Parameters Type Name Description AtomicReader reader System.String field System.Single acceptableOverheadRatio Returns Type Description SortedDocValues | Improve this Doc View Source PurgeAllCaches() EXPERT: Instructs the FieldCache to forcibly expunge all entries from the underlying caches. This is intended only to be used for test methods as a way to ensure a known base state of the Cache (with out needing to rely on GC to free System.WeakReference s). It should not be relied on for \"Cache maintenance\" in general application code. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration void PurgeAllCaches() | Improve this Doc View Source PurgeByCacheKey(Object) Expert: drops all cache entries associated with this reader CoreCacheKey . NOTE: this cache key must precisely match the reader that the cache entry is keyed on. If you pass a top-level reader, it usually will have no effect as Lucene now caches at the segment reader level. Declaration void PurgeByCacheKey(object coreCacheKey) Parameters Type Name Description System.Object coreCacheKey Extension Methods Number.IsNumber(Object) See Also FieldCacheSanityChecker"
  },
  "api/Lucene.Net/Lucene.Net.Search.ICollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ICollector.html",
    "title": "Interface ICollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICollector Expert: Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc. Lucene's core collectors are derived from Collector. Likely your application can use one of these classes, or subclass TopDocsCollector<T> , instead of implementing ICollector directly: TopDocsCollector<T> is an abstract base class that assumes you will retrieve the top N docs, according to some criteria, after collection is done. TopScoreDocCollector is a concrete subclass TopDocsCollector<T> and sorts according to score + docID. This is used internally by the IndexSearcher search methods that do not take an explicit Sort . It is likely the most frequently used collector. TopFieldCollector subclasses TopDocsCollector<T> and sorts according to a specified Sort object (sort by field). This is used internally by the IndexSearcher search methods that take an explicit Sort . TimeLimitingCollector , which wraps any other Collector and aborts the search if it's taken too much time. PositiveScoresOnlyCollector wraps any other ICollector and prevents collection of hits whose score is <= 0.0 ICollector decouples the score from the collected doc: the score computation is skipped entirely if it's not needed. Collectors that do need the score should implement the SetScorer(Scorer) method, to hold onto the passed Scorer instance, and call GetScore() within the collect method to compute the current hit's score. If your collector may request the score for a single hit multiple times, you should use ScoreCachingWrappingScorer . NOTE: The doc that is passed to the collect method is relative to the current reader. If your collector needs to resolve this to the docID space of the Multi*Reader, you must re-base it by recording the docBase from the most recent SetNextReader(AtomicReaderContext) call. Here's a simple example showing how to collect docIDs into an OpenBitSet : private class MySearchCollector : ICollector { private readonly OpenBitSet bits; private int docBase; public MySearchCollector(OpenBitSet bits) { if (bits == null) throw new ArgumentNullException(\"bits\"); this.bits = bits; } // ignore scorer public void SetScorer(Scorer scorer) { } // accept docs out of order (for a BitSet it doesn't matter) public bool AcceptDocsOutOfOrder { get { return true; } } public void Collect(int doc) { bits.Set(doc + docBase); } public void SetNextReader(AtomicReaderContext context) { this.docBase = context.DocBase; } } IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); searcher.Search(query, new MySearchCollector(bits)); Not all collectors will need to rebase the docID. For example, a collector that simply counts the total number of hits would skip it. NOTE: Prior to 2.9, Lucene silently filtered out hits with score <= 0. As of 2.9, the core ICollector s no longer do that. It's very unusual to have such hits (a negative query boost, or function query returning negative custom scores, could cause it to happen). If you need that behavior, use PositiveScoresOnlyCollector . @lucene.experimental @since 2.9 Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of BooleanQuery ) can achieve faster searching if the ICollector allows them to deliver the docIDs out of order. Many collectors don't mind getting docIDs out of order, so it's important to return true here. Declaration bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current AtomicReaderContext will be skipped and IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to Collect(Int32) ), should save the passed-in Scorer and call scorer.GetScore() when needed. Declaration void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Doubles.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Doubles.html",
    "title": "Class FieldCache.Doubles | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Doubles Field values as 64-bit doubles Inheritance System.Object FieldCache.Doubles Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Doubles Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Doubles EMPTY Field Value Type Description FieldCache.Doubles Methods | Improve this Doc View Source Get(Int32) Return a System.Double representation of this field's value. Declaration public abstract double Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Double Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.CreationPlaceholder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.CreationPlaceholder.html",
    "title": "Class FieldCache.CreationPlaceholder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.CreationPlaceholder Placeholder indicating creation of this cache is currently in-progress. Inheritance System.Object FieldCache.CreationPlaceholder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CreationPlaceholder Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.CacheEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.CacheEntry.html",
    "title": "Class FieldCache.CacheEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.CacheEntry EXPERT: A unique Identifier/Description for each item in the IFieldCache . Can be useful for logging/debugging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldCache.CacheEntry Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class CacheEntry Constructors | Improve this Doc View Source CacheEntry(Object, String, Type, Object, Object) Declaration public CacheEntry(object readerKey, string fieldName, Type cacheType, object custom, object value) Parameters Type Name Description System.Object readerKey System.String fieldName System.Type cacheType System.Object custom System.Object value Properties | Improve this Doc View Source CacheType Declaration public Type CacheType { get; } Property Value Type Description System.Type | Improve this Doc View Source Custom Declaration public object Custom { get; } Property Value Type Description System.Object | Improve this Doc View Source EstimatedSize The most recently estimated size of the value, null unless EstimateSize() has been called. Declaration public string EstimatedSize { get; } Property Value Type Description System.String | Improve this Doc View Source FieldName Declaration public string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source ReaderKey Declaration public object ReaderKey { get; } Property Value Type Description System.Object | Improve this Doc View Source Value Declaration public object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source EstimateSize() Computes (and stores) the estimated size of the cache Value Declaration public void EstimateSize() See Also EstimatedSize | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TermContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TermContext.html",
    "title": "Class TermContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermContext Maintains a IndexReader TermState view over IndexReader instances containing a single term. The TermContext doesn't track if the given TermState objects are valid, neither if the TermState instances refer to the same terms in the associated readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermContext Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermContext Constructors | Improve this Doc View Source TermContext(IndexReaderContext) Creates an empty TermContext from a IndexReaderContext Declaration public TermContext(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context | Improve this Doc View Source TermContext(IndexReaderContext, TermState, Int32, Int32, Int64) Creates a TermContext with an initial TermState , IndexReader pair. Declaration public TermContext(IndexReaderContext context, TermState state, int ord, int docFreq, long totalTermFreq) Parameters Type Name Description IndexReaderContext context TermState state System.Int32 ord System.Int32 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq expert: only available for queries that want to lie about docfreq This is a Lucene.NET INTERNAL API, use at your own risk Declaration public int DocFreq { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopReaderContext Holds the IndexReaderContext of the top-level IndexReader , used internally only for asserting. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public IndexReaderContext TopReaderContext { get; } Property Value Type Description IndexReaderContext | Improve this Doc View Source TotalTermFreq Returns the accumulated term frequency of all TermState instances passed to Register(TermState, Int32, Int32, Int64) . Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 the accumulated term frequency of all TermState instances passed to Register(TermState, Int32, Int32, Int64) . Methods | Improve this Doc View Source Build(IndexReaderContext, Term) Creates a TermContext from a top-level IndexReaderContext and the given Term . this method will lookup the given term in all context's leaf readers and register each of the readers containing the term in the returned TermContext using the leaf reader's ordinal. Note: the given context must be a top-level context. Declaration public static TermContext Build(IndexReaderContext context, Term term) Parameters Type Name Description IndexReaderContext context Term term Returns Type Description TermContext | Improve this Doc View Source Clear() Clears the TermContext internal state and removes all registered TermState s Declaration public void Clear() | Improve this Doc View Source Get(Int32) Returns the TermState for an leaf ordinal or null if no TermState for the ordinal was registered. Declaration public TermState Get(int ord) Parameters Type Name Description System.Int32 ord The readers leaf ordinal to get the TermState for. Returns Type Description TermState The TermState for the given readers ord or null if no TermState for the reader was registered | Improve this Doc View Source Register(TermState, Int32, Int32, Int64) Registers and associates a TermState with an leaf ordinal. The leaf ordinal should be derived from a IndexReaderContext 's leaf ord. Declaration public void Register(TermState state, int ord, int docFreq, long totalTermFreq) Parameters Type Name Description TermState state System.Int32 ord System.Int32 docFreq System.Int64 totalTermFreq Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.html",
    "title": "Class StoredFieldVisitor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredFieldVisitor Expert: Provides a low-level means of accessing the stored field values in an index. See Document(Int32, StoredFieldVisitor) . NOTE : a StoredFieldVisitor implementation should not try to load or visit other stored documents in the same reader because the implementation of stored fields for most codecs is not reeentrant and you will see strange exceptions as a result. See DocumentStoredFieldVisitor , which is a StoredFieldVisitor that builds the Document containing all stored fields. This is used by Document(Int32) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldVisitor DocumentStoredFieldVisitor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class StoredFieldVisitor Constructors | Improve this Doc View Source StoredFieldVisitor() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected StoredFieldVisitor() Methods | Improve this Doc View Source BinaryField(FieldInfo, Byte[]) Process a binary field. Declaration public virtual void BinaryField(FieldInfo fieldInfo, byte[] value) Parameters Type Name Description FieldInfo fieldInfo System.Byte [] value newly allocated byte array with the binary contents. | Improve this Doc View Source DoubleField(FieldInfo, Double) Process a System.Double numeric field. Declaration public virtual void DoubleField(FieldInfo fieldInfo, double value) Parameters Type Name Description FieldInfo fieldInfo System.Double value | Improve this Doc View Source Int32Field(FieldInfo, Int32) Process a System.Int32 numeric field. Declaration public virtual void Int32Field(FieldInfo fieldInfo, int value) Parameters Type Name Description FieldInfo fieldInfo System.Int32 value | Improve this Doc View Source Int64Field(FieldInfo, Int64) Process a System.Int64 numeric field. Declaration public virtual void Int64Field(FieldInfo fieldInfo, long value) Parameters Type Name Description FieldInfo fieldInfo System.Int64 value | Improve this Doc View Source NeedsField(FieldInfo) Hook before processing a field. Before a field is processed, this method is invoked so that subclasses can return a StoredFieldVisitor.Status representing whether they need that particular field or not, or to stop processing entirely. Declaration public abstract StoredFieldVisitor.Status NeedsField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description StoredFieldVisitor.Status | Improve this Doc View Source SingleField(FieldInfo, Single) Process a System.Single numeric field. Declaration public virtual void SingleField(FieldInfo fieldInfo, float value) Parameters Type Name Description FieldInfo fieldInfo System.Single value | Improve this Doc View Source StringField(FieldInfo, String) Process a System.String field Declaration public virtual void StringField(FieldInfo fieldInfo, string value) Parameters Type Name Description FieldInfo fieldInfo System.String value Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.Status.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.StoredFieldVisitor.Status.html",
    "title": "Enum StoredFieldVisitor.Status | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum StoredFieldVisitor.Status Enumeration of possible return values for NeedsField(FieldInfo) . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum Status Fields Name Description NO NO: don't visit this field, but continue processing fields for this document. STOP STOP: don't visit this field and stop processing any other fields for this document. YES YES: the field should be visited. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.Sorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Sorter.html",
    "title": "Namespace Lucene.Net.Index.Sorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index.Sorter Classes BlockJoinComparerSource Helper class to sort readers that contain blocks of documents. Note that this class is intended to used with SortingMergePolicy , and for other purposes has some limitations: Cannot yet be used with SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) Filling sort field values is not yet supported. @lucene.experimental EarlyTerminatingSortingCollector A ICollector that early terminates collection of documents on a per-segment basis, if the segment was sorted according to the given Sort . NOTE: the ICollector detects sorted segments according to SortingMergePolicy , so it's best used in conjunction with it. Also, it collects up to a specified m_numDocsToCollect from each segment, and therefore is mostly suitable for use in conjunction with collectors such as TopDocsCollector<T> , and not e.g. TotalHitCountCollector . NOTE : If you wrap a TopDocsCollector<T> that sorts in the same order as the index order, the returned GetTopDocs() will be correct. However the total of TotalHits hit count will be underestimated since not all matching documents will have been collected. NOTE : This ICollector uses ToString() to detect whether a segment was sorted with the same Sort . This has two implications: if a custom comparer is not implemented correctly and returns different identifiers for equivalent instances, this collector will not detect sorted segments, if you suddenly change the IndexWriter 's SortingMergePolicy to sort according to another criterion and if both the old and the new Sort s have the same identifier, this ICollector will incorrectly detect sorted segments. @lucene.experimental SortingAtomicReader An AtomicReader which supports sorting documents by a given Sort . You can use this class to sort an index as follows: IndexWriter writer; // writer to which the sorted index will be added DirectoryReader reader; // reader on the input index Sort sort; // determines how the documents are sorted AtomicReader sortingReader = SortingAtomicReader.Wrap(SlowCompositeReaderWrapper.Wrap(reader), sort); writer.AddIndexes(reader); reader.Dispose(); // alternatively, you can use a using block writer.Dispose(); // alternatively, you can use a using block This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortingMergePolicy A MergePolicy that reorders documents according to a Sort before merging them. As a consequence, all segments resulting from a merge will be sorted while segments resulting from a flush will be in the order in which documents have been added. NOTE : Never use this policy if you rely on AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) to have sequentially-assigned doc IDs, this policy will scatter doc IDs. NOTE : This policy should only be used with idempotent Sort s so that the order of segments is predictable. For example, using INDEXORDER in reverse (which is not idempotent) will make the order of documents in a segment depend on the number of times the segment has been merged. @lucene.experimental"
  },
  "api/Lucene.Net/Lucene.Net.Index.OpenMode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.OpenMode.html",
    "title": "Enum OpenMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum OpenMode Specifies the open mode for IndexWriter . Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum OpenMode Fields Name Description APPEND Opens an existing index. CREATE Creates a new index or overwrites an existing one. CREATE_OR_APPEND Creates a new index if one does not exist, otherwise it opens the index and documents will be appended. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.NumericDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.NumericDocValues.html",
    "title": "Class NumericDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericDocValues A per-document numeric value. Inheritance System.Object NumericDocValues Int64Values PackedInt32s.Reader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class NumericDocValues Constructors | Improve this Doc View Source NumericDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected NumericDocValues() Methods | Improve this Doc View Source Get(Int32) Returns the numeric value for the specified document ID. Declaration public abstract long Get(int docID) Parameters Type Name Description System.Int32 docID document ID to lookup Returns Type Description System.Int64 numeric value Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergeState.DocMap.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergeState.DocMap.html",
    "title": "Class MergeState.DocMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergeState.DocMap Remaps docids around deletes during merge Inheritance System.Object MergeState.DocMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocMap Properties | Improve this Doc View Source HasDeletions Returns true if there are any deletions. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxDoc Returns the total number of documents, ignoring deletions. Declaration public abstract int MaxDoc { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDeletedDocs Returns the number of deleted documents. Declaration public abstract int NumDeletedDocs { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumDocs Returns the number of not-deleted documents. Declaration public int NumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Build(AtomicReader) Creates a MergeState.DocMap instance appropriate for this reader. Declaration public static MergeState.DocMap Build(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description MergeState.DocMap | Improve this Doc View Source Get(Int32) Returns the mapped docID corresponding to the provided one. Declaration public abstract int Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.OneMerge.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.OneMerge.html",
    "title": "Class MergePolicy.OneMerge | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy.OneMerge OneMerge provides the information necessary to perform an individual primitive merge operation, resulting in a single new segment. The merge spec includes the subset of segments to be merged as well as whether the new segment should use the compound file format. Inheritance System.Object MergePolicy.OneMerge Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class OneMerge Constructors | Improve this Doc View Source OneMerge(IList<SegmentCommitInfo>) Sole constructor. Declaration public OneMerge(IList<SegmentCommitInfo> segments) Parameters Type Name Description System.Collections.Generic.IList < SegmentCommitInfo > segments List of SegmentCommitInfo s to be merged. Properties | Improve this Doc View Source EstimatedMergeBytes Estimated size in bytes of the merged segment. Declaration public long EstimatedMergeBytes { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Info Expert: Sets the SegmentCommitInfo of this MergePolicy.OneMerge . Allows sub-classes to e.g. set diagnostics properties. Declaration public virtual SegmentCommitInfo Info { get; set; } Property Value Type Description SegmentCommitInfo | Improve this Doc View Source MaxNumSegments Declaration public int MaxNumSegments { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeInfo Return MergeInfo describing this merge. Declaration public virtual MergeInfo MergeInfo { get; } Property Value Type Description MergeInfo | Improve this Doc View Source Segments Segments to be merged. Declaration public IList<SegmentCommitInfo> Segments { get; } Property Value Type Description System.Collections.Generic.IList < SegmentCommitInfo > | Improve this Doc View Source TotalBytesSize Returns the total size in bytes of this merge. Note that this does not indicate the size of the merged segment, but the input total size. This is only set once the merge is initialized by IndexWriter . Declaration public virtual long TotalBytesSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalDocCount Number of documents in the merged segment. Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalNumDocs Returns the total number of documents that are included with this merge. Note that this does not indicate the number of documents after the merge. Declaration public virtual int TotalNumDocs { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckAborted(Directory) Called periodically by IndexWriter while merging to see if the merge is aborted. Declaration public virtual void CheckAborted(Directory dir) Parameters Type Name Description Directory dir | Improve this Doc View Source GetDocMap(MergeState) Expert: If GetMergeReaders() reorders document IDs, this method must be overridden to return a mapping from the natural doc ID (the doc ID that would result from a natural merge) to the actual doc ID. This mapping is used to apply deletions that happened during the merge to the new segment. Declaration public virtual MergePolicy.DocMap GetDocMap(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description MergePolicy.DocMap | Improve this Doc View Source GetMergeReaders() Expert: Get the list of readers to merge. Note that this list does not necessarily match the list of segments to merge and should only be used to feed SegmentMerger to initialize a merge. When a MergePolicy.OneMerge reorders doc IDs, it must override GetDocMap(MergeState) too so that deletes that happened during the merge can be applied to the newly merged segment. Declaration public virtual IList<AtomicReader> GetMergeReaders() Returns Type Description System.Collections.Generic.IList < AtomicReader > | Improve this Doc View Source SegString(Directory) Returns a readable description of the current merge state. Declaration public virtual string SegString(Directory dir) Parameters Type Name Description Directory dir Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IIndexableFieldType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IIndexableFieldType.html",
    "title": "Interface IIndexableFieldType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IIndexableFieldType Describes the properties of a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public interface IIndexableFieldType Properties | Improve this Doc View Source DocValueType DocValues DocValuesType : if not NONE then the field's value will be indexed into docValues. Declaration DocValuesType DocValueType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source IndexOptions IndexOptions , describing what should be recorded into the inverted index Declaration IndexOptions IndexOptions { get; } Property Value Type Description IndexOptions | Improve this Doc View Source IsIndexed true if this field should be indexed (inverted) Declaration bool IsIndexed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsStored true if the field's value should be stored Declaration bool IsStored { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsTokenized true if this field's value should be analyzed by the Analyzer . This has no effect if IsIndexed returns false . Declaration bool IsTokenized { get; } Property Value Type Description System.Boolean | Improve this Doc View Source OmitNorms true if normalization values should be omitted for the field. This saves memory, but at the expense of scoring quality (length normalization will be disabled), and if you omit norms, you cannot use index-time boosts. Declaration bool OmitNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorOffsets true if this field's token character offsets should also be stored into term vectors. This option is illegal if term vectors are not enabled for the field ( StoreTermVectors is false ) Declaration bool StoreTermVectorOffsets { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorPayloads true if this field's token payloads should also be stored into the term vectors. This option is illegal if term vector positions are not enabled for the field ( StoreTermVectors is false ). Declaration bool StoreTermVectorPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectorPositions true if this field's token positions should also be stored into the term vectors. This option is illegal if term vectors are not enabled for the field ( StoreTermVectors is false ). Declaration bool StoreTermVectorPositions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source StoreTermVectors true if this field's indexed form should be also stored into term vectors. this builds a miniature inverted-index for this field which can be accessed in a document-oriented way from GetTermVector(Int32, String) . This option is illegal if IsIndexed returns false . Declaration bool StoreTermVectors { get; } Property Value Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsFlags.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsFlags.html",
    "title": "Enum DocsFlags | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DocsFlags Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax [Flags] public enum DocsFlags Fields Name Description FREQS Flag to pass to Docs(IBits, DocsEnum, DocsFlags) if you require term frequencies in the returned enum. NONE Flag to pass to Docs(IBits, DocsEnum, DocsFlags) if you don't require term frequencies in the returned enum. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsFlags.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsFlags.html",
    "title": "Enum DocsAndPositionsFlags | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DocsAndPositionsFlags Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax [Flags] public enum DocsAndPositionsFlags Fields Name Description NONE Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require that no offsets and payloads will be returned. OFFSETS Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require offsets in the returned enum. PAYLOADS Flag to pass to DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) if you require payloads in the returned enum. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The logical representation of a Document for indexing and searching. The document package provides the user level logical representation of content to be indexed and searched. The package also provides utilities for working with Document s and <xref:Lucene.Net.Index.IndexableField>s. Document and IndexableField A Document is a collection of <xref:Lucene.Net.Index.IndexableField>s. A <xref:Lucene.Net.Index.IndexableField> is a logical representation of a user's content that needs to be indexed or stored. <xref:Lucene.Net.Index.IndexableField>s have a number of properties that tell Lucene how to treat the content (like indexed, tokenized, stored, etc.) See the Field implementation of <xref:Lucene.Net.Index.IndexableField> for specifics on these properties. Note: it is common to refer to Document s having Field s, even though technically they have <xref:Lucene.Net.Index.IndexableField>s. Working with Documents First and foremost, a Document is something created by the user application. It is your job to create Documents based on the content of the files you are working with in your application (Word, txt, PDF, Excel or any other format.) How this is done is completely up to you. That being said, there are many tools available in other projects that can make the process of taking a file and converting it into a Lucene Document . The DateTools is a utility class to make dates and times searchable (remember, Lucene only searches text). <xref:Lucene.Net.Documents.IntField>, <xref:Lucene.Net.Documents.LongField>, <xref:Lucene.Net.Documents.FloatField> and DoubleField are a special helper class to simplify indexing of numeric values (and also dates) for fast range range queries with NumericRangeQuery (using a special sortable string representation of numeric values). Classes BinaryDocValuesField Field that stores a per-document BytesRef value. The values are stored directly with no sharing, which is a good fit when the fields don't share (many) values, such as a title field. If values may be shared and sorted it's better to use SortedDocValuesField . Here's an example usage: document.Add(new BinaryDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. ByteDocValuesField Field that stores a per-document System.Byte value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new ByteDocValuesField(name, (byte) 22)); If you also need to store the value, you should add a separate StoredField instance. CompressionTools Simple utility class providing static methods to compress and decompress binary data for stored fields. this class uses the System.IO.Compression.DeflateStream class to compress and decompress. DateTools Provides support for converting dates to strings and vice-versa. The strings are structured so that lexicographic sorting orders them by date, which makes them suitable for use as field values and search terms. This class also helps you to limit the resolution of your dates. Do not save dates with a finer resolution than you really need, as then TermRangeQuery and PrefixQuery will require more memory and become slower. Another approach is NumericUtils , which provides a sortable binary representation (prefix encoded) of numeric values, which date/time are. For indexing a System.DateTime , just get the System.DateTime.Ticks and index this as a numeric value with Int64Field and use NumericRangeQuery<T> to query it. DerefBytesDocValuesField Field that stores a per-document BytesRef value. Here's an example usage: document.Add(new DerefBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Document Documents are the unit of indexing and search. A Document is a set of fields. Each field has a name and a textual value. A field may be stored ( IsStored ) with the document, in which case it is returned with search hits on the document. Thus each document should typically contain one or more stored fields which uniquely identify it. Note that fields which are not IsStored are not available in documents retrieved from the index, e.g. with Doc or Document(Int32) . DocumentExtensions LUCENENET specific extensions to the Document class. DocumentStoredFieldVisitor A StoredFieldVisitor that creates a Document containing all stored fields, or only specific requested fields provided to DocumentStoredFieldVisitor(ISet<String>) . This is used by Document(Int32) to load a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DoubleDocValuesField Syntactic sugar for encoding doubles as NumericDocValues via DoubleToRawInt64Bits(Double) . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. DoubleField Field that indexes System.Double values for efficient range filtering and sorting. Here's an example usage: document.Add(new DoubleField(name, 6.0, Field.Store.NO)); For optimal performance, re-use the DoubleField and Document instance for more than one document: DoubleField field = new DoubleField(name, 0.0, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetDoubleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , SingleField . To perform range querying or filtering against a DoubleField , use NumericRangeQuery or NumericRangeFilter<T> . To sort according to a DoubleField , use the normal numeric sort types, eg DOUBLE . DoubleField values can also be loaded directly from IFieldCache . You may add the same field name as an DoubleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued DoubleField . A DoubleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep ( precisionStep ) configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. @since 2.9 Field Expert: directly create a field for a document. Most users should use one of the sugar subclasses: Int32Field , Int64Field , SingleField , DoubleField , BinaryDocValuesField , NumericDocValuesField , SortedDocValuesField , StringField , TextField , StoredField . A field is a section of a Document . Each field has three parts: name, type and value. Values may be text ( System.String , System.IO.TextReader or pre-analyzed TokenStream ), binary ( byte[] ), or numeric ( System.Int32 , System.Int64 , System.Single , or System.Double ). Fields are optionally stored in the index, so that they may be returned with hits on the document. NOTE: the field type is an IIndexableFieldType . Making changes to the state of the IIndexableFieldType will impact any Field it is used in. It is strongly recommended that no changes be made after Field instantiation. Field.Byte Field.Double Field.Int16 Field.Int32 Field.Int64 Field.Number Field.Single FieldExtensions LUCENENET specific extension methods to add functionality to enumerations that mimic Lucene FieldType Describes the properties of a field. IndexableFieldExtensions Extension methods to the IIndexableField interface. Int16DocValuesField Field that stores a per-document System.Int16 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int16DocValuesField(name, (short) 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was ShortDocValuesField in Lucene Int32DocValuesField Field that stores a per-document System.Int32 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int32DocValuesField(name, 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was IntDocValuesField in Lucene Int32Field Field that indexes System.Int32 values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int32Field(name, 6, Field.Store.NO)); For optimal performance, re-use the Int32Field and Document instance for more than one document: Int32Field field = new Int32Field(name, 6, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt32Value(value) writer.AddDocument(document); ... } See also Int64Field , SingleField , DoubleField . To perform range querying or filtering against a Int32Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int32Field , use the normal numeric sort types, eg INT32 . Int32Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int32Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int32Field . An Int32Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was IntField in Lucene @since 2.9 Int64DocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was LongDocValuesField in Lucene Int64Field Field that indexes System.Int64 values for efficient range filtering and sorting. Here's an example usage: document.Add(new Int64Field(name, 6L, Field.Store.NO)); For optimal performance, re-use the Int64Field and Document instance for more than one document: Int64Field field = new Int64Field(name, 0L, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetInt64Value(value) writer.AddDocument(document); ... } See also Int32Field , SingleField , DoubleField . Any type that can be converted to long can also be indexed. For example, date/time values represented by a System.DateTime can be translated into a long value using the System.DateTime.Ticks property. If you don't need millisecond precision, you can quantize the value, either by dividing the result of System.DateTime.Ticks or using the separate getters (for year, month, etc.) to construct an System.Int32 or System.Int64 value. To perform range querying or filtering against a Int64Field , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a Int64Field , use the normal numeric sort types, eg INT64 . Int64Field values can also be loaded directly from IFieldCache . You may add the same field name as an Int64Field to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued Int64Field . An Int64Field will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. this class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was LongField in Lucene @since 2.9 LazyDocument Defers actually loading a field's value until you ask for it. You must not use the returned Field instances after the provided reader has been closed. LazyDocument.LazyField @lucene.internal NumericDocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new NumericDocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. PackedInt64DocValuesField Field that stores a per-document System.Int64 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new PackedInt64DocValuesField(name, 22L)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was PackedLongDocValuesField in Lucene SingleDocValuesField Syntactic sugar for encoding floats as NumericDocValues via SingleToRawInt32Bits(Single) . Per-document floating point values can be retrieved via GetSingles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring four bytes per document. Consider encoding floating point values yourself with only as much precision as you require. NOTE: This was FloatDocValuesField in Lucene SingleField Field that indexes System.Single values for efficient range filtering and sorting. Here's an example usage: document.Add(new SingleField(name, 6.0F, Field.Store.NO)); For optimal performance, re-use the SingleField and Document instance for more than one document: FloatField field = new SingleField(name, 0.0F, Field.Store.NO); Document document = new Document(); document.Add(field); for (all documents) { ... field.SetSingleValue(value) writer.AddDocument(document); ... } See also Int32Field , Int64Field , DoubleField . To perform range querying or filtering against a SingleField , use NumericRangeQuery<T> or NumericRangeFilter<T> . To sort according to a SingleField , use the normal numeric sort types, eg SINGLE . SingleField values can also be loaded directly from IFieldCache . You may add the same field name as an SingleField to the same document more than once. Range querying and filtering will be the logical OR of all values; so a range query will hit all documents that have at least one value in the range. However sort behavior is not defined. If you need to sort, you should separately index a single-valued SingleField . A SingleField will consume somewhat more disk space in the index than an ordinary single-valued field. However, for a typical index that includes substantial textual content per document, this increase will likely be in the noise. Within Lucene, each numeric value is indexed as a trie structure, where each term is logically assigned to larger and larger pre-defined brackets (which are simply lower-precision representations of the value). The step size between each successive bracket is called the precisionStep , measured in bits. Smaller precisionStep values result in larger number of brackets, which consumes more disk space in the index but may result in faster range search performance. The default value, 4, was selected for a reasonable tradeoff of disk space consumption versus performance. You can create a custom FieldType and invoke the NumericPrecisionStep setter if you'd like to change the value. Note that you must also specify a congruent value when creating NumericRangeQuery<T> or NumericRangeFilter<T> . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue , which produces one term per value. For more information on the internals of numeric trie indexing, including the PrecisionStep precisionStep configuration, see NumericRangeQuery<T> . The format of indexed values is described in NumericUtils . If you only need to sort by numeric value, and never run range querying/filtering, you can index using a precisionStep of System.Int32.MaxValue . this will minimize disk space consumed. More advanced users can instead use NumericTokenStream directly, when indexing numbers. This class is a wrapper around this token stream type for easier, more intuitive usage. NOTE: This was FloatField in Lucene @since 2.9 SortedBytesDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. SortedDocValuesField Field that stores a per-document BytesRef value, indexed for sorting. Here's an example usage: document.Add(new SortedDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. SortedSetDocValuesField Field that stores a set of per-document BytesRef values, indexed for faceting,grouping,joining. Here's an example usage: document.Add(new SortedSetDocValuesField(name, new BytesRef(\"hello\"))); document.Add(new SortedSetDocValuesField(name, new BytesRef(\"world\"))); If you also need to store the value, you should add a separate StoredField instance. StoredField A field whose value is stored so that Doc(Int32) and Document(Int32) will return the field and its value. StraightBytesDocValuesField Field that stores a per-document BytesRef value. If values may be shared it's better to use SortedDocValuesField . Here's an example usage: document.Add(new StraightBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. StringField A field that is indexed but not tokenized: the entire System.String value is indexed as a single token. For example this might be used for a 'country' field or an 'id' field, or any field that you intend to use for sorting or access through the field cache. TextField A field that is indexed and tokenized, without term vectors. For example this would be used on a 'body' field, that contains the bulk of a document's text. Enums DateTools.Resolution Specifies the time granularity. Field.Index Specifies whether and how a field should be indexed. Field.Store Specifies whether and how a field should be stored. Field.TermVector Specifies whether and how a field should have term vectors. NumericFieldType Data type of the numeric IIndexableField value NumericType Data type of the numeric value @since 3.2"
  },
  "api/Lucene.Net/Lucene.Net.Documents.IndexableFieldExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.IndexableFieldExtensions.html",
    "title": "Class IndexableFieldExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexableFieldExtensions Extension methods to the IIndexableField interface. Inheritance System.Object IndexableFieldExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public static class IndexableFieldExtensions Methods | Improve this Doc View Source GetByteValueOrDefault(IIndexableField) Returns the field value as System.Byte or 0 if the type is non-numeric. Declaration public static byte GetByteValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Byte The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetDoubleValueOrDefault(IIndexableField) Returns the field value as System.Double or 0 if the type is non-numeric. Declaration public static double GetDoubleValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Double The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt16ValueOrDefault(IIndexableField) Returns the field value as System.Int16 or 0 if the type is non-numeric. Declaration public static short GetInt16ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int16 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt32ValueOrDefault(IIndexableField) Returns the field value as System.Int32 or 0 if the type is non-numeric. Declaration public static int GetInt32ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int32 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetInt64ValueOrDefault(IIndexableField) Returns the field value as System.Int64 or 0 if the type is non-numeric. Declaration public static long GetInt64ValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Int64 The field value or 0 if the type is non-numeric. | Improve this Doc View Source GetSingleValueOrDefault(IIndexableField) Returns the field value as System.Single or 0 if the type is non-numeric. Declaration public static float GetSingleValueOrDefault(this IIndexableField field) Parameters Type Name Description IIndexableField field This IIndexableField . Returns Type Description System.Single The field value or 0 if the type is non-numeric."
  },
  "api/Lucene.Net/Lucene.Net.Documents.FieldExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.FieldExtensions.html",
    "title": "Class FieldExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldExtensions LUCENENET specific extension methods to add functionality to enumerations that mimic Lucene Inheritance System.Object FieldExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public static class FieldExtensions Methods | Improve this Doc View Source IsAnalyzed(Field.Index) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool IsAnalyzed(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source IsIndexed(Field.Index) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool IsIndexed(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source IsStored(Field.Store) Declaration public static bool IsStored(this Field.Store store) Parameters Type Name Description Field.Store store Returns Type Description System.Boolean | Improve this Doc View Source IsStored(Field.TermVector) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool IsStored(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean | Improve this Doc View Source OmitNorms(Field.Index) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool OmitNorms(this Field.Index index) Parameters Type Name Description Field.Index index Returns Type Description System.Boolean | Improve this Doc View Source ToIndex(Boolean, Boolean) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static Field.Index ToIndex(bool indexed, bool analyed) Parameters Type Name Description System.Boolean indexed System.Boolean analyed Returns Type Description Field.Index | Improve this Doc View Source ToIndex(Boolean, Boolean, Boolean) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static Field.Index ToIndex(bool indexed, bool analyzed, bool omitNorms) Parameters Type Name Description System.Boolean indexed System.Boolean analyzed System.Boolean omitNorms Returns Type Description Field.Index | Improve this Doc View Source ToTermVector(Boolean, Boolean, Boolean) Get the best representation of a TermVector given the flags. Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static Field.TermVector ToTermVector(bool stored, bool withOffsets, bool withPositions) Parameters Type Name Description System.Boolean stored System.Boolean withOffsets System.Boolean withPositions Returns Type Description Field.TermVector | Improve this Doc View Source WithOffsets(Field.TermVector) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool WithOffsets(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean | Improve this Doc View Source WithPositions(Field.TermVector) Declaration [Obsolete(\"This is here only to ease transition from the pre-4.0 APIs.\")] public static bool WithPositions(this Field.TermVector tv) Parameters Type Name Description Field.TermVector tv Returns Type Description System.Boolean"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoReader.html",
    "title": "Class SegmentInfoReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfoReader Specifies an API for classes that can read SegmentInfo information. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoReader Lucene3xSegmentInfoReader Lucene40SegmentInfoReader Lucene46SegmentInfoReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoReader Constructors | Improve this Doc View Source SegmentInfoReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoReader() Methods | Improve this Doc View Source Read(Directory, String, IOContext) Read SegmentInfo data from a directory. Declaration public abstract SegmentInfo Read(Directory directory, string segmentName, IOContext context) Parameters Type Name Description Directory directory Directory to read from. System.String segmentName Name of the segment to read. IOContext context IO context. Returns Type Description SegmentInfo Infos instance to be populated with data. Exceptions Type Condition System.IO.IOException If an I/O error occurs. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.SegmentInfoFormat.html",
    "title": "Class SegmentInfoFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentInfoFormat Expert: Controls the format of the SegmentInfo (segment metadata file). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentInfoFormat Lucene3xSegmentInfoFormat Lucene40SegmentInfoFormat Lucene46SegmentInfoFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class SegmentInfoFormat Constructors | Improve this Doc View Source SegmentInfoFormat() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SegmentInfoFormat() Properties | Improve this Doc View Source SegmentInfoReader Returns the SegmentInfoReader for reading SegmentInfo instances. Declaration public abstract SegmentInfoReader SegmentInfoReader { get; } Property Value Type Description SegmentInfoReader | Improve this Doc View Source SegmentInfoWriter Returns the SegmentInfoWriter for writing SegmentInfo instances. Declaration public abstract SegmentInfoWriter SegmentInfoWriter { get; } Property Value Type Description SegmentInfoWriter Extension Methods Number.IsNumber(Object) See Also SegmentInfo"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.SortedSetEntry.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45DocValuesProducer.SortedSetEntry.html",
    "title": "Class Lucene45DocValuesProducer.SortedSetEntry | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45DocValuesProducer.SortedSetEntry Metadata entry for a sorted-set docvalues field. Inheritance System.Object Lucene45DocValuesProducer.SortedSetEntry Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax protected class SortedSetEntry Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsReader.html",
    "title": "Class SepPostingsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SepPostingsReader Concrete class that reads the current doc/freq/skip postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsReaderBase SepPostingsReader Implements System.IDisposable Inherited Members PostingsReaderBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public class SepPostingsReader : PostingsReaderBase, IDisposable Constructors | Improve this Doc View Source SepPostingsReader(Directory, FieldInfos, SegmentInfo, IOContext, Int32StreamFactory, String) Declaration public SepPostingsReader(Directory dir, FieldInfos fieldInfos, SegmentInfo segmentInfo, IOContext context, Int32StreamFactory intFactory, string segmentSuffix) Parameters Type Name Description Directory dir FieldInfos fieldInfos SegmentInfo segmentInfo IOContext context Int32StreamFactory intFactory System.String segmentSuffix Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides PostingsReaderBase.CheckIntegrity() | Improve this Doc View Source DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) Declaration public override void DecodeTerm(long[] empty, DataInput input, FieldInfo fieldInfo, BlockTermState termState, bool absolute) Parameters Type Name Description System.Int64 [] empty DataInput input FieldInfo fieldInfo BlockTermState termState System.Boolean absolute Overrides PostingsReaderBase.DecodeTerm(Int64[], DataInput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsReaderBase.Dispose(Boolean) | Improve this Doc View Source Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) Declaration public override DocsEnum Docs(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsEnum reuse, DocsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsEnum reuse DocsFlags flags Returns Type Description DocsEnum Overrides PostingsReaderBase.Docs(FieldInfo, BlockTermState, IBits, DocsEnum, DocsFlags) | Improve this Doc View Source DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) Declaration public override DocsAndPositionsEnum DocsAndPositions(FieldInfo fieldInfo, BlockTermState termState, IBits liveDocs, DocsAndPositionsEnum reuse, DocsAndPositionsFlags flags) Parameters Type Name Description FieldInfo fieldInfo BlockTermState termState IBits liveDocs DocsAndPositionsEnum reuse DocsAndPositionsFlags flags Returns Type Description DocsAndPositionsEnum Overrides PostingsReaderBase.DocsAndPositions(FieldInfo, BlockTermState, IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) | Improve this Doc View Source Init(IndexInput) Declaration public override void Init(IndexInput termsIn) Parameters Type Name Description IndexInput termsIn Overrides PostingsReaderBase.Init(IndexInput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsReaderBase.NewTermState() | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PostingsReaderBase.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.DirectDocValuesFormat.html",
    "title": "Class DirectDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectDocValuesFormat In-memory docvalues format that does no (or very little) compression. Indexed values are stored on disk, but then at search time all values are loaded into memory as simple .NET arrays. For numeric values, it uses byte[], short[], int[], long[] as necessary to fit the range of the values. For binary values, there is an System.Int32 (4 bytes) overhead per value. Limitations: For binary and sorted fields the total space required for all binary values cannot exceed about 2.1 GB (see MAX_TOTAL_BYTES_LENGTH ). For sorted set fields, the sum of the size of each document's set of values cannot exceed about 2.1 B values (see MAX_SORTED_SET_ORDS ). For example, if every document has 10 values (10 instances of SortedSetDocValuesField ) added, then no more than ~210 M documents can be added to one segment. Inheritance System.Object DocValuesFormat DirectDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [DocValuesFormatName(\"Direct\")] public class DirectDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source DirectDocValuesFormat() Sole constructor. Declaration public DirectDocValuesFormat() Fields | Improve this Doc View Source MAX_SORTED_SET_ORDS The sum of the number of values across all documents in a sorted set field cannot exceed this. Declaration public static readonly int MAX_SORTED_SET_ORDS Field Value Type Description System.Int32 | Improve this Doc View Source MAX_TOTAL_BYTES_LENGTH The sum of all byte lengths for binary field, or for the unique values in sorted or sorted set fields, cannot exceed this. Declaration public static readonly int MAX_TOTAL_BYTES_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumSingleAssociations.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumSingleAssociations.html",
    "title": "Class TaxonomyFacetSumSingleAssociations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetSumSingleAssociations Aggregates sum of System.Single values previously indexed with SingleAssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumFloatAssociations in Lucene @lucene.experimental Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumSingleAssociations Inherited Members SingleTaxonomyFacets.m_values SingleTaxonomyFacets.Rollup() SingleTaxonomyFacets.GetSpecificValue(String, String[]) SingleTaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumSingleAssociations : SingleTaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumSingleAssociations(TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumSingleAssociations against the default index field. Declaration public TaxonomyFacetSumSingleAssociations(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source TaxonomyFacetSumSingleAssociations(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumSingleAssociations against the specified index field. Declaration public TaxonomyFacetSumSingleAssociations(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.ScoreValueSource.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.ScoreValueSource.html",
    "title": "Class TaxonomyFacetSumValueSource.ScoreValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetSumValueSource.ScoreValueSource ValueSource that returns the score for each hit; use this to aggregate the sum of all hit scores for each facet label. Inheritance System.Object ValueSource TaxonomyFacetSumValueSource.ScoreValueSource Inherited Members ValueSource.ToString() ValueSource.CreateWeight(IDictionary, IndexSearcher) ValueSource.NewContext(IndexSearcher) ValueSource.GetSortField(Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class ScoreValueSource : ValueSource Constructors | Improve this Doc View Source ScoreValueSource() Sole constructor. Declaration public ScoreValueSource() Methods | Improve this Doc View Source Equals(TaxonomyFacetSumValueSource.ScoreValueSource) Declaration protected bool Equals(TaxonomyFacetSumValueSource.ScoreValueSource other) Parameters Type Name Description TaxonomyFacetSumValueSource.ScoreValueSource other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides ValueSource.Equals(Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context AtomicReaderContext readerContext Returns Type Description FunctionValues Overrides ValueSource.GetValues(IDictionary, AtomicReaderContext)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.html",
    "title": "Class TaxonomyFacetSumValueSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetSumValueSource Aggregates sum of values from DoubleVal(Int32) and DoubleVal(Int32, Double[]) , for each facet label. @lucene.experimental Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumValueSource Inherited Members SingleTaxonomyFacets.m_values SingleTaxonomyFacets.Rollup() SingleTaxonomyFacets.GetSpecificValue(String, String[]) SingleTaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumValueSource : SingleTaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumValueSource(OrdinalsReader, TaxonomyReader, FacetsConfig, FacetsCollector, ValueSource) Aggreggates float facet values from the provided ValueSource , and pulls ordinals from the provided OrdinalsReader . Declaration public TaxonomyFacetSumValueSource(OrdinalsReader ordinalsReader, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc, ValueSource valueSource) Parameters Type Name Description OrdinalsReader ordinalsReader TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc ValueSource valueSource | Improve this Doc View Source TaxonomyFacetSumValueSource(TaxonomyReader, FacetsConfig, FacetsCollector, ValueSource) Aggreggates float facet values from the provided ValueSource , pulling ordinals using DocValuesOrdinalsReader against the default indexed facet field DEFAULT_INDEX_FIELD_NAME . Declaration public TaxonomyFacetSumValueSource(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc, ValueSource valueSource) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc ValueSource valueSource"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyReader.html",
    "title": "Class TaxonomyReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyReader TaxonomyReader is the read-only interface with which the faceted-search library uses the taxonomy during search time. A TaxonomyReader holds a list of categories. Each category has a serial number which we call an \"ordinal\", and a hierarchical \"path\" name: The ordinal is an integer that starts at 0 for the first category (which is always the root category), and grows contiguously as more categories are added; Note that once a category is added, it can never be deleted. The path is a CategoryPath object specifying the category's position in the hierarchy. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers to be active concurrently with a single writer. Readers follow so-called \"point in time\" semantics, i.e., a TaxonomyReader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called. In faceted search, two separate indices are used: the main Lucene index, and the taxonomy. Because the main index refers to the categories listed in the taxonomy, it is important to open the taxonomy after opening the main index, and it is also necessary to Reopen() the taxonomy after Reopen()ing the main index. This order is important, otherwise it would be possible for the main index to refer to a category which is not yet visible in the old snapshot of the taxonomy. Note that it is indeed fine for the the taxonomy to be opened after the main index - even a long time after. The reason is that once a category is added to the taxonomy, it can never be changed or deleted, so there is no danger that a \"too new\" taxonomy not being consistent with an older index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TaxonomyReader DirectoryTaxonomyReader Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class TaxonomyReader : IDisposable Constructors | Improve this Doc View Source TaxonomyReader() Sole constructor. Declaration public TaxonomyReader() Fields | Improve this Doc View Source INVALID_ORDINAL Ordinals are always non-negative, so a negative ordinal can be used to signify an error. Methods here return INVALID_ORDINAL (-1) in this case. Declaration public const int INVALID_ORDINAL = -1 Field Value Type Description System.Int32 | Improve this Doc View Source ROOT_ORDINAL The root category (the category with the empty path) always has the ordinal 0, to which we give a name ROOT_ORDINAL. GetOrdinal(FacetLabel) of an empty path will always return ROOT_ORDINAL , and GetPath(Int32) with ROOT_ORDINAL will return the empty path. Declaration public const int ROOT_ORDINAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source CommitUserData Retrieve user committed data. Declaration public abstract IDictionary<string, string> CommitUserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > See Also CommitData | Improve this Doc View Source Count Returns the number of categories in the taxonomy. Note that the number of categories returned is often slightly higher than the number of categories inserted into the taxonomy; This is because when a category is added to the taxonomy, its ancestors are also added automatically (including the root, which always get ordinal 0). Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ParallelTaxonomyArrays Returns a ParallelTaxonomyArrays object which can be used to efficiently traverse the taxonomy tree. Declaration public abstract ParallelTaxonomyArrays ParallelTaxonomyArrays { get; } Property Value Type Description ParallelTaxonomyArrays | Improve this Doc View Source RefCount Returns the current refCount for this taxonomy reader. Declaration public int RefCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source DecRef() Expert: decreases the refCount of this TaxonomyReader instance. If the refCount drops to 0 this taxonomy reader is closed. Declaration public void DecRef() | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoClose() performs the actual task of closing the resources that are used by the taxonomy reader. Declaration protected abstract void DoClose() | Improve this Doc View Source DoOpenIfChanged() Implements the actual opening of a new TaxonomyReader instance if the taxonomy has changed. Declaration protected abstract TaxonomyReader DoOpenIfChanged() Returns Type Description TaxonomyReader See Also OpenIfChanged<T>(T) | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if this IndexReader is disposed Declaration protected void EnsureOpen() | Improve this Doc View Source GetChildren(Int32) Returns an iterator over the children of the given ordinal. Declaration public virtual TaxonomyReader.ChildrenIterator GetChildren(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description TaxonomyReader.ChildrenIterator | Improve this Doc View Source GetOrdinal(FacetLabel) Returns the ordinal of the category given as a path. The ordinal is the category's serial number, an integer which starts with 0 and grows as more categories are added (note that once a category is added, it can never be deleted). Declaration public abstract int GetOrdinal(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 the category's ordinal or INVALID_ORDINAL if the category wasn't found. | Improve this Doc View Source GetOrdinal(String, String[]) Returns ordinal for the dim + path. Declaration public virtual int GetOrdinal(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Int32 | Improve this Doc View Source GetPath(Int32) Returns the path name of the category with the given ordinal. Declaration public abstract FacetLabel GetPath(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description FacetLabel | Improve this Doc View Source IncRef() Expert: increments the refCount of this TaxonomyReader instance. RefCounts can be used to determine when a taxonomy reader can be closed safely, i.e. as soon as there are no more references. Be sure to always call a corresponding DecRef() , in a finally clause; otherwise the reader may never be disposed. Declaration public void IncRef() | Improve this Doc View Source OpenIfChanged<T>(T) If the taxonomy has changed since the provided reader was opened, open and return a new TaxonomyReader ; else, return null . The new reader, if not null , will be the same type of reader as the one given to this method. This method is typically far less costly than opening a fully new TaxonomyReader as it shares resources with the provided TaxonomyReader , when possible. Declaration public static T OpenIfChanged<T>(T oldTaxoReader) where T : TaxonomyReader Parameters Type Name Description T oldTaxoReader Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source TryIncRef() Expert: increments the refCount of this TaxonomyReader instance only if it has not been closed yet. Returns true on success. Declaration public bool TryIncRef() Returns Type Description System.Boolean Implements System.IDisposable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.Cl2oTaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.Cl2oTaxonomyWriterCache.html",
    "title": "Class Cl2oTaxonomyWriterCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Cl2oTaxonomyWriterCache ITaxonomyWriterCache using CompactLabelToOrdinal . Although called cache, it maintains in memory all the mappings from category to ordinal, relying on that CompactLabelToOrdinal is an efficient mapping for this purpose. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Cl2oTaxonomyWriterCache Implements ITaxonomyWriterCache System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class Cl2oTaxonomyWriterCache : ITaxonomyWriterCache, IDisposable Constructors | Improve this Doc View Source Cl2oTaxonomyWriterCache(Int32, Single, Int32) Sole constructor. Declaration public Cl2oTaxonomyWriterCache(int initialCapcity, float loadFactor, int numHashArrays) Parameters Type Name Description System.Int32 initialCapcity System.Single loadFactor System.Int32 numHashArrays Properties | Improve this Doc View Source IsFull Declaration public virtual bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source Get(FacetLabel) Declaration public virtual int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetMemoryUsage() Returns the number of bytes in memory used by this object. Declaration public virtual int GetMemoryUsage() Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Declaration public virtual bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean Implements ITaxonomyWriterCache System.IDisposable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.html",
    "title": "Class CompactLabelToOrdinal | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompactLabelToOrdinal This is a very efficient LabelToOrdinal implementation that uses a Lucene.Net.Facet.Taxonomy.WriterCache.CharBlockArray to store all labels and a configurable number of Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to reference the labels. Since the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s don't handle collisions, a CollisionMap is used to store the colliding labels. This data structure grows by adding a new HashArray whenever the number of collisions in the CollisionMap exceeds Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor GetMaxOrdinal(). Growing also includes reinserting all colliding labels into the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to possibly reduce the number of collisions. For setting the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor see CompactLabelToOrdinal(Int32, Single, Int32) . This data structure has a much lower memory footprint (~30%) compared to a Java HashMap<String, Integer>. It also only uses a small fraction of objects a HashMap would use, thus limiting the GC overhead. Ingestion speed was also ~50% faster compared to a HashMap for 3M unique labels. @lucene.experimental Inheritance System.Object LabelToOrdinal CompactLabelToOrdinal Inherited Members LabelToOrdinal.m_counter LabelToOrdinal.INVALID_ORDINAL LabelToOrdinal.MaxOrdinal LabelToOrdinal.GetNextOrdinal() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class CompactLabelToOrdinal : LabelToOrdinal Constructors | Improve this Doc View Source CompactLabelToOrdinal(Int32, Single, Int32) Sole constructor. Declaration public CompactLabelToOrdinal(int initialCapacity, float loadFactor, int numHashArrays) Parameters Type Name Description System.Int32 initialCapacity System.Single loadFactor System.Int32 numHashArrays Fields | Improve this Doc View Source DefaultLoadFactor Default maximum load factor. Declaration public const float DefaultLoadFactor = 0.15F Field Value Type Description System.Single | Improve this Doc View Source TERMINATOR_CHAR Declaration public const char TERMINATOR_CHAR = '\\uffff' Field Value Type Description System.Char Properties | Improve this Doc View Source SizeOfMap How many labels. Declaration public virtual int SizeOfMap { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32) Declaration public override void AddLabel(FacetLabel label, int ordinal) Parameters Type Name Description FacetLabel label System.Int32 ordinal Overrides LabelToOrdinal.AddLabel(FacetLabel, Int32) | Improve this Doc View Source GetOrdinal(FacetLabel) Declaration public override int GetOrdinal(FacetLabel label) Parameters Type Name Description FacetLabel label Returns Type Description System.Int32 Overrides LabelToOrdinal.GetOrdinal(FacetLabel)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache.html",
    "title": "Interface ITaxonomyWriterCache | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITaxonomyWriterCache ITaxonomyWriterCache is a relatively simple interface for a cache of category->ordinal mappings, used in ITaxonomyWriter implementations (such as DirectoryTaxonomyWriter ). It basically has Put(FacetLabel, Int32) methods for adding a mapping, and Get(FacetLabel) for looking a mapping up the cache. The cache does not guarantee to hold everything that has been put into it, and might in fact selectively delete some of the mappings (e.g., the ones least recently used). This means that if Get(FacetLabel) returns a negative response, it does not necessarily mean that the category doesn't exist - just that it is not in the cache. The caller can only infer that the category doesn't exist if it knows the cache to be complete (because all the categories were loaded into the cache, and since then no Put(FacetLabel, Int32) returned true). However, if it does so, it should clear out large parts of the cache at once, because the user will typically need to work hard to recover from every cache cleanup (see Put(FacetLabel, Int32) 's return value). NOTE: the cache may be accessed concurrently by multiple threads, therefore cache implementations should take this into consideration. @lucene.experimental Inherited Members System.IDisposable.Dispose() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public interface ITaxonomyWriterCache : IDisposable Properties | Improve this Doc View Source IsFull Returns true if the cache is full, such that the next Put(FacetLabel, Int32) will evict entries from it, false otherwise. Declaration bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Clears the content of the cache. Unlike System.IDisposable.Dispose() , the caller can assume that the cache is still operable after this method returns. Declaration void Clear() | Improve this Doc View Source Get(FacetLabel) Lookup a category in the cache, returning its ordinal, or a negative number if the category is not in the cache. It is up to the caller to remember what a negative response means: If the caller knows the cache is complete (it was initially fed with all the categories, and since then Put(FacetLabel, Int32) never returned true) it means the category does not exist. Otherwise, the category might still exist, but just be missing from the cache. Declaration int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Add a category to the cache, with the given ordinal as the value. If the implementation keeps only a partial cache (e.g., an LRU cache) and finds that its cache is full, it should clear up part of the cache and return true . Otherwise, it should return false . The reason why the caller needs to know if part of the cache was cleared is that in that case it will have to commit its on-disk index (so that all the latest category additions can be searched on disk, if we can't rely on the cache to contain them). Ordinals should be non-negative. Currently there is no defined way to specify that a cache should remember a category does NOT exist. It doesn't really matter, because normally the next thing we do after finding that a category does not exist is to add it. Declaration bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.WhitespaceAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.WhitespaceAnalyzer.html",
    "title": "Class WhitespaceAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WhitespaceAnalyzer An Analyzer that uses WhitespaceTokenizer . You must specify the required LuceneVersion compatibility when creating CharTokenizer : As of 3.1, WhitespaceTokenizer uses an int based API to normalize and detect token codepoints. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object Analyzer WhitespaceAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WhitespaceAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source WhitespaceAnalyzer(LuceneVersion) Creates a new WhitespaceAnalyzer Declaration public WhitespaceAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match Methods | Improve this Doc View Source CreateComponents(String, TextReader) Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.WhitespaceTokenizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.WhitespaceTokenizer.html",
    "title": "Class WhitespaceTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WhitespaceTokenizer A WhitespaceTokenizer is a tokenizer that divides text at whitespace. Adjacent sequences of non-Whitespace characters form tokens. You must specify the required LuceneVersion compatibility when creating WhitespaceTokenizer : As of 3.1, CharTokenizer uses an int based API to normalize and detect token characters. See IsTokenChar(Int32) and Normalize(Int32) for details. Inheritance System.Object AttributeSource TokenStream Tokenizer CharTokenizer WhitespaceTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class WhitespaceTokenizer : CharTokenizer, IDisposable Constructors | Improve this Doc View Source WhitespaceTokenizer(LuceneVersion, AttributeSource.AttributeFactory, TextReader) Construct a new WhitespaceTokenizer using a given AttributeSource.AttributeFactory . Declaration public WhitespaceTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match AttributeSource.AttributeFactory factory the attribute factory to use for this Tokenizer System.IO.TextReader in the input to split up into tokens | Improve this Doc View Source WhitespaceTokenizer(LuceneVersion, TextReader) Declaration public WhitespaceTokenizer(LuceneVersion matchVersion, TextReader in) Parameters Type Name Description LuceneVersion matchVersion LuceneVersion to match System.IO.TextReader in the input to split up into tokens Methods | Improve this Doc View Source IsTokenChar(Int32) Collects only characters which do not satisfy System.Char.IsWhiteSpace(System.Char) . Declaration protected override bool IsTokenChar(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean Overrides CharTokenizer.IsTokenChar(Int32) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.WhitespaceTokenizerFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Core.WhitespaceTokenizerFactory.html",
    "title": "Class WhitespaceTokenizerFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WhitespaceTokenizerFactory Factory for WhitespaceTokenizer . <fieldType name=\"text_ws\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenizerFactory WhitespaceTokenizerFactory Inherited Members TokenizerFactory.ForName(String, IDictionary<String, String>) TokenizerFactory.LookupClass(String) TokenizerFactory.AvailableTokenizers TokenizerFactory.ReloadTokenizers() TokenizerFactory.Create(TextReader) AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Core Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WhitespaceTokenizerFactory : TokenizerFactory Constructors | Improve this Doc View Source WhitespaceTokenizerFactory(IDictionary<String, String>) Creates a new WhitespaceTokenizerFactory Declaration public WhitespaceTokenizerFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(AttributeSource.AttributeFactory, TextReader) Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchMinimalStemFilterFactory.html",
    "title": "Class FrenchMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchMinimalStemFilterFactory Factory for FrenchMinimalStemFilter . <fieldType name=\"text_frminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.ElisionFilterFactory\"/> <filter class=\"solr.FrenchMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory FrenchMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax public class FrenchMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source FrenchMinimalStemFilterFactory(IDictionary<String, String>) Creates a new FrenchMinimalStemFilterFactory Declaration public FrenchMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fr.FrenchStemFilter.html",
    "title": "Class FrenchStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FrenchStemFilter A TokenFilter that stems french words. The used stemmer can be changed at runtime after the filter object is created (as long as it is a FrenchStemmer ). To prevent terms from being stemmed use an instance of KeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter FrenchStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Fr Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(3.1) Use SnowballFilter with FrenchStemmer instead, which has the same functionality. This filter will be removed in Lucene 5.0\")] public sealed class FrenchStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source FrenchStemFilter(TokenStream) Declaration public FrenchStemFilter(TokenStream in) Parameters Type Name Description TokenStream in Properties | Improve this Doc View Source Stemmer Set a alternative/custom FrenchStemmer for this filter. Declaration public FrenchStemmer Stemmer { get; set; } Property Value Type Description FrenchStemmer Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Returns true for the next token in the stream, or false at EOS Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also KeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ga.IrishAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ga.IrishAnalyzer.html",
    "title": "Class IrishAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IrishAnalyzer Analyzer for Irish. Inheritance System.Object Analyzer StopwordAnalyzerBase IrishAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ga Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IrishAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source IrishAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public IrishAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source IrishAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public IrishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source IrishAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public IrishAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Irish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , IrishLowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net/Lucene.Net.Index.OrdTermState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.OrdTermState.html",
    "title": "Class OrdTermState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrdTermState An ordinal based TermState This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermState OrdTermState BlockTermState Inherited Members TermState.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class OrdTermState : TermState Constructors | Improve this Doc View Source OrdTermState() Sole constructor. Declaration public OrdTermState() Properties | Improve this Doc View Source Ord Term ordinal, i.e. it's position in the full list of sorted terms. Declaration public long Ord { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source CopyFrom(TermState) Declaration public override void CopyFrom(TermState other) Parameters Type Name Description TermState other Overrides TermState.CopyFrom(TermState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides TermState.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.ParallelAtomicReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ParallelAtomicReader.html",
    "title": "Class ParallelAtomicReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParallelAtomicReader An AtomicReader which reads multiple, parallel indexes. Each index added must have the same number of documents, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . Inheritance System.Object IndexReader AtomicReader ParallelAtomicReader Implements System.IDisposable Inherited Members AtomicReader.Context AtomicReader.AtomicContext AtomicReader.HasNorms(String) AtomicReader.DocFreq(Term) AtomicReader.TotalTermFreq(Term) AtomicReader.GetSumDocFreq(String) AtomicReader.GetDocCount(String) AtomicReader.GetSumTotalTermFreq(String) AtomicReader.GetTerms(String) AtomicReader.GetTermDocsEnum(Term) AtomicReader.GetTermPositionsEnum(Term) IndexReader.AddReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RemoveReaderClosedListener(IndexReader.IReaderClosedListener) IndexReader.RegisterParentReader(IndexReader) IndexReader.RefCount IndexReader.IncRef() IndexReader.TryIncRef() IndexReader.DecRef() IndexReader.EnsureOpen() IndexReader.Equals(Object) IndexReader.GetHashCode() IndexReader.Open(Directory) IndexReader.Open(Directory, Int32) IndexReader.Open(IndexWriter, Boolean) IndexReader.Open(IndexCommit) IndexReader.Open(IndexCommit, Int32) IndexReader.GetTermVector(Int32, String) IndexReader.NumDeletedDocs IndexReader.Document(Int32) IndexReader.Document(Int32, ISet<String>) IndexReader.HasDeletions IndexReader.Dispose() IndexReader.Dispose(Boolean) IndexReader.Leaves IndexReader.CoreCacheKey IndexReader.CombinedCoreAndDeletesKey System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class ParallelAtomicReader : AtomicReader, IDisposable Constructors | Improve this Doc View Source ParallelAtomicReader(AtomicReader[]) Create a ParallelAtomicReader based on the provided readers; auto-disposes the given readers on Dispose() . Declaration public ParallelAtomicReader(params AtomicReader[] readers) Parameters Type Name Description AtomicReader [] readers | Improve this Doc View Source ParallelAtomicReader(Boolean, AtomicReader[]) Create a ParallelAtomicReader based on the provided readers . Declaration public ParallelAtomicReader(bool closeSubReaders, params AtomicReader[] readers) Parameters Type Name Description System.Boolean closeSubReaders AtomicReader [] readers | Improve this Doc View Source ParallelAtomicReader(Boolean, AtomicReader[], AtomicReader[]) Expert: create a ParallelAtomicReader based on the provided readers and storedFieldsReaders ; when a document is loaded, only storedFieldsReaders will be used. Declaration public ParallelAtomicReader(bool closeSubReaders, AtomicReader[] readers, AtomicReader[] storedFieldsReaders) Parameters Type Name Description System.Boolean closeSubReaders AtomicReader [] readers AtomicReader [] storedFieldsReaders Properties | Improve this Doc View Source FieldInfos Get the FieldInfos describing all fields in this reader. NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata ( GetAttribute(String) will be unavailable. Declaration public override FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos Overrides AtomicReader.FieldInfos | Improve this Doc View Source Fields Declaration public override Fields Fields { get; } Property Value Type Description Fields Overrides AtomicReader.Fields | Improve this Doc View Source LiveDocs Declaration public override IBits LiveDocs { get; } Property Value Type Description IBits Overrides AtomicReader.LiveDocs | Improve this Doc View Source MaxDoc Declaration public override int MaxDoc { get; } Property Value Type Description System.Int32 Overrides IndexReader.MaxDoc | Improve this Doc View Source NumDocs Declaration public override int NumDocs { get; } Property Value Type Description System.Int32 Overrides IndexReader.NumDocs Methods | Improve this Doc View Source CheckIntegrity() Declaration public override void CheckIntegrity() Overrides AtomicReader.CheckIntegrity() | Improve this Doc View Source DoClose() Declaration protected override void DoClose() Overrides IndexReader.DoClose() | Improve this Doc View Source Document(Int32, StoredFieldVisitor) Declaration public override void Document(int docID, StoredFieldVisitor visitor) Parameters Type Name Description System.Int32 docID StoredFieldVisitor visitor Overrides IndexReader.Document(Int32, StoredFieldVisitor) | Improve this Doc View Source GetBinaryDocValues(String) Declaration public override BinaryDocValues GetBinaryDocValues(string field) Parameters Type Name Description System.String field Returns Type Description BinaryDocValues Overrides AtomicReader.GetBinaryDocValues(String) | Improve this Doc View Source GetDocsWithField(String) Declaration public override IBits GetDocsWithField(string field) Parameters Type Name Description System.String field Returns Type Description IBits Overrides AtomicReader.GetDocsWithField(String) | Improve this Doc View Source GetNormValues(String) Declaration public override NumericDocValues GetNormValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNormValues(String) | Improve this Doc View Source GetNumericDocValues(String) Declaration public override NumericDocValues GetNumericDocValues(string field) Parameters Type Name Description System.String field Returns Type Description NumericDocValues Overrides AtomicReader.GetNumericDocValues(String) | Improve this Doc View Source GetSortedDocValues(String) Declaration public override SortedDocValues GetSortedDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedDocValues Overrides AtomicReader.GetSortedDocValues(String) | Improve this Doc View Source GetSortedSetDocValues(String) Declaration public override SortedSetDocValues GetSortedSetDocValues(string field) Parameters Type Name Description System.String field Returns Type Description SortedSetDocValues Overrides AtomicReader.GetSortedSetDocValues(String) | Improve this Doc View Source GetTermVectors(Int32) Declaration public override Fields GetTermVectors(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description Fields Overrides IndexReader.GetTermVectors(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.TreeDictionary-2.html",
    "title": "Class TreeDictionary<K, V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TreeDictionary<K, V> A sorted generic dictionary based on a red-black tree set. Inheritance System.Object EnumerableBase < KeyValuePair <K, V>> CollectionValueBase < KeyValuePair <K, V>> DictionaryBase <K, V> SortedDictionaryBase <K, V> TreeDictionary<K, V> Implements ISortedDictionary <K, V> IDictionary <K, V> ICollectionValue < KeyValuePair <K, V>> System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> System.Collections.IEnumerable IShowable System.IFormattable Inherited Members SortedDictionaryBase<K, V>.sortedpairs SortedDictionaryBase<K, V>.Comparer SortedDictionaryBase<K, V>.Keys SortedDictionaryBase<K, V>.TryPredecessor(K, KeyValuePair<K, V>) SortedDictionaryBase<K, V>.TrySuccessor(K, KeyValuePair<K, V>) SortedDictionaryBase<K, V>.TryWeakPredecessor(K, KeyValuePair<K, V>) SortedDictionaryBase<K, V>.TryWeakSuccessor(K, KeyValuePair<K, V>) SortedDictionaryBase<K, V>.Predecessor(K) SortedDictionaryBase<K, V>.Successor(K) SortedDictionaryBase<K, V>.WeakPredecessor(K) SortedDictionaryBase<K, V>.WeakSuccessor(K) SortedDictionaryBase<K, V>.FindMin() SortedDictionaryBase<K, V>.DeleteMin() SortedDictionaryBase<K, V>.FindMax() SortedDictionaryBase<K, V>.DeleteMax() SortedDictionaryBase<K, V>.Cut(IComparable<K>, KeyValuePair<K, V>, Boolean, KeyValuePair<K, V>, Boolean) SortedDictionaryBase<K, V>.RangeFrom(K) SortedDictionaryBase<K, V>.RangeFromTo(K, K) SortedDictionaryBase<K, V>.RangeTo(K) SortedDictionaryBase<K, V>.RangeAll() SortedDictionaryBase<K, V>.AddSorted(IEnumerable<KeyValuePair<K, V>>) SortedDictionaryBase<K, V>.RemoveRangeFrom(K) SortedDictionaryBase<K, V>.RemoveRangeFromTo(K, K) SortedDictionaryBase<K, V>.RemoveRangeTo(K) SortedDictionaryBase<K, V>.Show(StringBuilder, Int32, IFormatProvider) DictionaryBase<K, V>.pairs DictionaryBase<K, V>.CollectionChanged DictionaryBase<K, V>.CollectionCleared DictionaryBase<K, V>.ItemsAdded DictionaryBase<K, V>.ItemsRemoved DictionaryBase<K, V>.ListenableEvents DictionaryBase<K, V>.ActiveEvents DictionaryBase<K, V>.EqualityComparer DictionaryBase<K, V>.Add(K, V) DictionaryBase<K, V>.AddAll<L, W>(IEnumerable<KeyValuePair<L, W>>) DictionaryBase<K, V>.Remove(K) DictionaryBase<K, V>.Remove(K, V) DictionaryBase<K, V>.Clear() DictionaryBase<K, V>.ContainsSpeed DictionaryBase<K, V>.Contains(K) DictionaryBase<K, V>.ContainsAll<H>(IEnumerable<H>) DictionaryBase<K, V>.Find(K, V) DictionaryBase<K, V>.Update(K, V) DictionaryBase<K, V>.Update(K, V, V) DictionaryBase<K, V>.FindOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V) DictionaryBase<K, V>.UpdateOrAdd(K, V, V) DictionaryBase<K, V>.Keys DictionaryBase<K, V>.Values DictionaryBase<K, V>.Func DictionaryBase<K, V>.Item[K] DictionaryBase<K, V>.IsReadOnly DictionaryBase<K, V>.Check() DictionaryBase<K, V>.IsEmpty DictionaryBase<K, V>.Count DictionaryBase<K, V>.CountSpeed DictionaryBase<K, V>.Choose() DictionaryBase<K, V>.GetEnumerator() DictionaryBase<K, V>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ListenableEvents CollectionValueBase<KeyValuePair<K, V>>.ActiveEvents CollectionValueBase<KeyValuePair<K, V>>.CollectionChanged CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionChanged() CollectionValueBase<KeyValuePair<K, V>>.CollectionCleared CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<KeyValuePair<K, V>>.ItemsAdded CollectionValueBase<KeyValuePair<K, V>>.raiseItemsAdded(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemsRemoved CollectionValueBase<KeyValuePair<K, V>>.raiseItemsRemoved(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemInserted CollectionValueBase<KeyValuePair<K, V>>.raiseItemInserted(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.ItemRemovedAt CollectionValueBase<KeyValuePair<K, V>>.raiseItemRemovedAt(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForSetThis(Int32, KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForInsert(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemove(KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAt(Int32, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForUpdate(KeyValuePair<K, V>, KeyValuePair<K, V>, Int32) CollectionValueBase<KeyValuePair<K, V>>.raiseForAdd(KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.raiseForRemoveAll(ICollectionValue<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.IsEmpty CollectionValueBase<KeyValuePair<K, V>>.Count CollectionValueBase<KeyValuePair<K, V>>.CountSpeed CollectionValueBase<KeyValuePair<K, V>>.CopyTo(KeyValuePair<K, V>[], Int32) CollectionValueBase<KeyValuePair<K, V>>.ToArray() CollectionValueBase<KeyValuePair<K, V>>.Apply(Action<KeyValuePair<K, V>>) CollectionValueBase<KeyValuePair<K, V>>.Exists(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Find(Func<KeyValuePair<K, V>, Boolean>, KeyValuePair<K, V>) CollectionValueBase<KeyValuePair<K, V>>.All(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Filter(Func<KeyValuePair<K, V>, Boolean>) CollectionValueBase<KeyValuePair<K, V>>.Choose() CollectionValueBase<KeyValuePair<K, V>>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString(String, IFormatProvider) CollectionValueBase<KeyValuePair<K, V>>.ToString() EnumerableBase<KeyValuePair<K, V>>.GetEnumerator() EnumerableBase<KeyValuePair<K, V>>.countItems(IEnumerable<KeyValuePair<K, V>>) EnumerableBase<KeyValuePair<K, V>>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class TreeDictionary<K, V> : SortedDictionaryBase<K, V>, ISortedDictionary<K, V>, IDictionary<K, V>, ICollectionValue<KeyValuePair<K, V>>, IEnumerable<KeyValuePair<K, V>>, IEnumerable, IShowable, IFormattable Type Parameters Name Description K V Constructors | Improve this Doc View Source TreeDictionary(MemoryType) Create a red-black tree dictionary using the natural comparer for keys. System.ArgumentException if the key type K is not comparable. Declaration public TreeDictionary(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType | Improve this Doc View Source TreeDictionary(IComparer<K>, MemoryType) Create a red-black tree dictionary using an external comparer for keys. Declaration public TreeDictionary(IComparer<K> comparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IComparer <K> comparer The external comparer MemoryType memoryType Methods | Improve this Doc View Source Snapshot() Make a snapshot of the current state of this dictionary Declaration public IEnumerable<KeyValuePair<K, V>> Snapshot() Returns Type Description System.Collections.Generic.IEnumerable < KeyValuePair <K, V>> The snapshot Implements ISortedDictionary<K, V> IDictionary<K, V> ICollectionValue<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable IShowable System.IFormattable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.TreeSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.TreeSet-1.html",
    "title": "Class TreeSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TreeSet<T> An implementation of Red-Black trees as an indexed, sorted collection with set semantics, cf. CLRS . C5.TreeBag`1 for a version with bag semantics. C5.TreeDictionary`2 for a sorted dictionary based on this tree implementation. The comparer (sorting order) may be either natural, because the item type is comparable (generic: C5.IComparable`1 or non-generic: System.IComparable) or it can be external and supplied by the user in the constructor. TODO: describe performance here TODO: discuss persistence and its useful usage modes. Warn about the space leak possible with other usage modes. Inheritance System.Object EnumerableBase <T> CollectionValueBase <T> CollectionBase <T> DirectedCollectionBase <T> SequencedBase <T> TreeSet<T> Implements IIndexedSorted <T> IIndexed <T> IReadOnlyList <T> IReadOnlyCollection <T> IPersistentSorted <T> ISorted <T> ISequenced <T> ICollection <T> IExtensible <T> IDirectedCollectionValue <T> ICollectionValue <T> IShowable System.IFormattable IDirectedEnumerable <T> System.IDisposable System.Collections.Generic.ISet <T> System.Collections.Generic.ICollection <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable Inherited Members SequencedBase<T>.ComputeHashCode(ISequenced<T>, IEqualityComparer<T>) SequencedBase<T>.StaticEquals(ISequenced<T>, ISequenced<T>, IEqualityComparer<T>) SequencedBase<T>.GetSequencedHashCode() SequencedBase<T>.SequencedEquals(ISequenced<T>) SequencedBase<T>.Direction SequencedBase<T>.FindIndex(Func<T, Boolean>) SequencedBase<T>.FindLastIndex(Func<T, Boolean>) DirectedCollectionBase<T>.FindLast(Func<T, Boolean>, T) CollectionBase<T>.isReadOnlyBase CollectionBase<T>.stamp CollectionBase<T>.size CollectionBase<T>.itemequalityComparer CollectionBase<T>.checkRange(Int32, Int32) CollectionBase<T>.ComputeHashCode(ICollectionValue<T>, IEqualityComparer<T>) CollectionBase<T>.StaticEquals(ICollection<T>, ICollection<T>, IEqualityComparer<T>) CollectionBase<T>.GetUnsequencedHashCode() CollectionBase<T>.UnsequencedEquals(ICollection<T>) CollectionBase<T>.modifycheck(Int32) CollectionBase<T>.updatecheck() CollectionBase<T>.IsReadOnly CollectionBase<T>.Count CollectionBase<T>.CountSpeed CollectionBase<T>.EqualityComparer CollectionBase<T>.IsEmpty CollectionValueBase<T>.ActiveEvents CollectionValueBase<T>.CollectionChanged CollectionValueBase<T>.raiseCollectionChanged() CollectionValueBase<T>.CollectionCleared CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32) CollectionValueBase<T>.raiseCollectionCleared(Boolean, Int32, Nullable<Int32>) CollectionValueBase<T>.ItemsAdded CollectionValueBase<T>.raiseItemsAdded(T, Int32) CollectionValueBase<T>.ItemsRemoved CollectionValueBase<T>.raiseItemsRemoved(T, Int32) CollectionValueBase<T>.ItemInserted CollectionValueBase<T>.raiseItemInserted(T, Int32) CollectionValueBase<T>.ItemRemovedAt CollectionValueBase<T>.raiseItemRemovedAt(T, Int32) CollectionValueBase<T>.raiseForSetThis(Int32, T, T) CollectionValueBase<T>.raiseForInsert(Int32, T) CollectionValueBase<T>.raiseForRemove(T) CollectionValueBase<T>.raiseForRemove(T, Int32) CollectionValueBase<T>.raiseForRemoveAt(Int32, T) CollectionValueBase<T>.raiseForUpdate(T, T) CollectionValueBase<T>.raiseForUpdate(T, T, Int32) CollectionValueBase<T>.raiseForAdd(T) CollectionValueBase<T>.raiseForRemoveAll(ICollectionValue<T>) CollectionValueBase<T>.CopyTo(T[], Int32) CollectionValueBase<T>.ToArray() CollectionValueBase<T>.Apply(Action<T>) CollectionValueBase<T>.Exists(Func<T, Boolean>) CollectionValueBase<T>.Find(Func<T, Boolean>, T) CollectionValueBase<T>.All(Func<T, Boolean>) CollectionValueBase<T>.Filter(Func<T, Boolean>) CollectionValueBase<T>.Show(StringBuilder, Int32, IFormatProvider) CollectionValueBase<T>.ToString(String, IFormatProvider) CollectionValueBase<T>.ToString() EnumerableBase<T>.countItems(IEnumerable<T>) EnumerableBase<T>.IEnumerable.GetEnumerator() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class TreeSet<T> : SequencedBase<T>, IIndexedSorted<T>, IIndexed<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, IPersistentSorted<T>, ISorted<T>, ISequenced<T>, ICollection<T>, IExtensible<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IDisposable, ISet<T>, ICollection<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Constructors | Improve this Doc View Source TreeSet(MemoryType) Create a red-black tree collection with natural comparer and item equalityComparer. We assume that if T is comparable, its default equalityComparer will be compatible with the comparer. Declaration public TreeSet(MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description MemoryType memoryType Exceptions Type Condition NotComparableException If T is not comparable. | Improve this Doc View Source TreeSet(IComparer<T>, MemoryType) Create a red-black tree collection with an external comparer. The itemequalityComparer will be a compatible C5.ComparerZeroHashCodeEqualityComparer`1 since the default equalityComparer for T ( C5.EqualityComparer`1.Default ) is unlikely to be compatible with the external comparer. This makes the tree inadequate for use as item in a collection of unsequenced or sequenced sets or bags ( C5.ICollection`1 and C5.ISequenced`1 ) Declaration public TreeSet(IComparer<T> comparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The external comparer MemoryType memoryType | Improve this Doc View Source TreeSet(IComparer<T>, IEqualityComparer<T>, MemoryType) Create a red-black tree collection with an external comparer and an external item equalityComparer, assumed consistent. Declaration public TreeSet(IComparer<T> comparer, IEqualityComparer<T> equalityComparer, MemoryType memoryType = MemoryType.Normal) Parameters Type Name Description System.Collections.Generic.IComparer <T> comparer The external comparer System.Collections.Generic.IEqualityComparer <T> equalityComparer The external item equalitySCG.Comparer MemoryType memoryType Properties | Improve this Doc View Source AllowsDuplicates Declaration public bool AllowsDuplicates { get; } Property Value Type Description System.Boolean False since this tree has set semantics. | Improve this Doc View Source Comparer The comparer object supplied at creation time for this collection Declaration public IComparer<T> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer <T> The comparer | Improve this Doc View Source ContainsSpeed The value is symbolic indicating the type of asymptotic complexity in terms of the size of this collection (worst-case or amortized as relevant). Declaration public Speed ContainsSpeed { get; } Property Value Type Description Speed Speed.Log | Improve this Doc View Source DuplicatesByCounting By convention this is true for any collection with set semantics. Declaration public virtual bool DuplicatesByCounting { get; } Property Value Type Description System.Boolean True if only one representative of a group of equal items is kept in the collection together with the total count. | Improve this Doc View Source IndexingSpeed Declaration public virtual Speed IndexingSpeed { get; } Property Value Type Description Speed | Improve this Doc View Source Item[Int32] System.IndexOutOfRangeException if i is negative or = the size of the collection. Declaration public T this[int i] { get; } Parameters Type Name Description System.Int32 i the index to lookup Property Value Type Description T The i'th item of this list. | Improve this Doc View Source Item[Int32, Int32] System.IndexOutOfRangeException . Declaration public IDirectedCollectionValue<T> this[int start, int count] { get; } Parameters Type Name Description System.Int32 start The starting index of the interval (inclusive). System.Int32 count The length of the interval. Property Value Type Description IDirectedCollectionValue <T> The directed collection of items in a specific index interval. | Improve this Doc View Source ListenableEvents Declaration public override EventTypeEnum ListenableEvents { get; } Property Value Type Description EventTypeEnum Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.ListenableEvents Methods | Improve this Doc View Source Add(T) Add an item to this collection if possible. If this collection has set semantics, the item will be added if not already in the collection. If bag semantics, the item will always be added. Declaration public bool Add(T item) Parameters Type Name Description T item The item to add. Returns Type Description System.Boolean True if item was added. | Improve this Doc View Source AddAll(IEnumerable<T>) Add the elements from another collection with a more specialized item type to this collection. If this collection has set semantics, only items not already in the collection will be added. Declaration public void AddAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to add | Improve this Doc View Source AddSorted(IEnumerable<T>) Add all the items from another collection with an enumeration order that is increasing in the items. The idea is that the implementation may use a faster algorithm to merge the two collections. System.ArgumentException if the enumerated items turns out not to be in increasing order. Declaration public void AddSorted(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The collection to add. | Improve this Doc View Source Backwards() Create a collection containing the same items as this collection, but whose enumerator will enumerate the items backwards. The new collection will become invalid if the original is modified. Method typically used as in foreach (T x in coll.Backwards()) {...} Declaration public override IDirectedCollectionValue<T> Backwards() Returns Type Description IDirectedCollectionValue <T> The backwards collection. Overrides Lucene.Net.Support.C5.DirectedCollectionBase<T>.Backwards() | Improve this Doc View Source Check() Checks red-black invariant. Dumps tree to console if bad Declaration public bool Check() Returns Type Description System.Boolean false if invariant violation | Improve this Doc View Source Check(String) Checks red-black invariant. Dumps tree to console if bad Declaration public bool Check(string name) Parameters Type Name Description System.String name Title of dump Returns Type Description System.Boolean false if invariant violation | Improve this Doc View Source Choose() Declaration public override T Choose() Returns Type Description T Overrides Lucene.Net.Support.C5.CollectionValueBase<T>.Choose() Exceptions Type Condition NoSuchItemException If tree is empty | Improve this Doc View Source Clear() Remove all items from this collection. Declaration public void Clear() | Improve this Doc View Source Contains(T) Check if this collection contains (an item equivalent to according to the itemequalityComparer) a particular value. Declaration public bool Contains(T item) Parameters Type Name Description T item The value to check for. Returns Type Description System.Boolean True if the items is in this collection. | Improve this Doc View Source ContainsAll(IEnumerable<T>) Check if this collection contains all the values in another collection. If this collection has bag semantics ( AllowsDuplicates==true ) the check is made with respect to multiplicities, else multiplicities are not taken into account. Declaration public bool ContainsAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The Returns Type Description System.Boolean True if all values in items is in this collection. | Improve this Doc View Source ContainsCount(T) Count the number of items of the collection equal to a particular value. Returns 0 if and only if the value is not in the collection. Declaration public int ContainsCount(T item) Parameters Type Name Description T item The value to count. Returns Type Description System.Int32 The number of copies found. | Improve this Doc View Source CountFrom(T) Determine the number of items at or above a supplied threshold. Declaration public int CountFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source CountFromTo(T, T) Determine the number of items between two supplied thresholds. Declaration public int CountFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive) T top The upper bound (exclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source CountTo(T) Determine the number of items below a supplied threshold. Declaration public int CountTo(T top) Parameters Type Name Description T top The upper bound (exclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source Cut(IComparable<T>, out T, out Boolean, out T, out Boolean) Perform a search in the sorted collection for the ranges in which a non-increasing (i.e. weakly decreasing) function from the item type to int is negative, zero respectively positive. If the supplied cut function is not non-increasing, the result of this call is undefined. Declaration public bool Cut(IComparable<T> c, out T low, out bool lowIsValid, out T high, out bool highIsValid) Parameters Type Name Description System.IComparable <T> c The cut function T to int , given as an IComparable<T> object, where the cut function is the c.CompareTo(T that) method. T low Returns the largest item in the collection, where the cut function is positive (if any). System.Boolean lowIsValid True if the cut function is positive somewhere on this collection. T high Returns the least item in the collection, where the cut function is negative (if any). System.Boolean highIsValid True if the cut function is negative somewhere on this collection. Returns Type Description System.Boolean | Improve this Doc View Source DeleteMax() Remove the largest item from this priority queue. Declaration public T DeleteMax() Returns Type Description T The removed item. | Improve this Doc View Source DeleteMin() Remove the least item from this priority queue. Declaration public T DeleteMin() Returns Type Description T The removed item. | Improve this Doc View Source Dispose() If this tree is a snapshot, remove registration in base tree Declaration public void Dispose() | Improve this Doc View Source dump() Print the tree structure to the console stdout. Declaration public void dump() | Improve this Doc View Source dump(String) Print the tree structure to the console stdout. Declaration public void dump(string msg) Parameters Type Name Description System.String msg | Improve this Doc View Source ExceptWith(IEnumerable<T>) Not implemented Declaration public void ExceptWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other | Improve this Doc View Source Find(ref T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, return in the ref argument (a binary copy of) the actual value found. Declaration public bool Find(ref T item) Parameters Type Name Description T item The value to look for. Returns Type Description System.Boolean True if the items is in this collection. | Improve this Doc View Source FindAll(Func<T, Boolean>) Create a new indexed sorted collection consisting of the items of this indexed sorted collection satisfying a certain predicate. Declaration public IIndexedSorted<T> FindAll(Func<T, bool> filter) Parameters Type Name Description System.Func <T, System.Boolean > filter The filter delegate defining the predicate. Returns Type Description IIndexedSorted <T> The new indexed sorted collection. | Improve this Doc View Source FindMax() Find the current largest item of this priority queue. Declaration public T FindMax() Returns Type Description T The largest item. | Improve this Doc View Source FindMin() Find the current least item of this priority queue. Declaration public T FindMin() Returns Type Description T The least item. | Improve this Doc View Source FindOrAdd(ref T) Find or add the item to the tree. If the tree does not contain an item equivalent to this item add it, else return the existing one in the ref argument. Declaration public bool FindOrAdd(ref T item) Parameters Type Name Description T item Returns Type Description System.Boolean True if item was found | Improve this Doc View Source GetEnumerator() Create an enumerator for this tree Declaration public override IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> The enumerator Overrides Lucene.Net.Support.C5.EnumerableBase<T>.GetEnumerator() | Improve this Doc View Source IndexOf(T) Searches for an item in this indexed collection going forwards from the start. Declaration public int IndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of first occurrence from start of the item if found, else the two-complement (always negative) of the index at which the item would be put if it was added. | Improve this Doc View Source IntersectWith(IEnumerable<T>) Not implemented Declaration public void IntersectWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other | Improve this Doc View Source IsProperSubsetOf(IEnumerable<T>) Determines whether a TreeSet<T> object is a proper subset of the specified collection. Declaration public bool IsProperSubsetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object is a proper subset of other; otherwise, false . | Improve this Doc View Source IsProperSupersetOf(IEnumerable<T>) Determines whether a TreeSet<T> object is a proper superset of the specified collection. Declaration public bool IsProperSupersetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object is a proper superset of other; otherwise, false . | Improve this Doc View Source IsSubsetOf(IEnumerable<T>) Determines whether a TreeSet<T> object is a subset of the specified collection. Declaration public bool IsSubsetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object is a subset of other; otherwise, false . | Improve this Doc View Source IsSupersetOf(IEnumerable<T>) Determines whether a TreeSet<T> object is a superset of the specified collection. Declaration public bool IsSupersetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object is a superset of other; otherwise, false . | Improve this Doc View Source ItemMultiplicities() Declaration public virtual ICollectionValue<KeyValuePair<T, int>> ItemMultiplicities() Returns Type Description ICollectionValue < KeyValuePair <T, System.Int32 >> | Improve this Doc View Source LastIndexOf(T) Searches for an item in the tree going backwards from the end. Declaration public int LastIndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of last occurrence from the end of item if found, else the two-complement (always negative) of the index at which the item would be put if it was added. | Improve this Doc View Source Map<V>(Func<T, V>, IComparer<V>) Create a new indexed sorted collection consisting of the results of mapping all items of this list. System.ArgumentException if the map is not increasing over the items of this collection (with respect to the two given comparison relations). Declaration public IIndexedSorted<V> Map<V>(Func<T, V> mapper, IComparer<V> c) Parameters Type Name Description System.Func <T, V> mapper The delegate definging the map. System.Collections.Generic.IComparer <V> c The comparion relation to use for the result. Returns Type Description IIndexedSorted <V> The new sorted collection. Type Parameters Name Description V | Improve this Doc View Source Overlaps(IEnumerable<T>) Determines whether the current TreeSet<T> object and a specified collection share common elements. Declaration public bool Overlaps(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> object. Returns Type Description System.Boolean true if the TreeSet<T> object and other share at least one common element; otherwise, false . | Improve this Doc View Source Predecessor(T) Find the strict predecessor in the sorted collection of a particular value, i.e. the largest item in the collection less than the supplied value. Declaration public T Predecessor(T item) Parameters Type Name Description T item The item to find the predecessor for. Returns Type Description T The predecessor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is less than or equal to the minimum of this collection.) | Improve this Doc View Source RangeAll() Create a directed collection with the same items as this collection. Declaration public IDirectedCollectionValue<T> RangeAll() Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeFrom(T) Query this sorted collection for items greater than or equal to a supplied value. Declaration public IDirectedCollectionValue<T> RangeFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeFromTo(T, T) Query this sorted collection for items between two supplied values. Declaration public IDirectedCollectionValue<T> RangeFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive). T top The upper bound (exclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeTo(T) Query this sorted collection for items less than a supplied value. Declaration public IDirectedCollectionValue<T> RangeTo(T top) Parameters Type Name Description T top The upper bound (exclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source Remove(T) Remove a particular item from this collection. If the collection has bag semantics only one copy equivalent to the supplied item is removed. Declaration public bool Remove(T item) Parameters Type Name Description T item The value to remove. Returns Type Description System.Boolean True if the item was found (and removed). | Improve this Doc View Source Remove(T, out T) Remove a particular item from this collection if found. If the collection has bag semantics only one copy equivalent to the supplied item is removed, which one is implementation dependent. If an item was removed, report a binary copy of the actual item removed in the argument. Declaration public bool Remove(T item, out T removeditem) Parameters Type Name Description T item The value to remove. T removeditem The removed value. Returns Type Description System.Boolean True if the item was found (and removed). | Improve this Doc View Source RemoveAll(IEnumerable<T>) Remove all items in another collection from this one. If this collection has bag semantics, take multiplicities into account. Declaration public void RemoveAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to remove. | Improve this Doc View Source RemoveAllCopies(T) Remove all items equivalent to a given value. Declaration public void RemoveAllCopies(T item) Parameters Type Name Description T item The value to remove. | Improve this Doc View Source RemoveAt(Int32) Remove the item at a specific position of the list. System.IndexOutOfRangeException if i is negative or = the size of the collection. Declaration public T RemoveAt(int i) Parameters Type Name Description System.Int32 i The index of the item to remove. Returns Type Description T The removed item. | Improve this Doc View Source RemoveInterval(Int32, Int32) Remove all items in an index interval. System.IndexOutOfRangeException ???. Declaration public void RemoveInterval(int start, int count) Parameters Type Name Description System.Int32 start The index of the first item to remove. System.Int32 count The number of items to remove. | Improve this Doc View Source RemoveRangeFrom(T) Remove all items of this collection above or at a supplied threshold. Declaration public void RemoveRangeFrom(T low) Parameters Type Name Description T low The lower threshold (inclusive). | Improve this Doc View Source RemoveRangeFromTo(T, T) Remove all items of this collection between two supplied thresholds. Declaration public void RemoveRangeFromTo(T low, T hi) Parameters Type Name Description T low The lower threshold (inclusive). T hi The upper threshold (exclusive). | Improve this Doc View Source RemoveRangeTo(T) Remove all items of this collection below a supplied threshold. Declaration public void RemoveRangeTo(T hi) Parameters Type Name Description T hi The upper threshold (exclusive). | Improve this Doc View Source RetainAll(IEnumerable<T>) Remove all items not in some other collection from this one. If this collection has bag semantics, take multiplicities into account. Declaration public void RetainAll(IEnumerable<T> items) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> items The items to retain. | Improve this Doc View Source SetEquals(IEnumerable<T>) Determines whether the current TreeSet<T> and the specified collection contain the same elements. Declaration public bool SetEquals(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current TreeSet<T> . Returns Type Description System.Boolean true if the current TreeSet<T> is equal to other; otherwise, false . | Improve this Doc View Source Snapshot() Make a (read-only) snapshot of this collection. Declaration public ISorted<T> Snapshot() Returns Type Description ISorted <T> The snapshot. | Improve this Doc View Source Successor(T) Find the strict successor in the sorted collection of a particular value, i.e. the least item in the collection greater than the supplied value. Declaration public T Successor(T item) Parameters Type Name Description T item The item to find the successor for. Returns Type Description T The successor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is greater than or equal to the maximum of this collection.) | Improve this Doc View Source SymmetricExceptWith(IEnumerable<T>) Not implemented Declaration public void SymmetricExceptWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other | Improve this Doc View Source TryPredecessor(T, out T) Find the strict predecessor of item in the sorted collection, that is, the greatest item in the collection smaller than the item. Declaration public bool TryPredecessor(T item, out T res) Parameters Type Name Description T item The item to find the predecessor for. T res The predecessor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a predecessor; otherwise false. | Improve this Doc View Source TrySuccessor(T, out T) Find the strict successor of item in the sorted collection, that is, the least item in the collection greater than the supplied value. Declaration public bool TrySuccessor(T item, out T res) Parameters Type Name Description T item The item to find the successor for. T res The successor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a successor; otherwise false. | Improve this Doc View Source TryWeakPredecessor(T, out T) Find the weak predecessor of item in the sorted collection, that is, the greatest item in the collection smaller than or equal to the item. Declaration public bool TryWeakPredecessor(T item, out T res) Parameters Type Name Description T item The item to find the weak predecessor for. T res The weak predecessor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a weak predecessor; otherwise false. | Improve this Doc View Source TryWeakSuccessor(T, out T) Find the weak successor of item in the sorted collection, that is, the least item in the collection greater than or equal to the supplied value. Declaration public bool TryWeakSuccessor(T item, out T res) Parameters Type Name Description T item The item to find the weak successor for. T res The weak successor, if any; otherwise the default value for T. Returns Type Description System.Boolean True if item has a weak successor; otherwise false. | Improve this Doc View Source UnionWith(IEnumerable<T>) Modifies the current TreeSet<T> object to contain all elements that are present in itself, the specified collection, or both. Declaration public void UnionWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other | Improve this Doc View Source UniqueItems() Declaration public virtual ICollectionValue<T> UniqueItems() Returns Type Description ICollectionValue <T> | Improve this Doc View Source Update(T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection to with a binary copy of the supplied value. If the collection has bag semantics, this updates all equivalent copies in the collection. Declaration public bool Update(T item) Parameters Type Name Description T item Value to update. Returns Type Description System.Boolean True if the item was found and hence updated. | Improve this Doc View Source Update(T, out T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection with a binary copy of the supplied value. If the collection has bag semantics, this updates all equivalent copies in the collection. Declaration public bool Update(T item, out T olditem) Parameters Type Name Description T item T olditem Returns Type Description System.Boolean | Improve this Doc View Source UpdateOrAdd(T) Check if this collection contains an item equivalent according to the itemequalityComparer to a particular value. If so, update the item in the collection with a binary copy of the supplied value; else add the value to the collection. NOTE: the bag implementation is currently wrong! ????? Declaration public bool UpdateOrAdd(T item) Parameters Type Name Description T item Value to add or update. Returns Type Description System.Boolean True if the item was found and updated (hence not added). | Improve this Doc View Source UpdateOrAdd(T, out T) Declaration public bool UpdateOrAdd(T item, out T olditem) Parameters Type Name Description T item T olditem Returns Type Description System.Boolean | Improve this Doc View Source WeakPredecessor(T) Find the weak predecessor in the sorted collection of a particular value, i.e. the largest item in the collection less than or equal to the supplied value. Declaration public T WeakPredecessor(T item) Parameters Type Name Description T item The item to find the weak predecessor for. Returns Type Description T The weak predecessor. Exceptions Type Condition NoSuchItemException if no such element exists (the supplied value is less than the minimum of this collection.) | Improve this Doc View Source WeakSuccessor(T) Find the weak successor in the sorted collection of a particular value, i.e. the least item in the collection greater than or equal to the supplied value. NoSuchItemException Declaration public T WeakSuccessor(T item) Parameters Type Name Description T item The item to find the weak successor for. Returns Type Description T The weak successor. Explicit Interface Implementations | Improve this Doc View Source IDirectedEnumerable<T>.Backwards() Declaration IDirectedEnumerable<T> IDirectedEnumerable<T>.Backwards() Returns Type Description IDirectedEnumerable <T> | Improve this Doc View Source ISorted<T>.RangeFrom(T) Declaration IDirectedEnumerable<T> ISorted<T>.RangeFrom(T bot) Parameters Type Name Description T bot Returns Type Description IDirectedEnumerable <T> | Improve this Doc View Source ISorted<T>.RangeFromTo(T, T) Declaration IDirectedEnumerable<T> ISorted<T>.RangeFromTo(T bot, T top) Parameters Type Name Description T bot T top Returns Type Description IDirectedEnumerable <T> | Improve this Doc View Source ISorted<T>.RangeTo(T) Declaration IDirectedEnumerable<T> ISorted<T>.RangeTo(T top) Parameters Type Name Description T top Returns Type Description IDirectedEnumerable <T> | Improve this Doc View Source ICollection<T>.Add(T) Add an item to this collection if possible. If this collection has set semantics, the item will be added if not already in the collection. If bag semantics, the item will always be added. Declaration void ICollection<T>.Add(T item) Parameters Type Name Description T item The item to add. Implements IIndexedSorted<T> IIndexed<T> IReadOnlyList<T> IReadOnlyCollection<T> IPersistentSorted<T> ISorted<T> ISequenced<T> ICollection<T> IExtensible<T> IDirectedCollectionValue<T> ICollectionValue<T> IShowable System.IFormattable IDirectedEnumerable<T> System.IDisposable System.Collections.Generic.ISet<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.html",
    "title": "Class MultiDocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocsEnum Exposes DocsEnum , merged from DocsEnum API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum MultiDocsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class MultiDocsEnum : DocsEnum Constructors | Improve this Doc View Source MultiDocsEnum(MultiTermsEnum, Int32) Sole constructor Declaration public MultiDocsEnum(MultiTermsEnum parent, int subReaderCount) Parameters Type Name Description MultiTermsEnum parent The MultiTermsEnum that created us. System.Int32 subReaderCount How many sub-readers are being merged. Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source CanReuse(MultiTermsEnum) Returns true if this instance can be reused by the provided MultiTermsEnum . Declaration public bool CanReuse(MultiTermsEnum parent) Parameters Type Name Description MultiTermsEnum parent Returns Type Description System.Boolean | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanScorer.html",
    "title": "Class PayloadNearQuery.PayloadNearSpanScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadNearQuery.PayloadNearSpanScorer Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadNearQuery.PayloadNearSpanScorer Inherited Members SpanScorer.m_spans SpanScorer.m_more SpanScorer.m_doc SpanScorer.m_freq SpanScorer.m_numMatches SpanScorer.m_docScorer SpanScorer.NextDoc() SpanScorer.Advance(Int32) SpanScorer.DocID SpanScorer.Freq SpanScorer.SloppyFreq SpanScorer.GetCost() Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearSpanScorer : SpanScorer Constructors | Improve this Doc View Source PayloadNearSpanScorer(PayloadNearQuery, Spans, Weight, Similarity, Similarity.SimScorer) Declaration protected PayloadNearSpanScorer(PayloadNearQuery outerInstance, Spans spans, Weight weight, Similarity similarity, Similarity.SimScorer docScorer) Parameters Type Name Description PayloadNearQuery outerInstance Spans spans Weight weight Similarity similarity Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_payloadScore Declaration protected float m_payloadScore Field Value Type Description System.Single Methods | Improve this Doc View Source GetPayloads(Spans[]) Declaration public virtual void GetPayloads(Spans[] subSpans) Parameters Type Name Description Spans [] subSpans | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides SpanScorer.GetScore() | Improve this Doc View Source ProcessPayloads(ICollection<Byte[]>, Int32, Int32) By default, uses the PayloadFunction to score the payloads, but can be overridden to do other things. Declaration protected virtual void ProcessPayloads(ICollection<byte[]> payLoads, int start, int end) Parameters Type Name Description System.Collections.Generic.ICollection < System.Byte []> payLoads The payloads System.Int32 start The start position of the span being scored System.Int32 end The end position of the span being scored See Also Lucene.Net.Search.Spans.Spans.#ctor | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected override bool SetFreqCurrentDoc() Returns Type Description System.Boolean Overrides SpanScorer.SetFreqCurrentDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadNearQuery.PayloadNearSpanWeight.html",
    "title": "Class PayloadNearQuery.PayloadNearSpanWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadNearQuery.PayloadNearSpanWeight Inheritance System.Object Weight SpanWeight PayloadNearQuery.PayloadNearSpanWeight Inherited Members SpanWeight.m_similarity SpanWeight.m_termContexts SpanWeight.m_query SpanWeight.m_stats SpanWeight.Query SpanWeight.GetValueForNormalization() SpanWeight.Normalize(Single, Single) Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public class PayloadNearSpanWeight : SpanWeight Constructors | Improve this Doc View Source PayloadNearSpanWeight(PayloadNearQuery, SpanQuery, IndexSearcher) Declaration public PayloadNearSpanWeight(PayloadNearQuery outerInstance, SpanQuery query, IndexSearcher searcher) Parameters Type Name Description PayloadNearQuery outerInstance SpanQuery query IndexSearcher searcher Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides SpanWeight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides SpanWeight.GetScorer(AtomicReaderContext, IBits) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionLL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionLL.html",
    "title": "Class DistributionLL | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistributionLL Log-logistic distribution. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionLL Inherited Members Distribution.Explain(BasicStats, Single, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DistributionLL : Distribution Constructors | Improve this Doc View Source DistributionLL() Sole constructor: parameter-free Declaration public DistributionLL() Methods | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override sealed float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single Overrides Distribution.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Distribution.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionSPL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DistributionSPL.html",
    "title": "Class DistributionSPL | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DistributionSPL The smoothed power-law (SPL) distribution for the information-based framework that is described in the original paper. Unlike for DFR, the natural logarithm is used, as it is faster to compute and the original paper does not express any preference to a specific base. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Distribution DistributionSPL Inherited Members Distribution.Explain(BasicStats, Single, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DistributionSPL : Distribution Constructors | Improve this Doc View Source DistributionSPL() Sole constructor: parameter-free Declaration public DistributionSPL() Methods | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override sealed float Score(BasicStats stats, float tfn, float lambda) Parameters Type Name Description BasicStats stats System.Single tfn System.Single lambda Returns Type Description System.Single Overrides Distribution.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Distribution.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.NIOFSIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.NIOFSIndexInput.html",
    "title": "Class NIOFSDirectory.NIOFSIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NIOFSDirectory.NIOFSIndexInput Reads bytes with the Read(FileStream, ByteBuffer, Int64) extension method for System.IO.FileStream . Inheritance System.Object DataInput IndexInput BufferedIndexInput NIOFSDirectory.NIOFSIndexInput Implements System.IDisposable Inherited Members BufferedIndexInput.BUFFER_SIZE BufferedIndexInput.MERGE_BUFFER_SIZE BufferedIndexInput.m_buffer BufferedIndexInput.ReadByte() BufferedIndexInput.SetBufferSize(Int32) BufferedIndexInput.BufferSize BufferedIndexInput.ReadBytes(Byte[], Int32, Int32) BufferedIndexInput.ReadBytes(Byte[], Int32, Int32, Boolean) BufferedIndexInput.ReadInt16() BufferedIndexInput.ReadInt32() BufferedIndexInput.ReadInt64() BufferedIndexInput.ReadVInt32() BufferedIndexInput.ReadVInt64() BufferedIndexInput.GetFilePointer() BufferedIndexInput.Seek(Int64) BufferedIndexInput.FlushBuffer(IndexOutput, Int64) BufferedIndexInput.GetBufferSize(IOContext) IndexInput.Dispose() IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax protected class NIOFSIndexInput : BufferedIndexInput, IDisposable Constructors | Improve this Doc View Source NIOFSIndexInput(String, FileStream, IOContext) Declaration public NIOFSIndexInput(string resourceDesc, FileStream fc, IOContext context) Parameters Type Name Description System.String resourceDesc System.IO.FileStream fc IOContext context | Improve this Doc View Source NIOFSIndexInput(String, FileStream, Int64, Int64, Int32) Declaration public NIOFSIndexInput(string resourceDesc, FileStream fc, long off, long length, int bufferSize) Parameters Type Name Description System.String resourceDesc System.IO.FileStream fc System.Int64 off System.Int64 length System.Int32 bufferSize Fields | Improve this Doc View Source m_channel the file channel we will read from Declaration protected readonly FileStream m_channel Field Value Type Description System.IO.FileStream | Improve this Doc View Source m_end end offset (start+length) Declaration protected readonly long m_end Field Value Type Description System.Int64 | Improve this Doc View Source m_off start offset: non-zero in the slice case Declaration protected readonly long m_off Field Value Type Description System.Int64 Properties | Improve this Doc View Source Length Declaration public override sealed long Length { get; } Property Value Type Description System.Int64 Overrides IndexInput.Length Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides BufferedIndexInput.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides IndexInput.Dispose(Boolean) | Improve this Doc View Source NewBuffer(Byte[]) Declaration protected override void NewBuffer(byte[] newBuffer) Parameters Type Name Description System.Byte [] newBuffer Overrides BufferedIndexInput.NewBuffer(Byte[]) | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) Declaration protected override void ReadInternal(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides BufferedIndexInput.ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SeekInternal(Int64) Declaration protected override void SeekInternal(long pos) Parameters Type Name Description System.Int64 pos Overrides BufferedIndexInput.SeekInternal(Int64) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NIOFSDirectory.html",
    "title": "Class NIOFSDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NIOFSDirectory An FSDirectory implementation that uses System.IO.FileStream 's positional read, which allows multiple threads to read from the same file without synchronizing. This class only uses System.IO.FileStream when reading; writing is achieved with FSDirectory.FSIndexOutput . NOTE : NIOFSDirectory is not recommended on Windows because of a bug in how FileChannel.read is implemented in Sun's JRE. Inside of the implementation the position is apparently synchronized. See here for details. NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying file descriptor immediately if at the same time the thread is blocked on IO. The file descriptor will remain closed and subsequent access to NIOFSDirectory will throw a System.ObjectDisposedException . If your application uses either or System.Threading.Tasks.Task you should use SimpleFSDirectory in favor of NIOFSDirectory . Inheritance System.Object Directory BaseDirectory FSDirectory NIOFSDirectory Implements System.IDisposable Inherited Members FSDirectory.DEFAULT_READ_CHUNK_SIZE FSDirectory.m_directory FSDirectory.Open(DirectoryInfo) FSDirectory.Open(String) FSDirectory.Open(DirectoryInfo, LockFactory) FSDirectory.Open(String, LockFactory) FSDirectory.SetLockFactory(LockFactory) FSDirectory.ListAll(DirectoryInfo) FSDirectory.ListAll() FSDirectory.FileExists(String) FSDirectory.FileLength(String) FSDirectory.DeleteFile(String) FSDirectory.CreateOutput(String, IOContext) FSDirectory.EnsureCanWrite(String) FSDirectory.OnIndexOutputClosed(FSDirectory.FSIndexOutput) FSDirectory.Sync(ICollection<String>) FSDirectory.GetLockID() FSDirectory.Dispose(Boolean) FSDirectory.Directory FSDirectory.ToString() FSDirectory.ReadChunkSize BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class NIOFSDirectory : FSDirectory, IDisposable Constructors | Improve this Doc View Source NIOFSDirectory(DirectoryInfo) Create a new NIOFSDirectory for the named location and NativeFSLockFactory . Declaration public NIOFSDirectory(DirectoryInfo path) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source NIOFSDirectory(DirectoryInfo, LockFactory) Create a new NIOFSDirectory for the named location. Declaration public NIOFSDirectory(DirectoryInfo path, LockFactory lockFactory) Parameters Type Name Description System.IO.DirectoryInfo path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source NIOFSDirectory(String) Create a new NIOFSDirectory for the named location and NativeFSLockFactory . LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public NIOFSDirectory(string path) Parameters Type Name Description System.String path the path of the directory Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source NIOFSDirectory(String, LockFactory) Create a new NIOFSDirectory for the named location. LUCENENET specific overload for convenience using string instead of System.IO.DirectoryInfo . Declaration public NIOFSDirectory(string path, LockFactory lockFactory) Parameters Type Name Description System.String path the path of the directory LockFactory lockFactory the lock factory to use, or null for the default ( NativeFSLockFactory ); Exceptions Type Condition System.IO.IOException if there is a low-level I/O error Methods | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source OpenInput(String, IOContext) Creates an IndexInput for the file with the given name. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.NoLockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NoLockFactory.html",
    "title": "Class NoLockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoLockFactory Use this LockFactory to disable locking entirely. Only one instance of this lock is created. You should call GetNoLockFactory() to get the instance. Inheritance System.Object LockFactory NoLockFactory Inherited Members LockFactory.m_lockPrefix LockFactory.LockPrefix System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class NoLockFactory : LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string lockName) Parameters Type Name Description System.String lockName Overrides LockFactory.ClearLock(String) | Improve this Doc View Source GetNoLockFactory() Declaration public static NoLockFactory GetNoLockFactory() Returns Type Description NoLockFactory | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName Returns Type Description Lock Overrides LockFactory.MakeLock(String) Extension Methods Number.IsNumber(Object) See Also LockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Store.NRTCachingDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.NRTCachingDirectory.html",
    "title": "Class NRTCachingDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NRTCachingDirectory Wraps a RAMDirectory around any provided delegate directory, to be used during NRT search. This class is likely only useful in a near-real-time context, where indexing rate is lowish but reopen rate is highish, resulting in many tiny files being written. This directory keeps such segments (as well as the segments produced by merging them, as long as they are small enough), in RAM. This is safe to use: when your app calls Commit() , all cached files will be flushed from the cached and sync'd. Here's a simple example usage: Directory fsDir = FSDirectory.Open(new DirectoryInfo(\"/path/to/index\")); NRTCachingDirectory cachedFSDir = new NRTCachingDirectory(fsDir, 5.0, 60.0); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_48, analyzer); IndexWriter writer = new IndexWriter(cachedFSDir, conf); This will cache all newly flushed segments, all merges whose expected segment size is <= 5 MB, unless the net cached bytes exceeds 60 MB at which point all writes will not be cached (until the net bytes falls below 60 MB). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Directory NRTCachingDirectory Implements System.IDisposable Inherited Members Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.Copy(Directory, String, String, IOContext) Directory.EnsureOpen() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class NRTCachingDirectory : Directory, IDisposable Constructors | Improve this Doc View Source NRTCachingDirectory(Directory, Double, Double) We will cache a newly created output if 1) it's a flush or a merge and the estimated size of the merged segment is <= maxMergeSizeMB, and 2) the total cached bytes is <= maxCachedMB Declaration public NRTCachingDirectory(Directory delegate, double maxMergeSizeMB, double maxCachedMB) Parameters Type Name Description Directory delegate System.Double maxMergeSizeMB System.Double maxCachedMB Properties | Improve this Doc View Source Delegate Declaration public virtual Directory Delegate { get; } Property Value Type Description Directory | Improve this Doc View Source LockFactory Declaration public override LockFactory LockFactory { get; } Property Value Type Description LockFactory Overrides Directory.LockFactory Methods | Improve this Doc View Source ClearLock(String) Declaration public override void ClearLock(string name) Parameters Type Name Description System.String name Overrides Directory.ClearLock(String) | Improve this Doc View Source CreateOutput(String, IOContext) Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source CreateSlicer(String, IOContext) Declaration public override Directory.IndexInputSlicer CreateSlicer(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description Directory.IndexInputSlicer Overrides Directory.CreateSlicer(String, IOContext) | Improve this Doc View Source DeleteFile(String) Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) | Improve this Doc View Source Dispose(Boolean) Dispose this directory, which flushes any cached files to the delegate and then disposes the delegate. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source DoCacheWrite(String, IOContext) Subclass can override this to customize logic; return true if this file should be written to the RAMDirectory . Declaration protected virtual bool DoCacheWrite(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description System.Boolean | Improve this Doc View Source FileExists(String) Declaration [Obsolete(\"this method will be removed in 5.0\")] public override bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Declaration public override long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source GetSizeInBytes() Returns how many bytes are being used by the RAMDirectory cache Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ListAll() Declaration public override string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source ListCachedFiles() Declaration public virtual string[] ListCachedFiles() Returns Type Description System.String [] | Improve this Doc View Source MakeLock(String) Declaration public override Lock MakeLock(string name) Parameters Type Name Description System.String name Returns Type Description Lock Overrides Directory.MakeLock(String) | Improve this Doc View Source OpenInput(String, IOContext) Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source SetLockFactory(LockFactory) Declaration public override void SetLockFactory(LockFactory lockFactory) Parameters Type Name Description LockFactory lockFactory Overrides Directory.SetLockFactory(LockFactory) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> fileNames) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > fileNames Overrides Directory.Sync(ICollection<String>) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Directory.ToString() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.OutputStreamDataOutput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.OutputStreamDataOutput.html",
    "title": "Class OutputStreamDataOutput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OutputStreamDataOutput A DataOutput wrapping a plain System.IO.Stream . Inheritance System.Object DataOutput OutputStreamDataOutput Implements System.IDisposable Inherited Members DataOutput.WriteBytes(Byte[], Int32) DataOutput.WriteInt32(Int32) DataOutput.WriteInt16(Int16) DataOutput.WriteVInt32(Int32) DataOutput.WriteInt64(Int64) DataOutput.WriteVInt64(Int64) DataOutput.WriteString(String) DataOutput.CopyBytes(DataInput, Int64) DataOutput.WriteStringStringMap(IDictionary<String, String>) DataOutput.WriteStringSet(ISet<String>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class OutputStreamDataOutput : DataOutput, IDisposable Constructors | Improve this Doc View Source OutputStreamDataOutput(Stream) Declaration public OutputStreamDataOutput(Stream os) Parameters Type Name Description System.IO.Stream os Methods | Improve this Doc View Source Dispose() Declaration public virtual void Dispose() | Improve this Doc View Source WriteByte(Byte) Declaration public override void WriteByte(byte b) Parameters Type Name Description System.Byte b Overrides DataOutput.WriteByte(Byte) | Improve this Doc View Source WriteBytes(Byte[], Int32, Int32) Declaration public override void WriteBytes(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 length Overrides DataOutput.WriteBytes(Byte[], Int32, Int32) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.RAMDirectory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.RAMDirectory.html",
    "title": "Class RAMDirectory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RAMDirectory A memory-resident Directory implementation. Locking implementation is by default the SingleInstanceLockFactory but can be changed with SetLockFactory(LockFactory) . Warning: This class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. This class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. It is recommended to materialize large indexes on disk and use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. Inheritance System.Object Directory BaseDirectory RAMDirectory Implements System.IDisposable Inherited Members BaseDirectory.IsOpen BaseDirectory.m_lockFactory BaseDirectory.MakeLock(String) BaseDirectory.ClearLock(String) BaseDirectory.SetLockFactory(LockFactory) BaseDirectory.LockFactory BaseDirectory.EnsureOpen() Directory.OpenChecksumInput(String, IOContext) Directory.Dispose() Directory.ToString() Directory.Copy(Directory, String, String, IOContext) Directory.CreateSlicer(String, IOContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class RAMDirectory : BaseDirectory, IDisposable Constructors | Improve this Doc View Source RAMDirectory() Constructs an empty Directory . Declaration public RAMDirectory() | Improve this Doc View Source RAMDirectory(Directory, IOContext) Creates a new RAMDirectory instance from a different Directory implementation. This can be used to load a disk-based index into memory. Warning: this class is not intended to work with huge indexes. Everything beyond several hundred megabytes will waste resources (GC cycles), because it uses an internal buffer size of 1024 bytes, producing millions of byte[1024] arrays. this class is optimized for small memory-resident indexes. It also has bad concurrency on multithreaded environments. For disk-based indexes it is recommended to use MMapDirectory , which is a high-performance directory implementation working directly on the file system cache of the operating system, so copying data to heap space is not useful. Note that the resulting RAMDirectory instance is fully independent from the original Directory (it is a complete copy). Any subsequent changes to the original Directory will not be visible in the RAMDirectory instance. Declaration public RAMDirectory(Directory dir, IOContext context) Parameters Type Name Description Directory dir a Directory value IOContext context io context Exceptions Type Condition System.IO.IOException if an error occurs Fields | Improve this Doc View Source m_fileMap Declaration protected readonly ConcurrentDictionary<string, RAMFile> m_fileMap Field Value Type Description System.Collections.Concurrent.ConcurrentDictionary < System.String , RAMFile > | Improve this Doc View Source m_sizeInBytes Declaration protected readonly AtomicInt64 m_sizeInBytes Field Value Type Description AtomicInt64 Methods | Improve this Doc View Source CreateOutput(String, IOContext) Creates a new, empty file in the directory with the given name. Returns a stream writing this file. Declaration public override IndexOutput CreateOutput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexOutput Overrides Directory.CreateOutput(String, IOContext) | Improve this Doc View Source DeleteFile(String) Removes an existing file in the directory. Declaration public override void DeleteFile(string name) Parameters Type Name Description System.String name Overrides Directory.DeleteFile(String) Exceptions Type Condition System.IO.IOException if the file does not exist | Improve this Doc View Source Dispose(Boolean) Closes the store to future operations, releasing associated memory. Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides Directory.Dispose(Boolean) | Improve this Doc View Source FileExists(String) Returns true iff the named file exists in this directory. Declaration [Obsolete(\"this method will be removed in 5.0\")] public override sealed bool FileExists(string name) Parameters Type Name Description System.String name Returns Type Description System.Boolean Overrides Directory.FileExists(String) | Improve this Doc View Source FileLength(String) Returns the length in bytes of a file in the directory. Declaration public override sealed long FileLength(string name) Parameters Type Name Description System.String name Returns Type Description System.Int64 Overrides Directory.FileLength(String) Exceptions Type Condition System.IO.IOException if the file does not exist | Improve this Doc View Source GetLockID() Declaration public override string GetLockID() Returns Type Description System.String Overrides Directory.GetLockID() | Improve this Doc View Source GetSizeInBytes() Return total size in bytes of all files in this directory. This is currently quantized to Lucene.Net.Store.RAMOutputStream.BUFFER_SIZE . Declaration public long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source ListAll() Declaration public override sealed string[] ListAll() Returns Type Description System.String [] Overrides Directory.ListAll() | Improve this Doc View Source NewRAMFile() Returns a new RAMFile for storing data. this method can be overridden to return different RAMFile impls, that e.g. override NewBuffer(Int32) . Declaration protected virtual RAMFile NewRAMFile() Returns Type Description RAMFile | Improve this Doc View Source OpenInput(String, IOContext) Returns a stream reading an existing file. Declaration public override IndexInput OpenInput(string name, IOContext context) Parameters Type Name Description System.String name IOContext context Returns Type Description IndexInput Overrides Directory.OpenInput(String, IOContext) | Improve this Doc View Source Sync(ICollection<String>) Declaration public override void Sync(ICollection<string> names) Parameters Type Name Description System.Collections.Generic.ICollection < System.String > names Overrides Directory.Sync(ICollection<String>) Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IIndexed-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IIndexed-1.html",
    "title": "Interface IIndexed<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IIndexed<T> A sequenced collection, where indices of items in the order are maintained Inherited Members ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction IReadOnlyList<T>.Item[Int32] System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IIndexed<T> : ISequenced<T>, ICollection<T>, IExtensible<T>, ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Properties | Improve this Doc View Source IndexingSpeed Declaration Speed IndexingSpeed { get; } Property Value Type Description Speed | Improve this Doc View Source Item[Int32, Int32] Declaration IDirectedCollectionValue<T> this[int start, int count] { get; } Parameters Type Name Description System.Int32 start The low index of the interval (inclusive). System.Int32 count The size of the range. Property Value Type Description IDirectedCollectionValue <T> The directed collection of items in a specific index interval. Exceptions Type Condition System.ArgumentOutOfRangeException Methods | Improve this Doc View Source FindIndex(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection and return the index of the first one. Declaration int FindIndex(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate Returns Type Description System.Int32 the index, if found, a negative value else | Improve this Doc View Source FindLastIndex(Func<T, Boolean>) Check if there exists an item that satisfies a specific predicate in this collection and return the index of the last one. Declaration int FindLastIndex(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate A delegate ( Func`2 with R == bool ) defining the predicate Returns Type Description System.Int32 the index, if found, a negative value else | Improve this Doc View Source IndexOf(T) Searches for an item in the list going forwards from the start. Declaration int IndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of item from start. A negative number if item not found, namely the one's complement of the index at which the Add operation would put the item. | Improve this Doc View Source LastIndexOf(T) Searches for an item in the list going backwards from the end. Declaration int LastIndexOf(T item) Parameters Type Name Description T item Item to search for. Returns Type Description System.Int32 Index of of item from the end. A negative number if item not found, namely the two-complement of the index at which the Add operation would put the item. | Improve this Doc View Source RemoveAt(Int32) Remove the item at a specific position of the list. Declaration T RemoveAt(int index) Parameters Type Name Description System.Int32 index The index of the item to remove. Returns Type Description T The removed item. Exceptions Type Condition System.IndexOutOfRangeException if index is negative or = the size of the collection. | Improve this Doc View Source RemoveInterval(Int32, Int32) Remove all items in an index interval. Declaration void RemoveInterval(int start, int count) Parameters Type Name Description System.Int32 start The index of the first item to remove. System.Int32 count The number of items to remove. Exceptions Type Condition System.ArgumentOutOfRangeException if start or count is negative or start+count > the size of the collection. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.IIndexedSorted-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.IIndexedSorted-1.html",
    "title": "Interface IIndexedSorted<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IIndexedSorted<T> A collection where items are maintained in sorted order together with their indexes in that order. Inherited Members ISorted<T>.FindMin() ISorted<T>.DeleteMin() ISorted<T>.FindMax() ISorted<T>.DeleteMax() ISorted<T>.Comparer ISorted<T>.TryPredecessor(T, T) ISorted<T>.TrySuccessor(T, T) ISorted<T>.TryWeakPredecessor(T, T) ISorted<T>.TryWeakSuccessor(T, T) ISorted<T>.Predecessor(T) ISorted<T>.Successor(T) ISorted<T>.WeakPredecessor(T) ISorted<T>.WeakSuccessor(T) ISorted<T>.Cut(IComparable<T>, T, Boolean, T, Boolean) ISorted<T>.RangeAll() ISorted<T>.AddSorted(IEnumerable<T>) ISorted<T>.RemoveRangeFrom(T) ISorted<T>.RemoveRangeFromTo(T, T) ISorted<T>.RemoveRangeTo(T) IIndexed<T>.IndexingSpeed IIndexed<T>.Item[Int32, Int32] IIndexed<T>.IndexOf(T) IIndexed<T>.LastIndexOf(T) IIndexed<T>.FindIndex(Func<T, Boolean>) IIndexed<T>.FindLastIndex(Func<T, Boolean>) IIndexed<T>.RemoveAt(Int32) IIndexed<T>.RemoveInterval(Int32, Int32) ISequenced<T>.GetSequencedHashCode() ISequenced<T>.SequencedEquals(ISequenced<T>) ICollection<T>.ContainsSpeed ICollection<T>.Count ICollection<T>.IsReadOnly ICollection<T>.Add(T) ICollection<T>.CopyTo(T[], Int32) ICollection<T>.GetUnsequencedHashCode() ICollection<T>.UnsequencedEquals(ICollection<T>) ICollection<T>.Contains(T) ICollection<T>.ContainsCount(T) ICollection<T>.UniqueItems() ICollection<T>.ItemMultiplicities() ICollection<T>.ContainsAll(IEnumerable<T>) ICollection<T>.Find(T) ICollection<T>.FindOrAdd(T) ICollection<T>.Update(T) ICollection<T>.Update(T, T) ICollection<T>.UpdateOrAdd(T) ICollection<T>.UpdateOrAdd(T, T) ICollection<T>.Remove(T) ICollection<T>.Remove(T, T) ICollection<T>.RemoveAllCopies(T) ICollection<T>.RemoveAll(IEnumerable<T>) ICollection<T>.Clear() ICollection<T>.RetainAll(IEnumerable<T>) IExtensible<T>.AllowsDuplicates IExtensible<T>.EqualityComparer IExtensible<T>.DuplicatesByCounting IExtensible<T>.AddAll(IEnumerable<T>) IExtensible<T>.Check() IDirectedCollectionValue<T>.Backwards() IDirectedCollectionValue<T>.FindLast(Func<T, Boolean>, T) ICollectionValue<T>.ListenableEvents ICollectionValue<T>.ActiveEvents ICollectionValue<T>.CollectionChanged ICollectionValue<T>.CollectionCleared ICollectionValue<T>.ItemsAdded ICollectionValue<T>.ItemInserted ICollectionValue<T>.ItemsRemoved ICollectionValue<T>.ItemRemovedAt ICollectionValue<T>.IsEmpty ICollectionValue<T>.CountSpeed ICollectionValue<T>.ToArray() ICollectionValue<T>.Apply(Action<T>) ICollectionValue<T>.Exists(Func<T, Boolean>) ICollectionValue<T>.Find(Func<T, Boolean>, T) ICollectionValue<T>.All(Func<T, Boolean>) ICollectionValue<T>.Choose() ICollectionValue<T>.Filter(Func<T, Boolean>) IShowable.Show(StringBuilder, Int32, IFormatProvider) System.IFormattable.ToString(System.String, System.IFormatProvider) IDirectedEnumerable<T>.Direction IReadOnlyList<T>.Item[Int32] System.Collections.Generic.IEnumerable<T>.GetEnumerator() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public interface IIndexedSorted<T> : ISorted<T>, IIndexed<T>, ISequenced<T>, ICollection<T>, IExtensible<T>, ICollection<T>, IDirectedCollectionValue<T>, ICollectionValue<T>, IShowable, IFormattable, IDirectedEnumerable<T>, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable Type Parameters Name Description T Methods | Improve this Doc View Source CountFrom(T) Determine the number of items at or above a supplied threshold. Declaration int CountFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source CountFromTo(T, T) Determine the number of items between two supplied thresholds. Declaration int CountFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive) T top The upper bound (exclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source CountTo(T) Determine the number of items below a supplied threshold. Declaration int CountTo(T top) Parameters Type Name Description T top The upper bound (exclusive) Returns Type Description System.Int32 The number of matching items. | Improve this Doc View Source FindAll(Func<T, Boolean>) Create a new indexed sorted collection consisting of the items of this indexed sorted collection satisfying a certain predicate. Declaration IIndexedSorted<T> FindAll(Func<T, bool> predicate) Parameters Type Name Description System.Func <T, System.Boolean > predicate The filter delegate defining the predicate. Returns Type Description IIndexedSorted <T> The new indexed sorted collection. | Improve this Doc View Source Map<V>(Func<T, V>, IComparer<V>) Create a new indexed sorted collection consisting of the results of mapping all items of this list. System.ArgumentException if the map is not increasing over the items of this collection (with respect to the two given comparison relations). Declaration IIndexedSorted<V> Map<V>(Func<T, V> mapper, IComparer<V> comparer) Parameters Type Name Description System.Func <T, V> mapper The delegate definging the map. System.Collections.Generic.IComparer <V> comparer The comparion relation to use for the result. Returns Type Description IIndexedSorted <V> The new sorted collection. Type Parameters Name Description V | Improve this Doc View Source RangeFrom(T) Query this sorted collection for items greater than or equal to a supplied value. Declaration IDirectedCollectionValue<T> RangeFrom(T bot) Parameters Type Name Description T bot The lower bound (inclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeFromTo(T, T) Query this sorted collection for items between two supplied values. Declaration IDirectedCollectionValue<T> RangeFromTo(T bot, T top) Parameters Type Name Description T bot The lower bound (inclusive). T top The upper bound (exclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. | Improve this Doc View Source RangeTo(T) Query this sorted collection for items less than a supplied value. Declaration IDirectedCollectionValue<T> RangeTo(T top) Parameters Type Name Description T top The upper bound (exclusive). Returns Type Description IDirectedCollectionValue <T> The result directed collection. Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.MappingMultiDocsAndPositionsEnum.html",
    "title": "Class MappingMultiDocsAndPositionsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MappingMultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MappingMultiDocsAndPositionsEnum Inherited Members DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class MappingMultiDocsAndPositionsEnum : DocsAndPositionsEnum Constructors | Improve this Doc View Source MappingMultiDocsAndPositionsEnum() Sole constructor. Declaration public MappingMultiDocsAndPositionsEnum() Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source EndOffset Declaration public override int EndOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.EndOffset | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source MergeState Gets or Sets the MergeState , which is used to re-map document IDs. Declaration public MergeState MergeState { get; set; } Property Value Type Description MergeState | Improve this Doc View Source NumSubs How many sub-readers we are merging. Declaration public int NumSubs { get; } Property Value Type Description System.Int32 See Also Subs | Improve this Doc View Source StartOffset Declaration public override int StartOffset { get; } Property Value Type Description System.Int32 Overrides DocsAndPositionsEnum.StartOffset | Improve this Doc View Source Subs Returns sub-readers we are merging. Declaration public MultiDocsAndPositionsEnum.EnumWithSlice[] Subs { get; } Property Value Type Description MultiDocsAndPositionsEnum.EnumWithSlice [] Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetPayload() Declaration public override BytesRef GetPayload() Returns Type Description BytesRef Overrides DocsAndPositionsEnum.GetPayload() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source NextPosition() Declaration public override int NextPosition() Returns Type Description System.Int32 Overrides DocsAndPositionsEnum.NextPosition() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsReader.html",
    "title": "Class TermVectorsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermVectorsReader Codec API for reading term vectors: This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsReader CompressingTermVectorsReader Lucene40TermVectorsReader Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsReader : IDisposable Constructors | Improve this Doc View Source TermVectorsReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsReader() Methods | Improve this Doc View Source CheckIntegrity() Checks consistency of this reader. Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public abstract void CheckIntegrity() | Improve this Doc View Source Clone() Create a clone that one caller at a time may use to read term vectors. Declaration public abstract object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Get(Int32) Returns term vectors for this document, or null if term vectors were not indexed. If offsets are available they are in an OffsetAttribute available from the DocsAndPositionsEnum . Declaration public abstract Fields Get(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Fields | Improve this Doc View Source RamBytesUsed() Returns approximate RAM bytes used. Declaration public abstract long RamBytesUsed() Returns Type Description System.Int64 Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.TermVectorsWriter.html",
    "title": "Class TermVectorsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermVectorsWriter Codec API for writing term vectors: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) is called for each field in the document, informing the codec how many terms will be written for that field, and whether or not positions, offsets, or payloads are enabled. Within each field, StartTerm(BytesRef, Int32) is called for each term. If offsets and/or positions are enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called for each term occurrence. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsWriter CompressingTermVectorsWriter Lucene40TermVectorsWriter Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class TermVectorsWriter : IDisposable Constructors | Improve this Doc View Source TermVectorsWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected TermVectorsWriter() Properties | Improve this Doc View Source Comparer Return the IComparer{BytesRef} used to sort terms before feeding to this API. Declaration public abstract IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source Abort() Aborts writing entirely, implementation should remove any partially-written files, etc. Declaration public abstract void Abort() | Improve this Doc View Source AddAllDocVectors(Fields, MergeState) Safe (but, slowish) default method to write every vector field in the document. Declaration protected void AddAllDocVectors(Fields vectors, MergeState mergeState) Parameters Type Name Description Fields vectors MergeState mergeState | Improve this Doc View Source AddPosition(Int32, Int32, Int32, BytesRef) Adds a term position and offsets. Declaration public abstract void AddPosition(int position, int startOffset, int endOffset, BytesRef payload) Parameters Type Name Description System.Int32 position System.Int32 startOffset System.Int32 endOffset BytesRef payload | Improve this Doc View Source AddProx(Int32, DataInput, DataInput) Called by IndexWriter when writing new segments. This is an expert API that allows the codec to consume positions and offsets directly from the indexer. The default implementation calls AddPosition(Int32, Int32, Int32, BytesRef) , but subclasses can override this if they want to efficiently write all the positions, then all the offsets, for example. NOTE: this API is extremely expert and subject to change or removal!!! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual void AddProx(int numProx, DataInput positions, DataInput offsets) Parameters Type Name Description System.Int32 numProx DataInput positions DataInput offsets | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Finish(FieldInfos, Int32) Called before Dispose(Boolean) , passing in the number of documents that were written. Note that this is intentionally redundant (equivalent to the number of calls to StartDocument(Int32) , but a Codec should check that this is the case to detect the bug described in LUCENE-1282. Declaration public abstract void Finish(FieldInfos fis, int numDocs) Parameters Type Name Description FieldInfos fis System.Int32 numDocs | Improve this Doc View Source FinishDocument() Called after a doc and all its fields have been added. Declaration public virtual void FinishDocument() | Improve this Doc View Source FinishField() Called after a field and all its terms have been added. Declaration public virtual void FinishField() | Improve this Doc View Source FinishTerm() Called after a term and all its positions have been added. Declaration public virtual void FinishTerm() | Improve this Doc View Source Merge(MergeState) Merges in the term vectors from the readers in mergeState . The default implementation skips over deleted documents, and uses StartDocument(Int32) , StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) , StartTerm(BytesRef, Int32) , AddPosition(Int32, Int32, Int32, BytesRef) , and Finish(FieldInfos, Int32) , returning the number of documents that were written. Implementations can override this method for more sophisticated merging (bulk-byte copying, etc). Declaration public virtual int Merge(MergeState mergeState) Parameters Type Name Description MergeState mergeState Returns Type Description System.Int32 | Improve this Doc View Source StartDocument(Int32) Called before writing the term vectors of the document. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) will be called numVectorFields times. Note that if term vectors are enabled, this is called even if the document has no vector fields, in this case numVectorFields will be zero. Declaration public abstract void StartDocument(int numVectorFields) Parameters Type Name Description System.Int32 numVectorFields | Improve this Doc View Source StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) Called before writing the terms of the field. StartTerm(BytesRef, Int32) will be called numTerms times. Declaration public abstract void StartField(FieldInfo info, int numTerms, bool positions, bool offsets, bool payloads) Parameters Type Name Description FieldInfo info System.Int32 numTerms System.Boolean positions System.Boolean offsets System.Boolean payloads | Improve this Doc View Source StartTerm(BytesRef, Int32) Adds a term and its term frequency freq . If this field has positions and/or offsets enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called freq times respectively. Declaration public abstract void StartTerm(BytesRef term, int freq) Parameters Type Name Description BytesRef term System.Int32 freq Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DocumentExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the Document class. Inheritance System.Object DocumentExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public static class DocumentExtensions Methods | Improve this Doc View Source AddBinaryDocValuesField(Document, String, BytesRef) Adds a new BinaryDocValuesField . Declaration public static BinaryDocValuesField AddBinaryDocValuesField(this Document document, string name, BytesRef value) Parameters Type Name Description Document document This Document . System.String name field name BytesRef value binary content Returns Type Description BinaryDocValuesField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddDoubleDocValuesField(Document, String, Double) Adds a new DoubleDocValuesField field with the specified 64-bit double value Declaration public static DoubleDocValuesField AddDoubleDocValuesField(this Document document, string name, double value) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit double value Returns Type Description DoubleDocValuesField The field that was added to this Document . Remarks Syntactic sugar for encoding doubles as NumericDocValues via DoubleToRawInt64Bits(Double) . Per-document double values can be retrieved via GetDoubles(AtomicReader, String, Boolean) . NOTE : In most all cases this will be rather inefficient, requiring eight bytes per document. Consider encoding double values yourself with only as much precision as you require. Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddDoubleField(Document, String, Double, Field.Store) Adds a stored or un-stored DoubleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static DoubleField AddDoubleField(this Document document, string name, double value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit System.Double value Field.Store stored YES if the content should also be stored Returns Type Description DoubleField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddDoubleField(Document, String, Double, FieldType) Adds a stored or un-stored DoubleField with the provided value. Expert: allows you to customize the FieldType . Declaration public static DoubleField AddDoubleField(this Document document, string name, double value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Double value 64-bit double value FieldType type customized field type: must have NumericType of DOUBLE . Returns Type Description DoubleField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or type is null , or if the field type does not have a DOUBLE NumericType | Improve this Doc View Source AddInt32Field(Document, String, Int32, Field.Store) Adds a stored or un-stored Int32Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static Int32Field AddInt32Field(this Document document, string name, int value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value 32-bit System.Int32 value Field.Store stored YES if the content should also be stored Returns Type Description Int32Field The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddInt32Field(Document, String, Int32, FieldType) Adds a stored or un-stored Int32Field with the provided value. Expert: allows you to customize the FieldType . Declaration public static Int32Field AddInt32Field(this Document document, string name, int value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value 32-bit System.Int32 value FieldType type customized field type: must have NumericType of INT32 . Returns Type Description Int32Field The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a NumericType of INT32 | Improve this Doc View Source AddInt64Field(Document, String, Int64, Field.Store) Adds a stored or un-stored Int64Field with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static Int64Field AddInt64Field(this Document document, string name, long value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit System.Int64 value Field.Store stored YES if the content should also be stored Returns Type Description Int64Field The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddInt64Field(Document, String, Int64, FieldType) Adds a stored or un-stored Int64Field with the provided value. Expert: allows you to customize the FieldType . Declaration public static Int64Field AddInt64Field(this Document document, string name, long value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit System.Int64 value FieldType type customized field type: must have NumericType of INT64 . Returns Type Description Int64Field The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a NumericType of INT64 | Improve this Doc View Source AddNumericDocValuesField(Document, String, Int64) Adds a new NumericDocValuesField field with the specified 64-bit System.Int64 value Declaration public static NumericDocValuesField AddNumericDocValuesField(this Document document, string name, long value) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value 64-bit System.Int64 value Returns Type Description NumericDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddSingleDocValuesField(Document, String, Single) Adds a new SingleDocValuesField field with the specified 32-bit System.Single value Declaration public static SingleDocValuesField AddSingleDocValuesField(this Document document, string name, float value) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit System.Single value Returns Type Description SingleDocValuesField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddSingleField(Document, String, Single, Field.Store) Adds a stored or un-stored SingleField with the provided value and default precisionStep PRECISION_STEP_DEFAULT (4). Declaration public static SingleField AddSingleField(this Document document, string name, float value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit System.Single value Field.Store stored YES if the content should also be stored Returns Type Description SingleField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddSingleField(Document, String, Single, FieldType) Adds a stored or un-stored SingleField with the provided value. Expert: allows you to customize the FieldType . Declaration public static SingleField AddSingleField(this Document document, string name, float value, FieldType type) Parameters Type Name Description Document document This Document . System.String name field name System.Single value 32-bit System.Single value FieldType type customized field type: must have NumericType of SINGLE . Returns Type Description SingleField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or type is NONE System.ArgumentException if the field type does not have a SINGLE NumericType | Improve this Doc View Source AddSortedDocValuesField(Document, String, BytesRef) Adds a new SortedDocValuesField field. Declaration public static SortedDocValuesField AddSortedDocValuesField(this Document document, string name, BytesRef bytes) Parameters Type Name Description Document document This Document . System.String name field name BytesRef bytes binary content Returns Type Description SortedDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddSortedSetDocValuesField(Document, String, BytesRef) Adds a new SortedSetDocValuesField field. Declaration public static SortedSetDocValuesField AddSortedSetDocValuesField(this Document document, string name, BytesRef bytes) Parameters Type Name Description Document document This Document . System.String name field name BytesRef bytes binary content Returns Type Description SortedSetDocValuesField The field that was added to this Document . Remarks If you also need to store the value, you should add a separate StoredField instance. Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source AddStoredField(Document, String, BytesRef) Adds a stored-only field with the given binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, BytesRef value) Parameters Type Name Description Document document This Document . System.String name field name BytesRef value BytesRef pointing to binary content (not copied) Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Byte[]) Adds a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, byte[] value) Parameters Type Name Description Document document This Document . System.String name field name System.Byte [] value byte array pointing to binary content (not copied) Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Byte[], Int32, Int32) Adds a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public static StoredField AddStoredField(this Document document, string name, byte[] value, int offset, int length) Parameters Type Name Description Document document This Document . System.String name field name System.Byte [] value System.Byte array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Double) Adds a stored-only field with the given System.Double value. Declaration public static StoredField AddStoredField(this Document document, string name, double value) Parameters Type Name Description Document document This Document . System.String name field name System.Double value System.Double value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Int32) Adds a stored-only field with the given System.Int32 value. Declaration public static StoredField AddStoredField(this Document document, string name, int value) Parameters Type Name Description Document document This Document . System.String name field name System.Int32 value System.Int32 value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Int64) Adds a stored-only field with the given System.Int64 value. Declaration public static StoredField AddStoredField(this Document document, string name, long value) Parameters Type Name Description Document document This Document . System.String name field name System.Int64 value System.Int64 value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, Single) Adds a stored-only field with the given System.Single value. Declaration public static StoredField AddStoredField(this Document document, string name, float value) Parameters Type Name Description Document document This Document . System.String name field name System.Single value System.Single value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source AddStoredField(Document, String, String) Adds a stored-only field with the given System.String value. Declaration public static StoredField AddStoredField(this Document document, string name, string value) Parameters Type Name Description Document document This Document . System.String name field name System.String value System.String value Returns Type Description StoredField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or value is null . | Improve this Doc View Source AddStringField(Document, String, String, Field.Store) Adds a new StringField (a field that is indexed but not tokenized) Declaration public static StringField AddStringField(this Document document, string name, string value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.String value System.String value Field.Store stored YES if the content should also be stored Returns Type Description StringField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or value is null . | Improve this Doc View Source AddTextField(Document, String, TokenStream) Adds a new un-stored TextField with TokenStream value. Declaration public static TextField AddTextField(this Document document, string name, TokenStream stream) Parameters Type Name Description Document document This Document . System.String name field name TokenStream stream TokenStream value Returns Type Description TextField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or stream is null . | Improve this Doc View Source AddTextField(Document, String, TextReader) Adds a new un-stored TextField with System.IO.TextReader value. Declaration public static TextField AddTextField(this Document document, string name, TextReader reader) Parameters Type Name Description Document document This Document . System.String name field name System.IO.TextReader reader System.IO.TextReader value Returns Type Description TextField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or reader is null | Improve this Doc View Source AddTextField(Document, String, String, Field.Store) Adds a new TextField with System.String value. Declaration public static TextField AddTextField(this Document document, string name, string value, Field.Store stored) Parameters Type Name Description Document document This Document . System.String name field name System.String value System.String value Field.Store stored YES if the content should also be stored Returns Type Description TextField The field that was added to this Document . Exceptions Type Condition System.ArgumentNullException if the field name or value is null . | Improve this Doc View Source GetField<T>(Document, String) Returns a field with the given name if any exist in this document cast to type T , or null . If multiple fields exists with this name, this method returns the first value added. Declaration public static T GetField<T>(this Document document, string name) where T : IIndexableField Parameters Type Name Description Document document This Document . System.String name Field name Returns Type Description T Type Parameters Name Description T Exceptions Type Condition System.InvalidCastException If the field type cannot be cast to T . | Improve this Doc View Source GetFields<T>(Document, String) Returns an array of IIndexableField s with the given name, cast to type T . This method returns an empty array when there are no matching fields. It never returns null . Declaration public static T[] GetFields<T>(this Document document, string name) where T : IIndexableField Parameters Type Name Description Document document This Document . System.String name the name of the field Returns Type Description T[] a IndexableField[] array Type Parameters Name Description T Exceptions Type Condition System.InvalidCastException If the field type cannot be cast to ."
  },
  "api/Lucene.Net/Lucene.Net.Documents.DocumentStoredFieldVisitor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DocumentStoredFieldVisitor.html",
    "title": "Class DocumentStoredFieldVisitor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentStoredFieldVisitor A StoredFieldVisitor that creates a Document containing all stored fields, or only specific requested fields provided to DocumentStoredFieldVisitor(ISet<String>) . This is used by Document(Int32) to load a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object StoredFieldVisitor DocumentStoredFieldVisitor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class DocumentStoredFieldVisitor : StoredFieldVisitor Constructors | Improve this Doc View Source DocumentStoredFieldVisitor() Load all stored fields. Declaration public DocumentStoredFieldVisitor() | Improve this Doc View Source DocumentStoredFieldVisitor(ISet<String>) Load only fields named in the provided System.Collections.Generic.ISet<T> . Declaration public DocumentStoredFieldVisitor(ISet<string> fieldsToAdd) Parameters Type Name Description System.Collections.Generic.ISet < System.String > fieldsToAdd Set of fields to load, or null (all fields). | Improve this Doc View Source DocumentStoredFieldVisitor(String[]) Load only fields named in the provided fields. Declaration public DocumentStoredFieldVisitor(params string[] fields) Parameters Type Name Description System.String [] fields Properties | Improve this Doc View Source Document Retrieve the visited document. Declaration public virtual Document Document { get; } Property Value Type Description Document Document populated with stored fields. Note that only the stored information in the field instances is valid, data such as boosts, indexing options, term vector options, etc is not set. Methods | Improve this Doc View Source BinaryField(FieldInfo, Byte[]) Declaration public override void BinaryField(FieldInfo fieldInfo, byte[] value) Parameters Type Name Description FieldInfo fieldInfo System.Byte [] value Overrides StoredFieldVisitor.BinaryField(FieldInfo, Byte[]) | Improve this Doc View Source DoubleField(FieldInfo, Double) Declaration public override void DoubleField(FieldInfo fieldInfo, double value) Parameters Type Name Description FieldInfo fieldInfo System.Double value Overrides StoredFieldVisitor.DoubleField(FieldInfo, Double) | Improve this Doc View Source Int32Field(FieldInfo, Int32) Declaration public override void Int32Field(FieldInfo fieldInfo, int value) Parameters Type Name Description FieldInfo fieldInfo System.Int32 value Overrides StoredFieldVisitor.Int32Field(FieldInfo, Int32) | Improve this Doc View Source Int64Field(FieldInfo, Int64) Declaration public override void Int64Field(FieldInfo fieldInfo, long value) Parameters Type Name Description FieldInfo fieldInfo System.Int64 value Overrides StoredFieldVisitor.Int64Field(FieldInfo, Int64) | Improve this Doc View Source NeedsField(FieldInfo) Declaration public override StoredFieldVisitor.Status NeedsField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description StoredFieldVisitor.Status Overrides StoredFieldVisitor.NeedsField(FieldInfo) | Improve this Doc View Source SingleField(FieldInfo, Single) Declaration public override void SingleField(FieldInfo fieldInfo, float value) Parameters Type Name Description FieldInfo fieldInfo System.Single value Overrides StoredFieldVisitor.SingleField(FieldInfo, Single) | Improve this Doc View Source StringField(FieldInfo, String) Declaration public override void StringField(FieldInfo fieldInfo, string value) Parameters Type Name Description FieldInfo fieldInfo System.String value Overrides StoredFieldVisitor.StringField(FieldInfo, String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int32.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int32.html",
    "title": "Class Field.Int32 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Int32 Inheritance System.Object Field.Number Field.Int32 Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Int32 : Field.Number Constructors | Improve this Doc View Source Int32(Int32) Declaration public Int32(int value) Parameters Type Name Description System.Int32 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Int64.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Int64.html",
    "title": "Class Field.Int64 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Int64 Inheritance System.Object Field.Number Field.Int64 Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Int64 : Field.Number Constructors | Improve this Doc View Source Int64(Int64) Declaration public Int64(long value) Parameters Type Name Description System.Int64 value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.html",
    "title": "Class AbstractAppendingInt64Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAppendingInt64Buffer Common functionality shared by AppendingDeltaPackedInt64Buffer and MonotonicAppendingInt64Buffer . NOTE: This was AbstractAppendingLongBuffer in Lucene Inheritance System.Object NumericDocValues Int64Values AbstractAppendingInt64Buffer AppendingDeltaPackedInt64Buffer AppendingPackedInt64Buffer MonotonicAppendingInt64Buffer Inherited Members Int64Values.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class AbstractAppendingInt64Buffer : Int64Values Properties | Improve this Doc View Source Count Get the number of values that have been added to the buffer. NOTE: This was size() in Lucene. Declaration public long Count { get; } Property Value Type Description System.Int64 | Improve this Doc View Source PageSize Declaration public int PageSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int64) Append a value to this buffer. Declaration public void Add(long l) Parameters Type Name Description System.Int64 l | Improve this Doc View Source Freeze() Pack all pending values in this buffer. Subsequent calls to Add(Int64) will fail. Declaration public virtual void Freeze() | Improve this Doc View Source Get(Int64) Declaration public override sealed long Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 Overrides Int64Values.Get(Int64) | Improve this Doc View Source Get(Int64, Int64[], Int32, Int32) Bulk get: read at least one and at most len System.Int64 s starting from index into arr[off:off+len] and return the actual number of values that have been read. Declaration public int Get(long index, long[] arr, int off, int len) Parameters Type Name Description System.Int64 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Return an iterator over the values of this buffer. Declaration public virtual AbstractAppendingInt64Buffer.Iterator GetIterator() Returns Type Description AbstractAppendingInt64Buffer.Iterator | Improve this Doc View Source RamBytesUsed() Return the number of bytes used by this instance. Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniAnalyzer.html",
    "title": "Class SoraniAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniAnalyzer Analyzer for Sorani Kurdish. Inheritance System.Object Analyzer StopwordAnalyzerBase SoraniAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source SoraniAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public SoraniAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source SoraniAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public SoraniAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source SoraniAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public SoraniAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Kurdish stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , SoraniNormalizationFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SoraniStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilter.html",
    "title": "Class SoraniNormalizationFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniNormalizationFilter A TokenFilter that applies SoraniNormalizer to normalize the orthography. Inheritance System.Object AttributeSource TokenStream TokenFilter SoraniNormalizationFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniNormalizationFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SoraniNormalizationFilter(TokenStream) Declaration public SoraniNormalizationFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniNormalizationFilterFactory.html",
    "title": "Class SoraniNormalizationFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniNormalizationFilterFactory Factory for SoraniNormalizationFilter . <fieldType name=\"text_ckbnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SoraniNormalizationFilterFactory Implements IMultiTermAwareComponent Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniNormalizationFilterFactory : TokenFilterFactory, IMultiTermAwareComponent Constructors | Improve this Doc View Source SoraniNormalizationFilterFactory(IDictionary<String, String>) Creates a new SoraniNormalizationFilterFactory Declaration public SoraniNormalizationFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniStemFilter.html",
    "title": "Class SoraniStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniStemFilter A TokenFilter that applies SoraniStemmer to stem Sorani words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter SoraniStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class SoraniStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source SoraniStemFilter(TokenStream) Declaration public SoraniStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniStemFilterFactory.html",
    "title": "Class SoraniStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniStemFilterFactory Factory for SoraniStemFilter . <fieldType name=\"text_ckbstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> <filter class=\"solr.SoraniStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory SoraniStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source SoraniStemFilterFactory(IDictionary<String, String>) Creates a new SoraniStemFilterFactory Declaration public SoraniStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.TermsIndexWriterBase.html",
    "title": "Class TermsIndexWriterBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermsIndexWriterBase Base class for terms index implementations to plug into BlockTermsWriter . @lucene.experimental Inheritance System.Object TermsIndexWriterBase FixedGapTermsIndexWriter VariableGapTermsIndexWriter Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public abstract class TermsIndexWriterBase : IDisposable Methods | Improve this Doc View Source AddField(FieldInfo, Int64) Declaration public abstract TermsIndexWriterBase.FieldWriter AddField(FieldInfo fieldInfo, long termsFilePointer) Parameters Type Name Description FieldInfo fieldInfo System.Int64 termsFilePointer Returns Type Description TermsIndexWriterBase.FieldWriter | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Implements System.IDisposable See Also TermsIndexReaderBase"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexReader.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexReader.html",
    "title": "Class VariableGapTermsIndexReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexReader See VariableGapTermsIndexWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermsIndexReaderBase VariableGapTermsIndexReader Implements System.IDisposable Inherited Members TermsIndexReaderBase.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public class VariableGapTermsIndexReader : TermsIndexReaderBase, IDisposable Constructors | Improve this Doc View Source VariableGapTermsIndexReader(Directory, FieldInfos, String, Int32, String, IOContext) Declaration public VariableGapTermsIndexReader(Directory dir, FieldInfos fieldInfos, string segment, int indexDivisor, string segmentSuffix, IOContext context) Parameters Type Name Description Directory dir FieldInfos fieldInfos System.String segment System.Int32 indexDivisor System.String segmentSuffix IOContext context Properties | Improve this Doc View Source Divisor Declaration public override int Divisor { get; } Property Value Type Description System.Int32 Overrides TermsIndexReaderBase.Divisor | Improve this Doc View Source SupportsOrd Declaration public override bool SupportsOrd { get; } Property Value Type Description System.Boolean Overrides TermsIndexReaderBase.SupportsOrd Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TermsIndexReaderBase.Dispose(Boolean) | Improve this Doc View Source GetFieldEnum(FieldInfo) Declaration public override TermsIndexReaderBase.FieldIndexEnum GetFieldEnum(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description TermsIndexReaderBase.FieldIndexEnum Overrides TermsIndexReaderBase.GetFieldEnum(FieldInfo) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides TermsIndexReaderBase.RamBytesUsed() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.BlockTerms.VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector.html",
    "title": "Class VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Sets an index term when docFreq >= docFreqThresh, or every interval terms. This should reduce seek time to high docFreq terms. Inheritance System.Object VariableGapTermsIndexWriter.IndexTermSelector VariableGapTermsIndexWriter.EveryNOrDocFreqTermSelector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.BlockTerms Assembly : Lucene.Net.Codecs.dll Syntax public sealed class EveryNOrDocFreqTermSelector : VariableGapTermsIndexWriter.IndexTermSelector Constructors | Improve this Doc View Source EveryNOrDocFreqTermSelector(Int32, Int32) Declaration public EveryNOrDocFreqTermSelector(int docFreqThresh, int interval) Parameters Type Name Description System.Int32 docFreqThresh System.Int32 interval Methods | Improve this Doc View Source IsIndexTerm(BytesRef, TermStats) Declaration public override bool IsIndexTerm(BytesRef term, TermStats stats) Parameters Type Name Description BytesRef term TermStats stats Returns Type Description System.Boolean Overrides VariableGapTermsIndexWriter.IndexTermSelector.IsIndexTerm(BytesRef, TermStats) | Improve this Doc View Source NewField(FieldInfo) Declaration public override void NewField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Overrides VariableGapTermsIndexWriter.IndexTermSelector.NewField(FieldInfo)"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryBuilder.html",
    "title": "Class TokenInfoDictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionaryBuilder Inheritance System.Object TokenInfoDictionaryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class TokenInfoDictionaryBuilder Constructors | Improve this Doc View Source TokenInfoDictionaryBuilder(DictionaryBuilder.DictionaryFormat, String, Boolean) Declaration public TokenInfoDictionaryBuilder(DictionaryBuilder.DictionaryFormat format, string encoding, bool normalizeEntries) Parameters Type Name Description DictionaryBuilder.DictionaryFormat format System.String encoding System.Boolean normalizeEntries Methods | Improve this Doc View Source Build(String) Declaration public virtual TokenInfoDictionaryWriter Build(string dirname) Parameters Type Name Description System.String dirname Returns Type Description TokenInfoDictionaryWriter | Improve this Doc View Source BuildDictionary(IList<String>) Declaration public virtual TokenInfoDictionaryWriter BuildDictionary(IList<string> csvFiles) Parameters Type Name Description System.Collections.Generic.IList < System.String > csvFiles Returns Type Description TokenInfoDictionaryWriter | Improve this Doc View Source FormatEntry(String[]) IPADIC features 0 - surface 1 - left cost 2 - right cost 3 - word cost 4-9 - pos 10 - base form 11 - reading 12 - pronounciation UniDic features 0 - surface 1 - left cost 2 - right cost 3 - word cost 4-9 - pos 10 - base form reading 11 - base form 12 - surface form 13 - surface reading Declaration public virtual string[] FormatEntry(string[] features) Parameters Type Name Description System.String [] features Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.html",
    "title": "Class DictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryBuilder Inheritance System.Object DictionaryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class DictionaryBuilder Methods | Improve this Doc View Source Build(DictionaryBuilder.DictionaryFormat, String, String, String, Boolean) Declaration public static void Build(DictionaryBuilder.DictionaryFormat format, string inputDirname, string outputDirname, string encoding, bool normalizeEntry) Parameters Type Name Description DictionaryBuilder.DictionaryFormat format System.String inputDirname System.String outputDirname System.String encoding System.Boolean normalizeEntry | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.DictionaryFormat.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.DictionaryFormat.html",
    "title": "Enum DictionaryBuilder.DictionaryFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DictionaryBuilder.DictionaryFormat Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum DictionaryFormat Fields Name Description IPADIC UNIDIC"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CSVUtil.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CSVUtil.html",
    "title": "Class CSVUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CSVUtil Utility class for parsing CSV text Inheritance System.Object CSVUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CSVUtil Methods | Improve this Doc View Source Parse(String) Parse CSV line Declaration public static string[] Parse(string line) Parameters Type Name Description System.String line line containing csv-encoded data Returns Type Description System.String [] Array of values | Improve this Doc View Source QuoteEscape(String) Quote and escape input value for CSV Declaration public static string QuoteEscape(string original) Parameters Type Name Description System.String original Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsWriter.html",
    "title": "Class ConnectionCostsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCostsWriter Inheritance System.Object ConnectionCostsWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class ConnectionCostsWriter Constructors | Improve this Doc View Source ConnectionCostsWriter(Int32, Int32) Constructor for building. TODO: remove write access Declaration public ConnectionCostsWriter(int forwardSize, int backwardSize) Parameters Type Name Description System.Int32 forwardSize System.Int32 backwardSize Methods | Improve this Doc View Source Add(Int32, Int32, Int32) Declaration public void Add(int forwardId, int backwardId, int cost) Parameters Type Name Description System.Int32 forwardId System.Int32 backwardId System.Int32 cost | Improve this Doc View Source Write(String) Declaration public void Write(string baseDir) Parameters Type Name Description System.String baseDir"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsBuilder.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.ConnectionCostsBuilder.html",
    "title": "Class ConnectionCostsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCostsBuilder Inheritance System.Object ConnectionCostsBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class ConnectionCostsBuilder Methods | Improve this Doc View Source Build(String) Declaration public static ConnectionCostsWriter Build(string filename) Parameters Type Name Description System.String filename Returns Type Description ConnectionCostsWriter"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CharacterDefinitionWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.CharacterDefinitionWriter.html",
    "title": "Class CharacterDefinitionWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterDefinitionWriter Inheritance System.Object CharacterDefinitionWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CharacterDefinitionWriter Constructors | Improve this Doc View Source CharacterDefinitionWriter() Constructor for building. TODO: remove write access Declaration public CharacterDefinitionWriter() Methods | Improve this Doc View Source PutCharacterCategory(Int32, String) Put mapping from unicode code point to character class. Declaration public void PutCharacterCategory(int codePoint, string characterClassName) Parameters Type Name Description System.Int32 codePoint Code point. System.String characterClassName Character class name. | Improve this Doc View Source PutInvokeDefinition(String, Int32, Int32, Int32) Declaration public void PutInvokeDefinition(string characterClassName, int invoke, int group, int length) Parameters Type Name Description System.String characterClassName System.Int32 invoke System.Int32 group System.Int32 length | Improve this Doc View Source Write(String) Declaration public void Write(string baseDir) Parameters Type Name Description System.String baseDir"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.BinaryDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.Util.BinaryDictionaryWriter.html",
    "title": "Class BinaryDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDictionaryWriter Inheritance System.Object BinaryDictionaryWriter TokenInfoDictionaryWriter TokenInfoDictionaryWriter UnknownDictionaryWriter UnknownDictionaryWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public abstract class BinaryDictionaryWriter Constructors | Improve this Doc View Source BinaryDictionaryWriter(Type, Int32) Declaration public BinaryDictionaryWriter(Type implClazz, int size) Parameters Type Name Description System.Type implClazz System.Int32 size Fields | Improve this Doc View Source m_buffer Declaration protected ByteBuffer m_buffer Field Value Type Description ByteBuffer | Improve this Doc View Source m_implClazz Declaration protected readonly Type m_implClazz Field Value Type Description System.Type Methods | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public virtual void AddMapping(int sourceId, int wordId) Parameters Type Name Description System.Int32 sourceId System.Int32 wordId | Improve this Doc View Source GetBaseFileName(String) Declaration protected string GetBaseFileName(string baseDir) Parameters Type Name Description System.String baseDir Returns Type Description System.String | Improve this Doc View Source Put(String[]) Put the entry in map. Declaration public virtual int Put(string[] entry) Parameters Type Name Description System.String [] entry Returns Type Description System.Int32 Current position of buffer, which will be wordId of next entry. | Improve this Doc View Source SharedPrefix(String, String) Declaration public static int SharedPrefix(string left, string right) Parameters Type Name Description System.String left System.String right Returns Type Description System.Int32 | Improve this Doc View Source Write(String) Write dictionary in file Declaration public virtual void Write(string baseDir) Parameters Type Name Description System.String baseDir Remarks Dictionary format is: [Size of dictionary(int)], [entry:{left id(short)}{right id(short)}{word cost(short)}{length of pos info(short)}{pos info(char)}], [entry...], [entry...]..... Exceptions Type Condition System.IO.IOException If an I/O error occurs writing the dictionary files. | Improve this Doc View Source WriteDictionary(String) Declaration protected virtual void WriteDictionary(string filename) Parameters Type Name Description System.String filename | Improve this Doc View Source WritePosDict(String) Declaration protected virtual void WritePosDict(string filename) Parameters Type Name Description System.String filename | Improve this Doc View Source WriteTargetMap(String) Declaration protected virtual void WriteTargetMap(string filename) Parameters Type Name Description System.String filename"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.TokenAttributes Classes BaseFormAttribute Attribute for GetBaseForm() . InflectionAttribute Attribute for Kuromoji inflection data. PartOfSpeechAttribute Attribute for GetPartOfSpeech() . ReadingAttribute Attribute for Kuromoji reading data Interfaces IBaseFormAttribute Attribute for GetBaseForm() Note: depending on part of speech, this value may not be applicable, and will be null. IInflectionAttribute Attribute for Kuromoji inflection data. Note: in some cases this value may not be applicable, and will be null. IPartOfSpeechAttribute Attribute for GetPartOfSpeech() . IReadingAttribute Attribute for Kuromoji reading data Note: in some cases this value may not be applicable, and will be null."
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.ReadingAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.ReadingAttribute.html",
    "title": "Class ReadingAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReadingAttribute Attribute for Kuromoji reading data Inheritance System.Object Attribute ReadingAttribute Implements IReadingAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class ReadingAttribute : Attribute, IReadingAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetPronunciation() Declaration public virtual string GetPronunciation() Returns Type Description System.String | Improve this Doc View Source GetReading() Declaration public virtual string GetReading() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IReadingAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.PartOfSpeechAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.PartOfSpeechAttribute.html",
    "title": "Class PartOfSpeechAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PartOfSpeechAttribute Attribute for GetPartOfSpeech() . Inheritance System.Object Attribute PartOfSpeechAttribute Implements IPartOfSpeechAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class PartOfSpeechAttribute : Attribute, IPartOfSpeechAttribute, IAttribute Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source GetPartOfSpeech() Declaration public virtual string GetPartOfSpeech() Returns Type Description System.String | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) | Improve this Doc View Source SetToken(Token) Declaration public virtual void SetToken(Token token) Parameters Type Name Description Token token Implements IPartOfSpeechAttribute IAttribute"
  },
  "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IReadingAttribute.html": {
    "href": "api/Lucene.Net.Analysis.Kuromoji/Lucene.Net.Analysis.Ja.TokenAttributes.IReadingAttribute.html",
    "title": "Interface IReadingAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReadingAttribute Attribute for Kuromoji reading data Note: in some cases this value may not be applicable, and will be null. Inherited Members IAttribute.CopyTo(IAttribute) Namespace : Lucene.Net.Analysis.Ja.TokenAttributes Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public interface IReadingAttribute : IAttribute Methods | Improve this Doc View Source GetPronunciation() Declaration string GetPronunciation() Returns Type Description System.String | Improve this Doc View Source GetReading() Declaration string GetReading() Returns Type Description System.String | Improve this Doc View Source SetToken(Token) Declaration void SetToken(Token token) Parameters Type Name Description Token token"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArraySetExtensions.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArraySetExtensions.html",
    "title": "Class CharArraySetExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArraySetExtensions LUCENENET specific extension methods for CharArraySet Inheritance System.Object CharArraySetExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class CharArraySetExtensions Methods | Improve this Doc View Source Add(CharArraySet, Boolean) Add this System.Boolean into the set Declaration public static bool Add(this CharArraySet set, bool text) Parameters Type Name Description CharArraySet set System.Boolean text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Byte) Add this System.Byte into the set Declaration public static bool Add(this CharArraySet set, byte text) Parameters Type Name Description CharArraySet set System.Byte text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Char) Add this System.Char into the set Declaration public static bool Add(this CharArraySet set, char text) Parameters Type Name Description CharArraySet set System.Char text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Int16) Add this System.Int16 into the set Declaration public static bool Add(this CharArraySet set, short text) Parameters Type Name Description CharArraySet set System.Int16 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Int32) Add this System.Int32 into the set Declaration public static bool Add(this CharArraySet set, int text) Parameters Type Name Description CharArraySet set System.Int32 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, Int64) Add this System.Int64 into the set Declaration public static bool Add(this CharArraySet set, long text) Parameters Type Name Description CharArraySet set System.Int64 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, SByte) Add this System.SByte into the set Declaration [CLSCompliant(false)] public static bool Add(this CharArraySet set, sbyte text) Parameters Type Name Description CharArraySet set System.SByte text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, UInt16) Add this System.UInt16 into the set Declaration [CLSCompliant(false)] public static bool Add(this CharArraySet set, ushort text) Parameters Type Name Description CharArraySet set System.UInt16 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, UInt32) Add this System.UInt32 into the set Declaration [CLSCompliant(false)] public static bool Add(this CharArraySet set, uint text) Parameters Type Name Description CharArraySet set System.UInt32 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Add(CharArraySet, UInt64) Add this System.UInt64 into the set Declaration [CLSCompliant(false)] public static bool Add(this CharArraySet set, ulong text) Parameters Type Name Description CharArraySet set System.UInt64 text Returns Type Description System.Boolean true if text was added to the set; false if it already existed prior to this call | Improve this Doc View Source Contains(CharArraySet, Boolean) true if the System.Boolean is in the set Declaration public static bool Contains(this CharArraySet set, bool text) Parameters Type Name Description CharArraySet set System.Boolean text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Byte) true if the System.Byte is in the set Declaration public static bool Contains(this CharArraySet set, byte text) Parameters Type Name Description CharArraySet set System.Byte text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Char) true if the System.Char is in the set Declaration public static bool Contains(this CharArraySet set, char text) Parameters Type Name Description CharArraySet set System.Char text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Int16) true if the System.Int16 is in the set Declaration public static bool Contains(this CharArraySet set, short text) Parameters Type Name Description CharArraySet set System.Int16 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Int32) true if the System.Int32 is in the set Declaration public static bool Contains(this CharArraySet set, int text) Parameters Type Name Description CharArraySet set System.Int32 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, Int64) true if the System.Int64 is in the set Declaration public static bool Contains(this CharArraySet set, long text) Parameters Type Name Description CharArraySet set System.Int64 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, SByte) true if the System.SByte is in the set Declaration [CLSCompliant(false)] public static bool Contains(this CharArraySet set, sbyte text) Parameters Type Name Description CharArraySet set System.SByte text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, UInt16) true if the System.UInt16 is in the set Declaration [CLSCompliant(false)] public static bool Contains(this CharArraySet set, ushort text) Parameters Type Name Description CharArraySet set System.UInt16 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, UInt32) true if the System.UInt32 is in the set Declaration [CLSCompliant(false)] public static bool Contains(this CharArraySet set, uint text) Parameters Type Name Description CharArraySet set System.UInt32 text Returns Type Description System.Boolean | Improve this Doc View Source Contains(CharArraySet, UInt64) true if the System.UInt64 is in the set Declaration [CLSCompliant(false)] public static bool Contains(this CharArraySet set, ulong text) Parameters Type Name Description CharArraySet set System.UInt64 text Returns Type Description System.Boolean | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Byte>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<byte> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Byte > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Char>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<char> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Char > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Int16>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<short> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Int16 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Int32>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<int> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Int32 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<Int64>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration public static bool UnionWith(this CharArraySet set, IEnumerable<long> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.Int64 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<SByte>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration [CLSCompliant(false)] public static bool UnionWith(this CharArraySet set, IEnumerable<sbyte> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.SByte > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<UInt16>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration [CLSCompliant(false)] public static bool UnionWith(this CharArraySet set, IEnumerable<ushort> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.UInt16 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<UInt32>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration [CLSCompliant(false)] public static bool UnionWith(this CharArraySet set, IEnumerable<uint> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.UInt32 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call | Improve this Doc View Source UnionWith(CharArraySet, IEnumerable<UInt64>) Modifies the current CharArraySet to contain all elements that are present in itself, the specified collection, or both. Declaration [CLSCompliant(false)] public static bool UnionWith(this CharArraySet set, IEnumerable<ulong> other) Parameters Type Name Description CharArraySet set this CharArraySet System.Collections.Generic.IEnumerable < System.UInt64 > other The collection whose elements should be merged into the CharArraySet . Returns Type Description System.Boolean true if this CharArraySet changed as a result of the call"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMapExtensions.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMapExtensions.html",
    "title": "Class CharArrayMapExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMapExtensions LUCENENET specific extension methods for CharArrayMap Inheritance System.Object CharArrayMapExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public static class CharArrayMapExtensions Methods | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Boolean) true if the key System.Boolean is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, bool key) Parameters Type Name Description CharArrayMap <TValue> map System.Boolean key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Byte) true if the key System.Byte is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, byte key) Parameters Type Name Description CharArrayMap <TValue> map System.Byte key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Char) true if the key System.Char is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, char key) Parameters Type Name Description CharArrayMap <TValue> map System.Char key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Int16) true if the key System.Int16 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, short key) Parameters Type Name Description CharArrayMap <TValue> map System.Int16 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Int32) true if the key System.Int32 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, int key) Parameters Type Name Description CharArrayMap <TValue> map System.Int32 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, Int64) true if the key System.Int64 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, long key) Parameters Type Name Description CharArrayMap <TValue> map System.Int64 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, SByte) true if the key System.SByte is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration [CLSCompliant(false)] public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, sbyte key) Parameters Type Name Description CharArrayMap <TValue> map System.SByte key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, UInt16) true if the key System.UInt16 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration [CLSCompliant(false)] public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, ushort key) Parameters Type Name Description CharArrayMap <TValue> map System.UInt16 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, UInt32) true if the key System.UInt32 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration [CLSCompliant(false)] public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, uint key) Parameters Type Name Description CharArrayMap <TValue> map System.UInt32 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source ContainsKey<TValue>(CharArrayMap<TValue>, UInt64) true if the key System.UInt64 is in the Lucene.Net.Analysis.Util.CharArrayMap`1.KeySet ; otherwise false Declaration [CLSCompliant(false)] public static bool ContainsKey<TValue>(this CharArrayMap<TValue> map, ulong key) Parameters Type Name Description CharArrayMap <TValue> map System.UInt64 key Returns Type Description System.Boolean Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Boolean) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, bool text) Parameters Type Name Description CharArrayMap <TValue> map System.Boolean text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Byte) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, byte text) Parameters Type Name Description CharArrayMap <TValue> map System.Byte text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Char) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, char text) Parameters Type Name Description CharArrayMap <TValue> map System.Char text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Decimal) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, decimal text) Parameters Type Name Description CharArrayMap <TValue> map System.Decimal text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Double) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, double text) Parameters Type Name Description CharArrayMap <TValue> map System.Double text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Int16) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, short text) Parameters Type Name Description CharArrayMap <TValue> map System.Int16 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Int32) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, int text) Parameters Type Name Description CharArrayMap <TValue> map System.Int32 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Int64) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, long text) Parameters Type Name Description CharArrayMap <TValue> map System.Int64 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, SByte) returns the value of the mapping of the chars inside this text Declaration [CLSCompliant(false)] public static TValue Get<TValue>(this CharArrayMap<TValue> map, sbyte text) Parameters Type Name Description CharArrayMap <TValue> map System.SByte text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, Single) returns the value of the mapping of the chars inside this text Declaration public static TValue Get<TValue>(this CharArrayMap<TValue> map, float text) Parameters Type Name Description CharArrayMap <TValue> map System.Single text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, UInt16) returns the value of the mapping of the chars inside this text Declaration [CLSCompliant(false)] public static TValue Get<TValue>(this CharArrayMap<TValue> map, ushort text) Parameters Type Name Description CharArrayMap <TValue> map System.UInt16 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, UInt32) returns the value of the mapping of the chars inside this text Declaration [CLSCompliant(false)] public static TValue Get<TValue>(this CharArrayMap<TValue> map, uint text) Parameters Type Name Description CharArrayMap <TValue> map System.UInt32 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Get<TValue>(CharArrayMap<TValue>, UInt64) returns the value of the mapping of the chars inside this text Declaration [CLSCompliant(false)] public static TValue Get<TValue>(this CharArrayMap<TValue> map, ulong text) Parameters Type Name Description CharArrayMap <TValue> map System.UInt64 text Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Boolean, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, bool text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Boolean text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Byte, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, byte text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Byte text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Char, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, char text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Char text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Int16, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, short text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Int16 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Int32, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, int text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Int32 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, Int64, TValue) Add the given mapping. Declaration public static TValue Put<TValue>(this CharArrayMap<TValue> map, long text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.Int64 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, SByte, TValue) Add the given mapping. Declaration [CLSCompliant(false)] public static TValue Put<TValue>(this CharArrayMap<TValue> map, sbyte text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.SByte text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, UInt16, TValue) Add the given mapping. Declaration [CLSCompliant(false)] public static TValue Put<TValue>(this CharArrayMap<TValue> map, ushort text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.UInt16 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, UInt32, TValue) Add the given mapping. Declaration [CLSCompliant(false)] public static TValue Put<TValue>(this CharArrayMap<TValue> map, uint text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.UInt32 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source Put<TValue>(CharArrayMap<TValue>, UInt64, TValue) Add the given mapping. Declaration [CLSCompliant(false)] public static TValue Put<TValue>(this CharArrayMap<TValue> map, ulong text, TValue value) Parameters Type Name Description CharArrayMap <TValue> map System.UInt64 text TValue value Returns Type Description TValue Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Boolean, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<bool, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Boolean , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Byte, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<byte, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Byte , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Char, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<char, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Char , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int16, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<short, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Int16 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int32, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<int, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Int32 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<Int64, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<long, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.Int64 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<SByte, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<sbyte, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.SByte , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt16, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<ushort, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.UInt16 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt32, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<uint, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.UInt32 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IDictionary<UInt64, TValue>) This implementation enumerates over the specified dictionary 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IDictionary<ulong, TValue> dictionary) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IDictionary < System.UInt64 , TValue> dictionary A dictionary of values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Boolean, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<bool, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Boolean , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Byte, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<byte, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Byte , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Char, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<char, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Char , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int16, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<short, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Int16 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int32, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<int, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Int32 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<Int64, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<long, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.Int64 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<SByte, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<sbyte, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.SByte , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt16, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<ushort, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.UInt16 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt32, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<uint, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.UInt32 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source PutAll<TValue>(CharArrayMap<TValue>, IEnumerable<KeyValuePair<UInt64, TValue>>) This implementation enumerates over the specified collection 's entries, and calls this map's Put(String, TValue) operation once for each entry. Declaration [CLSCompliant(false)] public static void PutAll<TValue>(this CharArrayMap<TValue> map, IEnumerable<KeyValuePair<ulong, TValue>> collection) Parameters Type Name Description CharArrayMap <TValue> map this map System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair < System.UInt64 , TValue>> collection The values to add/update in the current map. Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Boolean, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, bool key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Boolean key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Byte, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, byte key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Byte key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Char, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, char key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Char key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Int16, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, short key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Int16 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Int32, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, int key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Int32 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, Int64, out TValue) Gets the value associated with the specified key. Declaration public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, long key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.Int64 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, SByte, out TValue) Gets the value associated with the specified key. Declaration [CLSCompliant(false)] public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, sbyte key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.SByte key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, UInt16, out TValue) Gets the value associated with the specified key. Declaration [CLSCompliant(false)] public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, ushort key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.UInt16 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, UInt32, out TValue) Gets the value associated with the specified key. Declaration [CLSCompliant(false)] public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, uint key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.UInt32 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue | Improve this Doc View Source TryGetValue<TValue>(CharArrayMap<TValue>, UInt64, out TValue) Gets the value associated with the specified key. Declaration [CLSCompliant(false)] public static bool TryGetValue<TValue>(this CharArrayMap<TValue> map, ulong key, out TValue value) Parameters Type Name Description CharArrayMap <TValue> map this map System.UInt64 key The key of the value to get. TValue value When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. Returns Type Description System.Boolean true if the CharArrayMap<TValue> contains an element with the specified key; otherwise, false . Type Parameters Name Description TValue"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMap.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharArrayMap.html",
    "title": "Class CharArrayMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharArrayMap Inheritance System.Object CharArrayMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CharArrayMap Methods | Improve this Doc View Source Copy<TValue>(LuceneVersion, IDictionary<String, TValue>) Returns a copy of the given map as a CharArrayMap<TValue> . If the given map is a CharArrayMap<TValue> the ignoreCase property will be preserved. Note: If you intend to create a copy of another CharArrayMap<TValue> where the LuceneVersion of the source map differs from its copy CharArrayMap(LuceneVersion, IDictionary<String, TValue>, Boolean) should be used instead. The Copy<TValue>(LuceneVersion, IDictionary<String, TValue>) will preserve the LuceneVersion of the source map if it is an instance of CharArrayMap<TValue> . Declaration public static CharArrayMap<TValue> Copy<TValue>(LuceneVersion matchVersion, IDictionary<string, TValue> map) Parameters Type Name Description LuceneVersion matchVersion compatibility match version see Version note above for details. This argument will be ignored if the given map is a CharArrayMap<TValue> . System.Collections.Generic.IDictionary < System.String , TValue> map a map to copy Returns Type Description CharArrayMap <TValue> a copy of the given map as a CharArrayMap<TValue> . If the given map is a CharArrayMap<TValue> the ignoreCase property as well as the matchVersion will be of the given map will be preserved. Type Parameters Name Description TValue | Improve this Doc View Source UnmodifiableMap<TValue>(CharArrayMap<TValue>) Returns an unmodifiable CharArrayMap<TValue> . This allows to provide unmodifiable views of internal map for \"read-only\" use. Declaration public static CharArrayMap<TValue> UnmodifiableMap<TValue>(CharArrayMap<TValue> map) Parameters Type Name Description CharArrayMap <TValue> map a map for which the unmodifiable map is returned. Returns Type Description CharArrayMap <TValue> an new unmodifiable CharArrayMap<TValue> . Type Parameters Name Description TValue Exceptions Type Condition System.ArgumentException if the given map is null ."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharacterUtils.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharacterUtils.html",
    "title": "Class CharacterUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterUtils CharacterUtils provides a unified interface to Character-related operations to implement backwards compatible character operations based on a LuceneVersion instance. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CharacterUtils Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CharacterUtils Methods | Improve this Doc View Source CodePointAt(ICharSequence, Int32) Declaration public abstract int CodePointAt(ICharSequence seq, int offset) Parameters Type Name Description ICharSequence seq System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(Char[], Int32, Int32) Returns the code point at the given index of the char array where only elements with index less than the limit are used. Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method mimics the behavior of Character.CodePointAt(char[], int) as it would have been available on a Java 1.4 JVM or on a later virtual machine version. Declaration public abstract int CodePointAt(char[] chars, int offset, int limit) Parameters Type Name Description System.Char [] chars a character array System.Int32 offset the offset to the char values in the chars array to be converted System.Int32 limit the index afer the last element that should be used to calculate codepoint. Returns Type Description System.Int32 the Unicode code point at the given index Exceptions Type Condition System.NullReferenceException if the array is null. System.IndexOutOfRangeException if the value offset is negative or not less than the length of the char array. | Improve this Doc View Source CodePointAt(String, Int32) Returns the code point at the given index of the ICharSequence . Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method mimics the behavior of Character.CodePointAt(char[], int) as it would have been available on a Java 1.4 JVM or on a later virtual machine version. Declaration public abstract int CodePointAt(string seq, int offset) Parameters Type Name Description System.String seq a character sequence System.Int32 offset the offset to the char values in the chars array to be converted Returns Type Description System.Int32 the Unicode code point at the given index Exceptions Type Condition System.NullReferenceException if the sequence is null. System.IndexOutOfRangeException if the value offset is negative or not less than the length of the character sequence. | Improve this Doc View Source CodePointCount(String) Return the number of characters in seq . Declaration public abstract int CodePointCount(string seq) Parameters Type Name Description System.String seq Returns Type Description System.Int32 | Improve this Doc View Source Fill(CharacterUtils.CharacterBuffer, TextReader) Convenience method which calls Fill(buffer, reader, buffer.Buffer.Length) . Declaration public virtual bool Fill(CharacterUtils.CharacterBuffer buffer, TextReader reader) Parameters Type Name Description CharacterUtils.CharacterBuffer buffer System.IO.TextReader reader Returns Type Description System.Boolean | Improve this Doc View Source Fill(CharacterUtils.CharacterBuffer, TextReader, Int32) Fills the CharacterUtils.CharacterBuffer with characters read from the given reader System.IO.TextReader . This method tries to read numChars characters into the CharacterUtils.CharacterBuffer , each call to fill will start filling the buffer from offset 0 up to numChars . In case code points can span across 2 java characters, this method may only fill numChars - 1 characters in order not to split in the middle of a surrogate pair, even if there are remaining characters in the System.IO.TextReader . Depending on the LuceneVersion passed to GetInstance(LuceneVersion) this method implements supplementary character awareness when filling the given buffer. For all LuceneVersion > 3.0 Fill(CharacterUtils.CharacterBuffer, TextReader, Int32) guarantees that the given CharacterUtils.CharacterBuffer will never contain a high surrogate character as the last element in the buffer unless it is the last available character in the reader. In other words, high and low surrogate pairs will always be preserved across buffer boarders. A return value of false means that this method call exhausted the reader, but there may be some bytes which have been read, which can be verified by checking whether buffer.Length > 0 . Declaration public abstract bool Fill(CharacterUtils.CharacterBuffer buffer, TextReader reader, int numChars) Parameters Type Name Description CharacterUtils.CharacterBuffer buffer the buffer to fill. System.IO.TextReader reader the reader to read characters from. System.Int32 numChars the number of chars to read Returns Type Description System.Boolean false if and only if reader.read returned -1 while trying to fill the buffer Exceptions Type Condition System.IO.IOException if the reader throws an System.IO.IOException . | Improve this Doc View Source GetInstance(LuceneVersion) Returns a CharacterUtils implementation according to the given LuceneVersion instance. Declaration public static CharacterUtils GetInstance(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion a version instance Returns Type Description CharacterUtils a CharacterUtils implementation according to the given LuceneVersion instance. | Improve this Doc View Source GetJava4Instance(LuceneVersion) Return a CharacterUtils instance compatible with Java 1.4. Declaration public static CharacterUtils GetJava4Instance(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion Returns Type Description CharacterUtils | Improve this Doc View Source NewCharacterBuffer(Int32) Creates a new CharacterUtils.CharacterBuffer and allocates a char[] of the given bufferSize. Declaration public static CharacterUtils.CharacterBuffer NewCharacterBuffer(int bufferSize) Parameters Type Name Description System.Int32 bufferSize the internal char buffer size, must be >= 2 Returns Type Description CharacterUtils.CharacterBuffer a new CharacterUtils.CharacterBuffer instance. | Improve this Doc View Source OffsetByCodePoints(Char[], Int32, Int32, Int32, Int32) Return the index within buf[start:start+count] which is by offset code points from index . Declaration public abstract int OffsetByCodePoints(char[] buf, int start, int count, int index, int offset) Parameters Type Name Description System.Char [] buf System.Int32 start System.Int32 count System.Int32 index System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source ToChars(Int32[], Int32, Int32, Char[], Int32) Converts a sequence of unicode code points to a sequence of .NET characters. Declaration public int ToChars(int[] src, int srcOff, int srcLen, char[] dest, int destOff) Parameters Type Name Description System.Int32 [] src System.Int32 srcOff System.Int32 srcLen System.Char [] dest System.Int32 destOff Returns Type Description System.Int32 the number of chars written to the destination buffer | Improve this Doc View Source ToCodePoints(Char[], Int32, Int32, Int32[], Int32) Converts a sequence of .NET characters to a sequence of unicode code points. Declaration public int ToCodePoints(char[] src, int srcOff, int srcLen, int[] dest, int destOff) Parameters Type Name Description System.Char [] src System.Int32 srcOff System.Int32 srcLen System.Int32 [] dest System.Int32 destOff Returns Type Description System.Int32 the number of code points written to the destination buffer | Improve this Doc View Source ToLower(Char[], Int32, Int32) Converts each unicode codepoint to lowerCase via ToLower(Int32) starting at the given offset. Declaration public virtual void ToLower(char[] buffer, int offset, int limit) Parameters Type Name Description System.Char [] buffer the char buffer to lowercase System.Int32 offset the offset to start at System.Int32 limit the max char in the buffer to lower case | Improve this Doc View Source ToUpper(Char[], Int32, Int32) Converts each unicode codepoint to UpperCase via ToUpper(Int32) starting at the given offset. Declaration public virtual void ToUpper(char[] buffer, int offset, int limit) Parameters Type Name Description System.Char [] buffer the char buffer to UPPERCASE System.Int32 offset the offset to start at System.Int32 limit the max char in the buffer to lower case"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharacterUtils.CharacterBuffer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.CharacterUtils.CharacterBuffer.html",
    "title": "Class CharacterUtils.CharacterBuffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterUtils.CharacterBuffer A simple IO buffer to use with Fill(CharacterUtils.CharacterBuffer, TextReader) . Inheritance System.Object CharacterUtils.CharacterBuffer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CharacterBuffer Properties | Improve this Doc View Source Buffer Returns the internal buffer Declaration public char[] Buffer { get; } Property Value Type Description System.Char [] the buffer | Improve this Doc View Source Length Return the length of the data in the internal buffer starting at Offset Declaration public int Length { get; } Property Value Type Description System.Int32 the length | Improve this Doc View Source Offset Returns the data offset in the internal buffer. Declaration public int Offset { get; } Property Value Type Description System.Int32 the offset Methods | Improve this Doc View Source Reset() Resets the CharacterBuffer. All internals are reset to its default values. Declaration public void Reset()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.AbstractAnalysisFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.AbstractAnalysisFactory.html",
    "title": "Class AbstractAnalysisFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAnalysisFactory Abstract parent class for analysis factories TokenizerFactory , TokenFilterFactory and CharFilterFactory . The typical lifecycle for a factory consumer is: Create factory via its constructor (or via XXXFactory.ForName) (Optional) If the factory uses resources such as files, Inform(IResourceLoader) is called to initialize those resources. Consumer calls create() to obtain instances. Inheritance System.Object AbstractAnalysisFactory CharFilterFactory TokenFilterFactory TokenizerFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class AbstractAnalysisFactory Constructors | Improve this Doc View Source AbstractAnalysisFactory(IDictionary<String, String>) Initialize this factory via a set of key-value pairs. Declaration protected AbstractAnalysisFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Fields | Improve this Doc View Source LUCENE_MATCH_VERSION_PARAM Declaration public const string LUCENE_MATCH_VERSION_PARAM = \"luceneMatchVersion\" Field Value Type Description System.String | Improve this Doc View Source m_luceneMatchVersion the luceneVersion arg Declaration protected readonly LuceneVersion m_luceneMatchVersion Field Value Type Description LuceneVersion Properties | Improve this Doc View Source IsExplicitLuceneMatchVersion Declaration public virtual bool IsExplicitLuceneMatchVersion { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source LuceneMatchVersion Declaration public LuceneVersion LuceneMatchVersion { get; } Property Value Type Description LuceneVersion | Improve this Doc View Source OriginalArgs Declaration public IDictionary<string, string> OriginalArgs { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > Methods | Improve this Doc View Source AssureMatchVersion() this method can be called in the Create(TextReader) or Create(TokenStream) methods, to inform user, that for this factory a m_luceneMatchVersion is required Declaration protected void AssureMatchVersion() | Improve this Doc View Source Get(IDictionary<String, String>, String, ICollection<String>) Declaration public virtual string Get(IDictionary<string, string> args, string name, ICollection<string> allowedValues) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues Returns Type Description System.String | Improve this Doc View Source Get(IDictionary<String, String>, String, ICollection<String>, String) Declaration public virtual string Get(IDictionary<string, string> args, string name, ICollection<string> allowedValues, string defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues System.String defaultVal Returns Type Description System.String | Improve this Doc View Source Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) Declaration public virtual string Get(IDictionary<string, string> args, string name, ICollection<string> allowedValues, string defaultVal, bool caseSensitive) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues System.String defaultVal System.Boolean caseSensitive Returns Type Description System.String | Improve this Doc View Source Get(IDictionary<String, String>, String, String) Declaration public virtual string Get(IDictionary<string, string> args, string name, string defaultVal = null) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.String defaultVal Returns Type Description System.String | Improve this Doc View Source GetBoolean(IDictionary<String, String>, String, Boolean) Declaration protected bool GetBoolean(IDictionary<string, string> args, string name, bool defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Boolean defaultVal Returns Type Description System.Boolean | Improve this Doc View Source GetChar(IDictionary<String, String>, String, Char) Declaration public virtual char GetChar(IDictionary<string, string> args, string name, char defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Char defaultVal Returns Type Description System.Char | Improve this Doc View Source GetClassArg() Declaration public virtual string GetClassArg() Returns Type Description System.String the string used to specify the concrete class name in a serialized representation: the class arg. If the concrete class name was not specified via a class arg, returns GetType().Name . | Improve this Doc View Source GetCulture(IDictionary<String, String>, String, CultureInfo) Gets a System.Globalization.CultureInfo value of the specified argument key name . To specify the invariant culture, pass the string \"invariant\" . LUCENENET specific Declaration protected CultureInfo GetCulture(IDictionary<string, string> args, string name, CultureInfo defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Globalization.CultureInfo defaultVal Returns Type Description System.Globalization.CultureInfo | Improve this Doc View Source GetInt32(IDictionary<String, String>, String, Int32) NOTE: This was getInt() in Lucene Declaration protected int GetInt32(IDictionary<string, string> args, string name, int defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Int32 defaultVal Returns Type Description System.Int32 | Improve this Doc View Source GetLines(IResourceLoader, String) Returns the resource's lines (with content treated as UTF-8) Declaration protected IList<string> GetLines(IResourceLoader loader, string resource) Parameters Type Name Description IResourceLoader loader System.String resource Returns Type Description System.Collections.Generic.IList < System.String > | Improve this Doc View Source GetPattern(IDictionary<String, String>, String) Compiles a pattern for the value of the specified argument key name Declaration protected Regex GetPattern(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source GetSet(IDictionary<String, String>, String) Returns whitespace- and/or comma-separated set of values, or null if none are found Declaration public virtual ISet<string> GetSet(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Collections.Generic.ISet < System.String > | Improve this Doc View Source GetSingle(IDictionary<String, String>, String, Single) NOTE: This was getFloat() in Lucene Declaration protected float GetSingle(IDictionary<string, string> args, string name, float defaultVal) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Single defaultVal Returns Type Description System.Single | Improve this Doc View Source GetSnowballWordSet(IResourceLoader, String, Boolean) Same as GetWordSet(IResourceLoader, String, Boolean) , except the input is in snowball format. Declaration protected CharArraySet GetSnowballWordSet(IResourceLoader loader, string wordFiles, bool ignoreCase) Parameters Type Name Description IResourceLoader loader System.String wordFiles System.Boolean ignoreCase Returns Type Description CharArraySet | Improve this Doc View Source GetWordSet(IResourceLoader, String, Boolean) Returns as CharArraySet from wordFiles, which can be a comma-separated list of filenames Declaration protected CharArraySet GetWordSet(IResourceLoader loader, string wordFiles, bool ignoreCase) Parameters Type Name Description IResourceLoader loader System.String wordFiles System.Boolean ignoreCase Returns Type Description CharArraySet | Improve this Doc View Source Require(IDictionary<String, String>, String) Declaration public virtual string Require(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.String | Improve this Doc View Source Require(IDictionary<String, String>, String, ICollection<String>) Declaration public virtual string Require(IDictionary<string, string> args, string name, ICollection<string> allowedValues) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues Returns Type Description System.String | Improve this Doc View Source Require(IDictionary<String, String>, String, ICollection<String>, Boolean) Declaration public virtual string Require(IDictionary<string, string> args, string name, ICollection<string> allowedValues, bool caseSensitive) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name System.Collections.Generic.ICollection < System.String > allowedValues System.Boolean caseSensitive Returns Type Description System.String | Improve this Doc View Source RequireBoolean(IDictionary<String, String>, String) Declaration protected bool RequireBoolean(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Boolean | Improve this Doc View Source RequireChar(IDictionary<String, String>, String) Declaration public virtual char RequireChar(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Char | Improve this Doc View Source RequireInt32(IDictionary<String, String>, String) NOTE: This was requireInt() in Lucene Declaration protected int RequireInt32(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Int32 | Improve this Doc View Source RequireSingle(IDictionary<String, String>, String) NOTE: This was requireFloat() in Lucene Declaration protected float RequireSingle(IDictionary<string, string> args, string name) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args System.String name Returns Type Description System.Single | Improve this Doc View Source SplitFileNames(String) Splits file names separated by comma character. File names can contain comma characters escaped by backslash '&apos; Declaration protected IList<string> SplitFileNames(string fileNames) Parameters Type Name Description System.String fileNames the string containing file names Returns Type Description System.Collections.Generic.IList < System.String > a list of file names with the escaping backslashed removed"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Tr.html",
    "title": "Namespace Lucene.Net.Analysis.Tr | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Tr Classes ApostropheFilter Strips all characters after an apostrophe (including the apostrophe itself). In Turkish, apostrophe is used to separate suffixes from proper names (continent, sea, river, lake, mountain, upland, proper names related to religion and mythology). This filter intended to be used before stem filters. For more information, see Role of Apostrophes in Turkish Information Retrieval ApostropheFilterFactory Factory for ApostropheFilter . <fieldType name=\"text_tr_lower_apostrophes\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ApostropheFilterFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType> TurkishAnalyzer Analyzer for Turkish. TurkishLowerCaseFilter Normalizes Turkish token text to lower case. Turkish and Azeri have unique casing behavior for some characters. This filter applies Turkish lowercase rules. For more information, see http://en.wikipedia.org/wiki/Turkish_dotted_and_dotless_I TurkishLowerCaseFilterFactory Factory for TurkishLowerCaseFilter . <fieldType name=\"text_trlwr\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.TurkishLowerCaseFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pl.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pl.html",
    "title": "Namespace Lucene.Net.Analysis.Pl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Pl Classes PolishAnalyzer Analyzer for Polish."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Analysis for indexing phonetic signatures (for sounds-alike search) For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. This module provides analysis components (using encoders from Apache Commons Codec ) that index and search phonetic signatures. Classes BeiderMorseFilter TokenFilter for Beider-Morse phonetic encoding. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BeiderMorseFilterFactory Factory for BeiderMorseFilter . <fieldType name=\"text_bm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.BeiderMorseFilterFactory\" nameType=\"GENERIC\" ruleType=\"APPROX\" concat=\"true\" languageSet=\"auto\" </filter> </analyzer> </fieldType> DoubleMetaphoneFilter Filter for DoubleMetaphone (supporting secondary codes) DoubleMetaphoneFilterFactory Factory for DoubleMetaphoneFilter . <fieldType name=\"text_dblmtphn\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DoubleMetaphoneFilterFactory\" inject=\"true\" maxCodeLength=\"4\"/> </analyzer> </fieldType> PhoneticFilter Create tokens for phonetic matches. See the Language namespace. PhoneticFilterFactory Factory for PhoneticFilter . Create tokens based on phonetic encoders from the Language namespace. This takes one required argument, \"encoder\", and the rest are optional: encoder required, one of \"DoubleMetaphone\", \"Metaphone\", \"Soundex\", \"RefinedSoundex\", \"Caverphone\" (v2.0), or \"ColognePhonetic\" (case insensitive). If encoder isn't one of these, it'll be resolved as a class name either by itself if it already contains a '.' or otherwise as in the same package as these others. inject (default=true) add tokens to the stream with the offset=0 maxCodeLength The maximum length of the phonetic codes, as defined by the encoder. If an encoder doesn't support this then specifying this is an error. <fieldType name=\"text_phonetic\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.PhoneticFilterFactory\" encoder=\"DoubleMetaphone\" inject=\"true\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.html",
    "title": "Namespace Lucene.Net.Analysis.Phonetic.Language | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Phonetic.Language Classes AbstractCaverphone Encodes a string into a Caverphone value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: This class is immutable and thread-safe. See Wikipedia - Caverphone Caverphone1 Encodes a string into a Caverphone 1.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 1.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 1.0 specification This class is immutable and thread-safe. since 1.5 Caverphone2 Encodes a string into a Caverphone 2.0 value. This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0 algorithm: See: Wikipedia - Caverphone See: Caverphone 2.0 specification This class is immutable and thread-safe. ColognePhonetic Encodes a string into a Cologne Phonetic value. DaitchMokotoffSoundex Encodes a string into a Daitch-Mokotoff Soundex value. DoubleMetaphone Encodes a string into a double metaphone value. This Implementation is based on the algorithm by Lawrence Philips . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. See Original Article See http://en.wikipedia.org/wiki/Metaphone DoubleMetaphone.DoubleMetaphoneResult Inner class for storing results, since there is the optional alternate encoding. MatchRatingApproachEncoder Match Rating Approach Phonetic Algorithm Developed by Western Airlines in 1977. This class is immutable and thread-safe. See: Wikipedia - Match Rating Approach since 1.8 Metaphone Encodes a string into a Metaphone value. Initial Java implementation by William B. Brogden. December, 1997 . Permission given by wbrogden for code to be used anywhere. Hanging on the Metaphone by Lawrence Philips in Computer Language of Dec. 1990, p 39. Note, that this does not match the algorithm that ships with PHP, or the algorithm found in the Perl implementations: Text:Metaphone-1.96 (broken link 4/30/2013) Text:Metaphone-1.96 (link checked 4/30/2013) They have had undocumented changes from the originally published algorithm. For more information, see CODEC-57 . This class is conditionally thread-safe. The instance field Lucene.Net.Analysis.Phonetic.Language.Metaphone.maxCodeLen is mutable MaxCodeLen but is not volatile, and accesses are not synchronized. If an instance of the class is shared between threads, the caller needs to ensure that suitable synchronization is used to ensure safe publication of the value between threads, and must not set MaxCodeLen after initial setup. Nysiis Encodes a string into a NYSIIS value. NYSIIS is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. RefinedSoundex Encodes a string into a Refined Soundex value. A refined soundex code is optimized for spell checking words. Soundex method originally developed by Margaret Odell and Robert Russell . This class is immutable and thread-safe. Soundex Encodes a string into a Soundex value. Soundex is an encoding used to relate similar names, but can also be used as a general purpose scheme to find word with similar phonemes. This class is thread-safe. Although not strictly immutable, the Lucene.Net.Analysis.Phonetic.Language.Soundex.maxLength field is not actually used. Interfaces IStringEncoder Defines common encoding methods for System.String encoders."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.IStringEncoder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.IStringEncoder.html",
    "title": "Interface IStringEncoder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IStringEncoder Defines common encoding methods for System.String encoders. Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IStringEncoder Methods | Improve this Doc View Source Encode(String) Encodes a System.String and returns a System.String . Declaration string Encode(string source) Parameters Type Name Description System.String source the System.String to encode Returns Type Description System.String the encoded System.String"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.DoubleMetaphoneResult.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.DoubleMetaphone.DoubleMetaphoneResult.html",
    "title": "Class DoubleMetaphone.DoubleMetaphoneResult | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleMetaphone.DoubleMetaphoneResult Inner class for storing results, since there is the optional alternate encoding. Inheritance System.Object DoubleMetaphone.DoubleMetaphoneResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Phonetic.Language Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public class DoubleMetaphoneResult Constructors | Improve this Doc View Source DoubleMetaphoneResult(Int32) Declaration public DoubleMetaphoneResult(int maxLength) Parameters Type Name Description System.Int32 maxLength Properties | Improve this Doc View Source Alternate Declaration public virtual string Alternate { get; } Property Value Type Description System.String | Improve this Doc View Source IsComplete Declaration public virtual bool IsComplete { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Primary Declaration public virtual string Primary { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Append(Char) Declaration public virtual void Append(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source Append(Char, Char) Declaration public virtual void Append(char primary, char alternate) Parameters Type Name Description System.Char primary System.Char alternate | Improve this Doc View Source Append(String) Declaration public virtual void Append(string value) Parameters Type Name Description System.String value | Improve this Doc View Source Append(String, String) Declaration public virtual void Append(string primary, string alternate) Parameters Type Name Description System.String primary System.String alternate | Improve this Doc View Source AppendAlternate(Char) Declaration public virtual void AppendAlternate(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source AppendAlternate(String) Declaration public virtual void AppendAlternate(string value) Parameters Type Name Description System.String value | Improve this Doc View Source AppendPrimary(Char) Declaration public virtual void AppendPrimary(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source AppendPrimary(String) Declaration public virtual void AppendPrimary(string value) Parameters Type Name Description System.String value"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.TokenInfoDictionaryBuilder.html",
    "title": "Class TokenInfoDictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenInfoDictionaryBuilder Inheritance System.Object TokenInfoDictionaryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class TokenInfoDictionaryBuilder Constructors | Improve this Doc View Source TokenInfoDictionaryBuilder(DictionaryBuilder.DictionaryFormat, String, Boolean) Declaration public TokenInfoDictionaryBuilder(DictionaryBuilder.DictionaryFormat format, string encoding, bool normalizeEntries) Parameters Type Name Description DictionaryBuilder.DictionaryFormat format System.String encoding System.Boolean normalizeEntries Methods | Improve this Doc View Source Build(String) Declaration public virtual TokenInfoDictionaryWriter Build(string dirname) Parameters Type Name Description System.String dirname Returns Type Description TokenInfoDictionaryWriter | Improve this Doc View Source BuildDictionary(IList<String>) Declaration public virtual TokenInfoDictionaryWriter BuildDictionary(IList<string> csvFiles) Parameters Type Name Description System.Collections.Generic.IList < System.String > csvFiles Returns Type Description TokenInfoDictionaryWriter | Improve this Doc View Source FormatEntry(String[]) IPADIC features 0 - surface 1 - left cost 2 - right cost 3 - word cost 4-9 - pos 10 - base form 11 - reading 12 - pronounciation UniDic features 0 - surface 1 - left cost 2 - right cost 3 - word cost 4-9 - pos 10 - base form reading 11 - base form 12 - surface form 13 - surface reading Declaration public virtual string[] FormatEntry(string[] features) Parameters Type Name Description System.String [] features Returns Type Description System.String []"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.html",
    "title": "Class DictionaryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryBuilder Inheritance System.Object DictionaryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class DictionaryBuilder Methods | Improve this Doc View Source Build(DictionaryBuilder.DictionaryFormat, String, String, String, Boolean) Declaration public static void Build(DictionaryBuilder.DictionaryFormat format, string inputDirname, string outputDirname, string encoding, bool normalizeEntry) Parameters Type Name Description DictionaryBuilder.DictionaryFormat format System.String inputDirname System.String outputDirname System.String encoding System.Boolean normalizeEntry | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.DictionaryFormat.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.DictionaryBuilder.DictionaryFormat.html",
    "title": "Enum DictionaryBuilder.DictionaryFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DictionaryBuilder.DictionaryFormat Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum DictionaryFormat Fields Name Description IPADIC UNIDIC"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.CSVUtil.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.CSVUtil.html",
    "title": "Class CSVUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CSVUtil Utility class for parsing CSV text Inheritance System.Object CSVUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CSVUtil Methods | Improve this Doc View Source Parse(String) Parse CSV line Declaration public static string[] Parse(string line) Parameters Type Name Description System.String line line containing csv-encoded data Returns Type Description System.String [] Array of values | Improve this Doc View Source QuoteEscape(String) Quote and escape input value for CSV Declaration public static string QuoteEscape(string original) Parameters Type Name Description System.String original Returns Type Description System.String"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.ConnectionCostsWriter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.ConnectionCostsWriter.html",
    "title": "Class ConnectionCostsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCostsWriter Inheritance System.Object ConnectionCostsWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class ConnectionCostsWriter Constructors | Improve this Doc View Source ConnectionCostsWriter(Int32, Int32) Constructor for building. TODO: remove write access Declaration public ConnectionCostsWriter(int forwardSize, int backwardSize) Parameters Type Name Description System.Int32 forwardSize System.Int32 backwardSize Methods | Improve this Doc View Source Add(Int32, Int32, Int32) Declaration public void Add(int forwardId, int backwardId, int cost) Parameters Type Name Description System.Int32 forwardId System.Int32 backwardId System.Int32 cost | Improve this Doc View Source Write(String) Declaration public void Write(string baseDir) Parameters Type Name Description System.String baseDir"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.ConnectionCostsBuilder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.ConnectionCostsBuilder.html",
    "title": "Class ConnectionCostsBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ConnectionCostsBuilder Inheritance System.Object ConnectionCostsBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class ConnectionCostsBuilder Methods | Improve this Doc View Source Build(String) Declaration public static ConnectionCostsWriter Build(string filename) Parameters Type Name Description System.String filename Returns Type Description ConnectionCostsWriter"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.CharacterDefinitionWriter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.CharacterDefinitionWriter.html",
    "title": "Class CharacterDefinitionWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharacterDefinitionWriter Inheritance System.Object CharacterDefinitionWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public sealed class CharacterDefinitionWriter Constructors | Improve this Doc View Source CharacterDefinitionWriter() Constructor for building. TODO: remove write access Declaration public CharacterDefinitionWriter() Methods | Improve this Doc View Source PutCharacterCategory(Int32, String) Put mapping from unicode code point to character class. Declaration public void PutCharacterCategory(int codePoint, string characterClassName) Parameters Type Name Description System.Int32 codePoint Code point. System.String characterClassName Character class name. | Improve this Doc View Source PutInvokeDefinition(String, Int32, Int32, Int32) Declaration public void PutInvokeDefinition(string characterClassName, int invoke, int group, int length) Parameters Type Name Description System.String characterClassName System.Int32 invoke System.Int32 group System.Int32 length | Improve this Doc View Source Write(String) Declaration public void Write(string baseDir) Parameters Type Name Description System.String baseDir"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.BinaryDictionaryWriter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Util.BinaryDictionaryWriter.html",
    "title": "Class BinaryDictionaryWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDictionaryWriter Inheritance System.Object BinaryDictionaryWriter TokenInfoDictionaryWriter UnknownDictionaryWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ja.Util Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public abstract class BinaryDictionaryWriter Constructors | Improve this Doc View Source BinaryDictionaryWriter(Type, Int32) Declaration public BinaryDictionaryWriter(Type implClazz, int size) Parameters Type Name Description System.Type implClazz System.Int32 size Fields | Improve this Doc View Source m_buffer Declaration protected ByteBuffer m_buffer Field Value Type Description ByteBuffer | Improve this Doc View Source m_implClazz Declaration protected readonly Type m_implClazz Field Value Type Description System.Type Methods | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public virtual void AddMapping(int sourceId, int wordId) Parameters Type Name Description System.Int32 sourceId System.Int32 wordId | Improve this Doc View Source GetBaseFileName(String) Declaration protected string GetBaseFileName(string baseDir) Parameters Type Name Description System.String baseDir Returns Type Description System.String | Improve this Doc View Source Put(String[]) Put the entry in map. Declaration public virtual int Put(string[] entry) Parameters Type Name Description System.String [] entry Returns Type Description System.Int32 Current position of buffer, which will be wordId of next entry. | Improve this Doc View Source SharedPrefix(String, String) Declaration public static int SharedPrefix(string left, string right) Parameters Type Name Description System.String left System.String right Returns Type Description System.Int32 | Improve this Doc View Source Write(String) Write dictionary in file Declaration public virtual void Write(string baseDir) Parameters Type Name Description System.String baseDir Remarks Dictionary format is: [Size of dictionary(int)], [entry:{left id(short)}{right id(short)}{word cost(short)}{length of pos info(short)}{pos info(char)}], [entry...], [entry...]..... Exceptions Type Condition System.IO.IOException If an I/O error occurs writing the dictionary files. | Improve this Doc View Source WriteDictionary(String) Declaration protected virtual void WriteDictionary(string filename) Parameters Type Name Description System.String filename | Improve this Doc View Source WritePosDict(String) Declaration protected virtual void WritePosDict(string filename) Parameters Type Name Description System.String filename | Improve this Doc View Source WriteTargetMap(String) Declaration protected virtual void WriteTargetMap(string filename) Parameters Type Name Description System.String filename"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.Ja.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ja.TokenAttributes Classes BaseFormAttribute Attribute for GetBaseForm() . InflectionAttribute Attribute for Kuromoji inflection data. PartOfSpeechAttribute Attribute for GetPartOfSpeech() . ReadingAttribute Attribute for Kuromoji reading data Interfaces IBaseFormAttribute Attribute for GetBaseForm() Note: depending on part of speech, this value may not be applicable, and will be null. IInflectionAttribute Attribute for Kuromoji inflection data. Note: in some cases this value may not be applicable, and will be null. IPartOfSpeechAttribute Attribute for GetPartOfSpeech() . IReadingAttribute Attribute for Kuromoji reading data Note: in some cases this value may not be applicable, and will be null."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.EnglishMinimalStemmer.html",
    "title": "Class EnglishMinimalStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnglishMinimalStemmer Minimal plural stemmer for English. This stemmer implements the \"S-Stemmer\" from How Effective Is Suffixing? Donna Harman. Inheritance System.Object EnglishMinimalStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class EnglishMinimalStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.html",
    "title": "Namespace Lucene.Net.Analysis.El | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.El Classes GreekAnalyzer Analyzer for the Greek language. Supports an external list of stopwords (words that will not be indexed at all). A default set of stopwords is used unless an alternative list is specified. You must specify the required LuceneVersion compatibility when creating GreekAnalyzer : As of 3.1, StandardFilter and GreekStemmer are used by default. As of 2.9, StopFilter preserves position increments NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . GreekLowerCaseFilter Normalizes token text to lower case, removes some Greek diacritics, and standardizes final sigma to sigma. You must specify the required LuceneVersion compatibility when creating GreekLowerCaseFilter : As of 3.1, supplementary characters are properly lowercased. GreekLowerCaseFilterFactory Factory for GreekLowerCaseFilter . <fieldType name=\"text_glc\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> </analyzer> </fieldType> GreekStemFilter A TokenFilter that applies GreekStemmer to stem Greek words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved by using either GreekLowerCaseFilter or ICUFoldingFilter before GreekStemFilter . @lucene.experimental GreekStemFilterFactory Factory for GreekStemFilter . <fieldType name=\"text_gstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.GreekLowerCaseFilterFactory\"/> <filter class=\"solr.GreekStemFilterFactory\"/> </analyzer> </fieldType> GreekStemmer A stemmer for Greek words, according to: Development of a Stemmer for the Greek Language. Georgios Ntais NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved with either GreekLowerCaseFilter or ICUFoldingFilter. @lucene.experimental"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.El.GreekStemmer.html",
    "title": "Class GreekStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GreekStemmer A stemmer for Greek words, according to: Development of a Stemmer for the Greek Language. Georgios Ntais NOTE: Input is expected to be casefolded for Greek (including folding of final sigma to sigma), and with diacritics removed. This can be achieved with either GreekLowerCaseFilter or ICUFoldingFilter. @lucene.experimental Inheritance System.Object GreekStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.El Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GreekStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stems a word contained in a leading portion of a char[] array. The word is passed through a number of rules that modify it's length. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s A char[] array that contains the word to be stemmed. System.Int32 len The length of the char[] array. Returns Type Description System.Int32 The new length of the stemmed word."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.html",
    "title": "Namespace Lucene.Net.Analysis.De | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.De Classes GermanAnalyzer Analyzer for German language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (word that will not be stemmed, but indexed). A default set of stopwords is used unless an alternative list is specified, but the exclusion list is empty by default. You must specify the required LuceneVersion compatibility when creating GermanAnalyzer: NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . GermanLightStemFilter A TokenFilter that applies GermanLightStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanLightStemFilterFactory Factory for GermanLightStemFilter . <fieldType name=\"text_delgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanLightStemFilterFactory\"/> </analyzer> </fieldType> GermanLightStemmer Light Stemmer for German. This stemmer implements the \"UniNE\" algorithm in: Light Stemming Approaches for the French, Portuguese, German and Hungarian Languages Jacques Savoy GermanMinimalStemFilter A TokenFilter that applies GermanMinimalStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanMinimalStemFilterFactory Factory for GermanMinimalStemFilter . <fieldType name=\"text_deminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanMinimalStemFilterFactory\"/> </analyzer> </fieldType> GermanMinimalStemmer Minimal Stemmer for German. This stemmer implements the following algorithm: Morphologie et recherche d'information Jacques Savoy. GermanNormalizationFilter Normalizes German characters according to the heuristics of the http://snowball.tartarus.org/algorithms/german2/stemmer.html German2 snowball algorithm . It allows for the fact that ä, ö and ü are sometimes written as ae, oe and ue. This is useful if you want this normalization without using the German2 stemmer, or perhaps no stemming at all. GermanNormalizationFilterFactory Factory for GermanNormalizationFilter . <fieldType name=\"text_denorm\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanNormalizationFilterFactory\"/> </analyzer> </fieldType> GermanStemFilter A TokenFilter that stems German words. It supports a table of words that should not be stemmed at all. The stemmer used can be changed at runtime after the filter object is created (as long as it is a GermanStemmer ). To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . GermanStemFilterFactory Factory for GermanStemFilter . <fieldType name=\"text_destem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.GermanStemFilterFactory\"/> </analyzer> </fieldType> GermanStemmer A stemmer for German words. The algorithm is based on the report \"A Fast and Simple Stemming Algorithm for German Words\" by Jörg Caumanns (joerg.caumanns at isst.fhg.de)."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.De.GermanStemmer.html",
    "title": "Class GermanStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GermanStemmer A stemmer for German words. The algorithm is based on the report \"A Fast and Simple Stemming Algorithm for German Words\" by Jörg Caumanns (joerg.caumanns at isst.fhg.de). Inheritance System.Object GermanStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.De Assembly : Lucene.Net.Analysis.Common.dll Syntax public class GermanStemmer Methods | Improve this Doc View Source Stem(String) Stemms the given term to an unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net/Lucene.Net.Util.StringHelper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.StringHelper.html",
    "title": "Class StringHelper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringHelper Methods for manipulating strings. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object StringHelper Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class StringHelper Fields | Improve this Doc View Source GOOD_FAST_HASH_SEED Pass this as the seed to Murmurhash3_x86_32(Byte[], Int32, Int32, Int32) . Declaration public static readonly int GOOD_FAST_HASH_SEED Field Value Type Description System.Int32 Properties | Improve this Doc View Source VersionComparer Returns a IComparer{string} over versioned strings such as X.YY.Z This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static IComparer<string> VersionComparer { get; } Property Value Type Description System.Collections.Generic.IComparer < System.String > Methods | Improve this Doc View Source BytesDifference(BytesRef, BytesRef) Compares two BytesRef , element by element, and returns the number of elements common to both arrays. Declaration public static int BytesDifference(BytesRef left, BytesRef right) Parameters Type Name Description BytesRef left The first BytesRef to compare. BytesRef right The second BytesRef to compare. Returns Type Description System.Int32 The number of common elements. | Improve this Doc View Source EndsWith(BytesRef, BytesRef) Returns true if the ref ends with the given suffix . Otherwise false . Declaration public static bool EndsWith(BytesRef ref, BytesRef suffix) Parameters Type Name Description BytesRef ref The BytesRef to test. BytesRef suffix The expected suffix Returns Type Description System.Boolean Returns true if the ref ends with the given suffix . Otherwise false . | Improve this Doc View Source Equals(String, String) Declaration public static bool Equals(string s1, string s2) Parameters Type Name Description System.String s1 System.String s2 Returns Type Description System.Boolean | Improve this Doc View Source Murmurhash3_x86_32(BytesRef, Int32) Returns the MurmurHash3_x86_32 hash. Original source/tests at https://github.com/yonik/java_util/ . Declaration public static int Murmurhash3_x86_32(BytesRef bytes, int seed) Parameters Type Name Description BytesRef bytes System.Int32 seed Returns Type Description System.Int32 | Improve this Doc View Source Murmurhash3_x86_32(Byte[], Int32, Int32, Int32) Returns the MurmurHash3_x86_32 hash. Original source/tests at https://github.com/yonik/java_util/ . Declaration public static int Murmurhash3_x86_32(byte[] data, int offset, int len, int seed) Parameters Type Name Description System.Byte [] data System.Int32 offset System.Int32 len System.Int32 seed Returns Type Description System.Int32 | Improve this Doc View Source StartsWith(BytesRef, BytesRef) Returns true if the ref starts with the given prefix . Otherwise false . Declaration public static bool StartsWith(BytesRef ref, BytesRef prefix) Parameters Type Name Description BytesRef ref The BytesRef to test. BytesRef prefix The expected prefix Returns Type Description System.Boolean Returns true if the ref starts with the given prefix . Otherwise false . Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Sorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Sorter.html",
    "title": "Class Sorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Sorter Base class for sorting algorithms implementations. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object Sorter InPlaceMergeSorter IntroSorter TimSorter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Sorter Constructors | Improve this Doc View Source Sorter() Sole constructor, used for inheritance. Declaration protected Sorter() Methods | Improve this Doc View Source Compare(Int32, Int32) Compare entries found in slots i and j . The contract for the returned value is the same as System.Collections.Generic.IComparer<T>.Compare(T, T) . Declaration protected abstract int Compare(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j Returns Type Description System.Int32 | Improve this Doc View Source Sort(Int32, Int32) Sort the slice which starts at from (inclusive) and ends at to (exclusive). Declaration public abstract void Sort(int from, int to) Parameters Type Name Description System.Int32 from System.Int32 to | Improve this Doc View Source Swap(Int32, Int32) Swap values at slots i and j . Declaration protected abstract void Swap(int i, int j) Parameters Type Name Description System.Int32 i System.Int32 j Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.SmallSingle.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SmallSingle.html",
    "title": "Class SmallSingle | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SmallSingle Floating point numbers smaller than 32 bits. NOTE: This was SmallFloat in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SmallSingle Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SmallSingle Methods | Improve this Doc View Source Byte315ToSingle(Byte) ByteToSingle(b, mantissaBits=3, zeroExponent=15) NOTE: This was byte315ToFloat() in Lucene Declaration public static float Byte315ToSingle(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source Byte52ToSingle(Byte) ByteToFloat(b, mantissaBits=5, zeroExponent=2) NOTE: This was byte52ToFloat() in Lucene Declaration public static float Byte52ToSingle(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source ByteToSingle(Byte, Int32, Int32) Converts an 8 bit System.Single to a 32 bit System.Single . NOTE: This was byteToFloat() in Lucene Declaration public static float ByteToSingle(byte b, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Byte b System.Int32 numMantissaBits System.Int32 zeroExp Returns Type Description System.Single | Improve this Doc View Source SByte315ToSingle(SByte) SByteToSingle(b, mantissaBits=3, zeroExponent=15) NOTE: This was byte315ToFloat() in Lucene Declaration [CLSCompliant(false)] public static float SByte315ToSingle(sbyte b) Parameters Type Name Description System.SByte b Returns Type Description System.Single | Improve this Doc View Source SByte52ToSingle(SByte) SByteToFloat(b, mantissaBits=5, zeroExponent=2) NOTE: This was byte52ToFloat() in Lucene Declaration [CLSCompliant(false)] public static float SByte52ToSingle(sbyte b) Parameters Type Name Description System.SByte b Returns Type Description System.Single | Improve this Doc View Source SByteToSingle(SByte, Int32, Int32) Converts an 8 bit System.Single to a 32 bit System.Single . NOTE: This was byteToFloat() in Lucene Declaration [CLSCompliant(false)] public static float SByteToSingle(sbyte b, int numMantissaBits, int zeroExp) Parameters Type Name Description System.SByte b System.Int32 numMantissaBits System.Int32 zeroExp Returns Type Description System.Single | Improve this Doc View Source SingleToByte(Single, Int32, Int32) Converts a 32 bit System.Single to an 8 bit System.Single . Values less than zero are all mapped to zero. Values are truncated (rounded down) to the nearest 8 bit value. Values between zero and the smallest representable value are rounded up. Declaration public static byte SingleToByte(float f, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Single f The 32 bit System.Single to be converted to an 8 bit System.Single ( System.Byte ). System.Int32 numMantissaBits The number of mantissa bits to use in the byte, with the remainder to be used in the exponent. System.Int32 zeroExp The zero-point in the range of exponent values. Returns Type Description System.Byte The 8 bit float representation. | Improve this Doc View Source SingleToByte315(Single) SingleToSByte((byte)b, mantissaBits=3, zeroExponent=15) smallest non-zero value = 5.820766E-10 largest value = 7.5161928E9 epsilon = 0.125 NOTE: This was floatToByte315() in Lucene Declaration public static byte SingleToByte315(float f) Parameters Type Name Description System.Single f Returns Type Description System.Byte | Improve this Doc View Source SingleToByte52(Single) SingleToByte(b, mantissaBits=5, zeroExponent=2) smallest nonzero value = 0.033203125 largest value = 1984.0 epsilon = 0.03125 NOTE: This was floatToByte52() in Lucene Declaration public static byte SingleToByte52(float f) Parameters Type Name Description System.Single f Returns Type Description System.Byte | Improve this Doc View Source SingleToSByte(Single, Int32, Int32) Converts a 32 bit System.Single to an 8 bit System.Single . Values less than zero are all mapped to zero. Values are truncated (rounded down) to the nearest 8 bit value. Values between zero and the smallest representable value are rounded up. NOTE: This was floatToByte() in Lucene Declaration [CLSCompliant(false)] public static sbyte SingleToSByte(float f, int numMantissaBits, int zeroExp) Parameters Type Name Description System.Single f The 32 bit System.Single to be converted to an 8 bit System.Single ( System.SByte ). System.Int32 numMantissaBits The number of mantissa bits to use in the byte, with the remainder to be used in the exponent. System.Int32 zeroExp The zero-point in the range of exponent values. Returns Type Description System.SByte The 8 bit float representation. | Improve this Doc View Source SingleToSByte315(Single) SingleToSByte(b, mantissaBits=3, zeroExponent=15) smallest non-zero value = 5.820766E-10 largest value = 7.5161928E9 epsilon = 0.125 NOTE: This was floatToByte315() in Lucene Declaration [CLSCompliant(false)] public static sbyte SingleToSByte315(float f) Parameters Type Name Description System.Single f Returns Type Description System.SByte | Improve this Doc View Source SingleToSByte52(Single) SingleToSByte(b, mantissaBits=5, zeroExponent=2) smallest nonzero value = 0.033203125 largest value = 1984.0 epsilon = 0.03125 NOTE: This was floatToByte52() in Lucene Declaration [CLSCompliant(false)] public static sbyte SingleToSByte52(float f) Parameters Type Name Description System.Single f Returns Type Description System.SByte Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.SloppyMath.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SloppyMath.html",
    "title": "Class SloppyMath | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SloppyMath Math functions that trade off accuracy for speed. Inheritance System.Object SloppyMath Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SloppyMath Methods | Improve this Doc View Source Asin(Double) Returns the arc sine of a value. The returned angle is in the range -pi /2 through pi /2. Error is around 1E-7. Special cases: If the argument is System.Double.NaN or its absolute value is greater than 1, then the result is System.Double.NaN . Declaration public static double Asin(double a) Parameters Type Name Description System.Double a the value whose arc sine is to be returned. Returns Type Description System.Double arc sine of the argument See Also System.Math.Asin(System.Double) | Improve this Doc View Source Cos(Double) Returns the trigonometric cosine of an angle. Error is around 1E-15. Special cases: If the argument is System.Double.NaN or an infinity, then the result is System.Double.NaN . Declaration public static double Cos(double a) Parameters Type Name Description System.Double a An angle, in radians. Returns Type Description System.Double The cosine of the argument. See Also System.Math.Cos(System.Double) | Improve this Doc View Source EarthDiameter(Double) Return an approximate value of the diameter of the earth at the given latitude, in kilometers. Declaration public static double EarthDiameter(double latitude) Parameters Type Name Description System.Double latitude Returns Type Description System.Double | Improve this Doc View Source Haversin(Double, Double, Double, Double) Returns the distance in kilometers between two points specified in decimal degrees (latitude/longitude). Declaration public static double Haversin(double lat1, double lon1, double lat2, double lon2) Parameters Type Name Description System.Double lat1 Latitude of the first point. System.Double lon1 Longitude of the first point. System.Double lat2 Latitude of the second point. System.Double lon2 Longitude of the second point. Returns Type Description System.Double distance in kilometers. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.SentinelInt32Set.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.SentinelInt32Set.html",
    "title": "Class SentinelInt32Set | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SentinelInt32Set A native System.Int32 hash-based set where one value is reserved to mean \"EMPTY\" internally. The space overhead is fairly low as there is only one power-of-two sized int[] to hold the values. The set is re-hashed when adding a value that would make it >= 75% full. Consider extending and over-riding Hash(Int32) if the values might be poor hash keys; Lucene docids should be fine. The internal fields are exposed publicly to enable more efficient use at the expense of better O-O principles. To iterate over the integers held in this set, simply use code like this: SentinelIntSet set = ... foreach (int v in set.keys) { if (v == set.EmptyVal) continue; //use v... } NOTE: This was SentinelIntSet in Lucene This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SentinelInt32Set Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SentinelInt32Set Constructors | Improve this Doc View Source SentinelInt32Set(Int32, Int32) Declaration public SentinelInt32Set(int size, int emptyVal) Parameters Type Name Description System.Int32 size The minimum number of elements this set should be able to hold without rehashing (i.e. the slots are guaranteed not to change). System.Int32 emptyVal The integer value to use for EMPTY. Properties | Improve this Doc View Source Count The number of integers in this set. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EmptyVal Declaration public int EmptyVal { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Keys A power-of-2 over-sized array holding the integers in the set along with empty values. Declaration public int[] Keys { get; set; } Property Value Type Description System.Int32 [] | Improve this Doc View Source RehashCount The count at which a rehash should be done. Declaration public int RehashCount { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Exists(Int32) Does this set contain the specified integer? Declaration public virtual bool Exists(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Boolean | Improve this Doc View Source Find(Int32) (internal) Returns the slot for this key, or -slot-1 if not found. Declaration public virtual int Find(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source GetSlot(Int32) (internal) Returns the slot for this key. Declaration public virtual int GetSlot(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Hash(Int32) (internal) Return the hash for the key. The default implementation just returns the key, which is not appropriate for general purpose use. Declaration public virtual int Hash(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Put(Int32) Puts this integer (key) in the set, and returns the slot index it was added to. It rehashes if adding it would make the set more than 75% full. Declaration public virtual int Put(int key) Parameters Type Name Description System.Int32 key Returns Type Description System.Int32 | Improve this Doc View Source Rehash() (internal) Rehashes by doubling key ( int[] ) and filling with the old values. Declaration public virtual void Rehash() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.html",
    "title": "Class RollingBuffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RollingBuffer LUCENENET specific class to allow referencing static members of RollingBuffer<T> without referencing its generic closing type. Inheritance System.Object RollingBuffer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class RollingBuffer"
  },
  "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.IResettable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RollingBuffer.IResettable.html",
    "title": "Interface RollingBuffer.IResettable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface RollingBuffer.IResettable Implement to reset an instance Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IResettable Methods | Improve this Doc View Source Reset() Declaration void Reset() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RefCount-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RefCount-1.html",
    "title": "Class RefCount<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RefCount<T> Manages reference counting for a given object. Extensions can override Release() to do custom logic when reference counting hits 0. Inheritance System.Object RefCount<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class RefCount<T> Type Parameters Name Description T Constructors | Improve this Doc View Source RefCount(T) Declaration public RefCount(T object) Parameters Type Name Description T object Fields | Improve this Doc View Source m_object Declaration protected readonly T m_object Field Value Type Description T Methods | Improve this Doc View Source DecRef() Decrements the reference counting of this object. When reference counting hits 0, calls Release() . Declaration public void DecRef() | Improve this Doc View Source Get() Declaration public T Get() Returns Type Description T | Improve this Doc View Source GetRefCount() Returns the current reference count. Declaration public int GetRefCount() Returns Type Description System.Int32 | Improve this Doc View Source IncRef() Increments the reference count. Calls to this method must be matched with calls to DecRef() . Declaration public void IncRef() | Improve this Doc View Source Release() Called when reference counting hits 0. By default this method does nothing, but extensions can override to e.g. release resources attached to object that is managed by this class. Declaration protected virtual void Release() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.RamUsageEstimator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.RamUsageEstimator.html",
    "title": "Class RamUsageEstimator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RamUsageEstimator Estimates the size (memory representation) of .NET objects. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object RamUsageEstimator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class RamUsageEstimator Fields | Improve this Doc View Source NUM_BYTES_ARRAY_HEADER Number of bytes to represent an array header (no content, but with alignments). Declaration public static readonly int NUM_BYTES_ARRAY_HEADER Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_BOOLEAN Declaration public const int NUM_BYTES_BOOLEAN = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_BYTE Declaration public const int NUM_BYTES_BYTE = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_CHAR Declaration public const int NUM_BYTES_CHAR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_DOUBLE Declaration public const int NUM_BYTES_DOUBLE = 8 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT16 NOTE: This was NUM_BYTES_SHORT in Lucene Declaration public const int NUM_BYTES_INT16 = 2 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT32 NOTE: This was NUM_BYTES_INT in Lucene Declaration public const int NUM_BYTES_INT32 = 4 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_INT64 NOTE: This was NUM_BYTES_LONG in Lucene Declaration public const int NUM_BYTES_INT64 = 8 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_ALIGNMENT A constant specifying the object alignment boundary inside the .NET runtime. Objects will always take a full multiple of this constant, possibly wasting some space. Declaration public static readonly int NUM_BYTES_OBJECT_ALIGNMENT Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_HEADER Number of bytes to represent an object header (no fields, no alignments). Declaration public static readonly int NUM_BYTES_OBJECT_HEADER Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_OBJECT_REF Number of bytes this .NET runtime uses to represent an object reference. Declaration public static readonly int NUM_BYTES_OBJECT_REF Field Value Type Description System.Int32 | Improve this Doc View Source NUM_BYTES_SINGLE NOTE: This was NUM_BYTES_FLOAT in Lucene Declaration public const int NUM_BYTES_SINGLE = 4 Field Value Type Description System.Int32 | Improve this Doc View Source ONE_GB One gigabyte bytes. Declaration public static readonly long ONE_GB Field Value Type Description System.Int64 | Improve this Doc View Source ONE_KB One kilobyte bytes. Declaration public static readonly long ONE_KB Field Value Type Description System.Int64 | Improve this Doc View Source ONE_MB One megabyte bytes. Declaration public static readonly long ONE_MB Field Value Type Description System.Int64 Methods | Improve this Doc View Source AlignObjectSize(Int64) Aligns an object size to be the next multiple of NUM_BYTES_OBJECT_ALIGNMENT . Declaration public static long AlignObjectSize(long size) Parameters Type Name Description System.Int64 size Returns Type Description System.Int64 | Improve this Doc View Source HumanReadableUnits(Int64) Returns size in human-readable units (GB, MB, KB or bytes). Declaration public static string HumanReadableUnits(long bytes) Parameters Type Name Description System.Int64 bytes Returns Type Description System.String | Improve this Doc View Source HumanReadableUnits(Int64, IFormatProvider) Returns size in human-readable units (GB, MB, KB or bytes). Declaration public static string HumanReadableUnits(long bytes, IFormatProvider df) Parameters Type Name Description System.Int64 bytes System.IFormatProvider df Returns Type Description System.String | Improve this Doc View Source HumanSizeOf(Object) Return a human-readable size of a given object. Declaration public static string HumanSizeOf(object object) Parameters Type Name Description System.Object object Returns Type Description System.String See Also SizeOf(Object) HumanReadableUnits(Int64) | Improve this Doc View Source ShallowSizeOf(Object) Estimates a \"shallow\" memory usage of the given object. For arrays, this will be the memory taken by array storage (no subreferences will be followed). For objects, this will be the memory taken by the fields. .NET object alignments are also applied. Declaration public static long ShallowSizeOf(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Int64 | Improve this Doc View Source ShallowSizeOfInstance(Type) Returns the shallow instance size in bytes an instance of the given class would occupy. This works with all conventional classes and primitive types, but not with arrays (the size then depends on the number of elements and varies from object to object). Declaration public static long ShallowSizeOfInstance(Type clazz) Parameters Type Name Description System.Type clazz Returns Type Description System.Int64 Exceptions Type Condition System.ArgumentException if clazz is an array class. See Also ShallowSizeOf(Object) | Improve this Doc View Source SizeOf(Boolean[]) Returns the size in bytes of the bool[] object. Declaration public static long SizeOf(bool[] arr) Parameters Type Name Description System.Boolean [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Byte[]) Returns the size in bytes of the byte[] object. Declaration public static long SizeOf(byte[] arr) Parameters Type Name Description System.Byte [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Char[]) Returns the size in bytes of the char[] object. Declaration public static long SizeOf(char[] arr) Parameters Type Name Description System.Char [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Double[]) Returns the size in bytes of the double[] object. Declaration public static long SizeOf(double[] arr) Parameters Type Name Description System.Double [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int16[]) Returns the size in bytes of the short[] object. Declaration public static long SizeOf(short[] arr) Parameters Type Name Description System.Int16 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int32[]) Returns the size in bytes of the int[] object. Declaration public static long SizeOf(int[] arr) Parameters Type Name Description System.Int32 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Int64[]) Returns the size in bytes of the long[] object. Declaration public static long SizeOf(long[] arr) Parameters Type Name Description System.Int64 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Object) Estimates the RAM usage by the given object. It will walk the object tree and sum up all referenced objects. Resource Usage: this method internally uses a set of every object seen during traversals so it does allocate memory (it isn't side-effect free). After the method exits, this memory should be GCed. Declaration public static long SizeOf(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(SByte[]) Returns the size in bytes of the sbyte[] object. Declaration [CLSCompliant(false)] public static long SizeOf(sbyte[] arr) Parameters Type Name Description System.SByte [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(Single[]) Returns the size in bytes of the float[] object. Declaration public static long SizeOf(float[] arr) Parameters Type Name Description System.Single [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt16[]) Returns the size in bytes of the ushort[] object. Declaration [CLSCompliant(false)] public static long SizeOf(ushort[] arr) Parameters Type Name Description System.UInt16 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt32[]) Returns the size in bytes of the uint[] object. Declaration [CLSCompliant(false)] public static long SizeOf(uint[] arr) Parameters Type Name Description System.UInt32 [] arr Returns Type Description System.Int64 | Improve this Doc View Source SizeOf(UInt64[]) Returns the size in bytes of the ulong[] object. Declaration [CLSCompliant(false)] public static long SizeOf(ulong[] arr) Parameters Type Name Description System.UInt64 [] arr Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object) See Also SizeOf(Object) ShallowSizeOf(Object) ShallowSizeOfInstance(Type)"
  },
  "api/Lucene.Net/Lucene.Net.Util.QueryBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.QueryBuilder.html",
    "title": "Class QueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryBuilder Creates queries from the Analyzer chain. Example usage: QueryBuilder builder = new QueryBuilder(analyzer); Query a = builder.CreateBooleanQuery(\"body\", \"just a test\"); Query b = builder.CreatePhraseQuery(\"body\", \"another test\"); Query c = builder.CreateMinShouldMatchQuery(\"body\", \"another test\", 0.5f); This can also be used as a subclass for query parsers to make it easier to interact with the analysis chain. Factory methods such as NewTermQuery(Term) are provided so that the generated queries can be customized. Inheritance System.Object QueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class QueryBuilder Constructors | Improve this Doc View Source QueryBuilder(Analyzer) Creates a new QueryBuilder using the given analyzer. Declaration public QueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Properties | Improve this Doc View Source Analyzer Gets or Sets the analyzer. Declaration public virtual Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source EnablePositionIncrements Gets or Sets whether position increments are enabled. When true , result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token. Default: true. Declaration public virtual bool EnablePositionIncrements { get; set; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source CreateBooleanQuery(String, String) Creates a boolean query from the query text. This is equivalent to CreateBooleanQuery(field, queryText, Occur.SHOULD) Declaration public virtual Query CreateBooleanQuery(string field, string queryText) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreateBooleanQuery(String, String, Occur) Creates a boolean query from the query text. Declaration public virtual Query CreateBooleanQuery(string field, string queryText, Occur operator) Parameters Type Name Description System.String field Field name System.String queryText Text to be passed to the analyzer. Occur operator Operator used for clauses between analyzer tokens. Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreateFieldQuery(Analyzer, Occur, String, String, Boolean, Int32) Creates a query from the analysis chain. Expert: this is more useful for subclasses such as queryparsers. If using this class directly, just use CreateBooleanQuery(String, String) and CreatePhraseQuery(String, String) . Declaration protected Query CreateFieldQuery(Analyzer analyzer, Occur operator, string field, string queryText, bool quoted, int phraseSlop) Parameters Type Name Description Analyzer analyzer Analyzer used for this query. Occur operator Default boolean operator used for this query. System.String field Field to create queries against. System.String queryText Text to be passed to the analysis chain. System.Boolean quoted true if phrases should be generated when terms occur at more than one position. System.Int32 phraseSlop Slop factor for phrase/multiphrase queries. Returns Type Description Query | Improve this Doc View Source CreateMinShouldMatchQuery(String, String, Single) Creates a minimum-should-match query from the query text. Declaration public virtual Query CreateMinShouldMatchQuery(string field, string queryText, float fraction) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. System.Single fraction of query terms [0..1] that should match Returns Type Description Query TermQuery or BooleanQuery , based on the analysis of queryText . | Improve this Doc View Source CreatePhraseQuery(String, String) Creates a phrase query from the query text. This is equivalent to CreatePhraseQuery(field, queryText, 0) Declaration public virtual Query CreatePhraseQuery(string field, string queryText) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. Returns Type Description Query TermQuery , BooleanQuery , PhraseQuery , or MultiPhraseQuery , based on the analysis of queryText . | Improve this Doc View Source CreatePhraseQuery(String, String, Int32) Creates a phrase query from the query text. Declaration public virtual Query CreatePhraseQuery(string field, string queryText, int phraseSlop) Parameters Type Name Description System.String field Field name. System.String queryText Text to be passed to the analyzer. System.Int32 phraseSlop number of other words permitted between words in query phrase Returns Type Description Query TermQuery , BooleanQuery , PhraseQuery , or MultiPhraseQuery , based on the analysis of queryText . | Improve this Doc View Source NewBooleanQuery(Boolean) Builds a new BooleanQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual BooleanQuery NewBooleanQuery(bool disableCoord) Parameters Type Name Description System.Boolean disableCoord Disable coord. Returns Type Description BooleanQuery New BooleanQuery instance. | Improve this Doc View Source NewMultiPhraseQuery() Builds a new MultiPhraseQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual MultiPhraseQuery NewMultiPhraseQuery() Returns Type Description MultiPhraseQuery New MultiPhraseQuery instance. | Improve this Doc View Source NewPhraseQuery() Builds a new PhraseQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual PhraseQuery NewPhraseQuery() Returns Type Description PhraseQuery New PhraseQuery instance. | Improve this Doc View Source NewTermQuery(Term) Builds a new TermQuery instance. This is intended for subclasses that wish to customize the generated queries. Declaration protected virtual Query NewTermQuery(Term term) Parameters Type Name Description Term term Term. Returns Type Description Query New TermQuery instance. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.html",
    "title": "Namespace Lucene.Net.Util.Packed | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Packed Classes AbstractAppendingInt64Buffer Common functionality shared by AppendingDeltaPackedInt64Buffer and MonotonicAppendingInt64Buffer . NOTE: This was AbstractAppendingLongBuffer in Lucene AbstractAppendingInt64Buffer.Iterator AbstractBlockPackedWriter AbstractPagedMutable<T> Base implementation for PagedMutable and PagedGrowableWriter . This is a Lucene.NET INTERNAL API, use at your own risk AppendingDeltaPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for the case where values are close to each other. NOTE: This was AppendingDeltaPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk AppendingPackedInt64Buffer Utility class to buffer a list of signed longs in memory. This class only supports appending and is optimized for non-negative numbers with a uniform distribution over a fixed (limited) range. NOTE: This was AppendingPackedLongBuffer in Lucene This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedReader Provides random access to a stream written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedReaderIterator Reader for sequences of System.Int64 s written with BlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk BlockPackedWriter A writer for large sequences of longs. The sequence is divided into fixed-size blocks and for each block, the difference between each value and the minimum value of the block is encoded using as few bits as possible. Memory usage of this class is proportional to the block size. Each block has an overhead between 1 and 10 bytes to store the minimum value and the number of bits per value of the block. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <Token, (MinValue)> Token: a byte ( WriteByte(Byte) ), first 7 bits are the number of bits per value ( bitsPerValue ). If the 8th bit is 1, then MinValue (see next) is 0 , otherwise MinValue and needs to be decoded MinValue: a zigzag-encoded variable-length System.Int64 ( WriteVInt64(Int64) ) whose value should be added to every int from the block to restore the original values Ints: If the number of bits per value is 0 , then there is nothing to decode and all ints are equal to MinValue. Otherwise: BlockSize packed ints ( PackedInt32s ) encoded on exactly bitsPerValue bits per value. They are the subtraction of the original values and MinValue This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoDecoder A decoder for an EliasFanoEncoder . This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoDocIdSet A DocIdSet in Elias-Fano encoding. This is a Lucene.NET INTERNAL API, use at your own risk EliasFanoEncoder Encode a non decreasing sequence of non negative whole numbers in the Elias-Fano encoding that was introduced in the 1970's by Peter Elias and Robert Fano. The Elias-Fano encoding is a high bits / low bits representation of a monotonically increasing sequence of numValues > 0 natural numbers x[i] 0 <= x[0] <= x[1] <= ... <= x[numValues-2] <= x[numValues-1] <= upperBound where upperBound > 0 is an upper bound on the last value. The Elias-Fano encoding uses less than half a bit per encoded number more than the smallest representation that can encode any monotone sequence with the same bounds. The lower L bits of each x[i] are stored explicitly and contiguously in the lower-bits array, with L chosen as ( Log() base 2): L = max(0, floor(log(upperBound/numValues))) The upper bits are stored in the upper-bits array as a sequence of unary-coded gaps ( x[-1] = 0 ): (x[i]/2 L) - (x[i-1]/2 L) The unary code encodes a natural number n by n 0 bits followed by a 1 bit: 0...01 . In the upper bits the total the number of 1 bits is numValues and the total number of 0 bits is: floor(x[numValues-1]/2 L) <= upperBound/(2 max(0, floor(log(upperBound/numValues)))) <= 2 numValues The Elias-Fano encoding uses at most 2 + Ceil(Log(upperBound/numValues)) bits per encoded number. With upperBound in these bounds ( p is an integer): 2 p < x[numValues-1] <= upperBound <= 2 *(p+1) the number of bits per encoded number is minimized. In this implementation the values in the sequence can be given as long , numValues = 0 and upperBound = 0 are allowed, and each of the upper and lower bit arrays should fit in a long[] . An index of positions of zero's in the upper bits is also built. this implementation is based on this article: Sebastiano Vigna, \"Quasi Succinct Indices\", June 19, 2012, sections 3, 4 and 9. Retrieved from http://arxiv.org/pdf/1206.4300 . The articles originally describing the Elias-Fano representation are: Peter Elias, \"Efficient storage and retrieval by content and address of static files\", J. Assoc. Comput. Mach., 21(2):246â€\"260, 1974. Robert M. Fano, \"On the number of bits required to implement an associative memory\", Memorandum 61, Computer Structures Group, Project MAC, MIT, Cambridge, Mass., 1971. This is a Lucene.NET INTERNAL API, use at your own risk GrowableWriter Implements PackedInt32s.Mutable , but grows the bit count of the underlying packed ints on-demand. Beware that this class will accept to set negative values but in order to do this, it will grow the number of bits per value to 64. This is a Lucene.NET INTERNAL API, use at your own risk MonotonicAppendingInt64Buffer Utility class to buffer signed longs in memory, which is optimized for the case where the sequence is monotonic, although it can encode any sequence of arbitrary longs. It only supports appending. NOTE: This was MonotonicAppendingLongBuffer in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk MonotonicBlockPackedReader Provides random access to a stream written with MonotonicBlockPackedWriter . This is a Lucene.NET INTERNAL API, use at your own risk MonotonicBlockPackedWriter A writer for large monotonically increasing sequences of positive System.Int64 s. The sequence is divided into fixed-size blocks and for each block, values are modeled after a linear function f: x → A × x + B. The block encodes deltas from the expected values computed from this function using as few bits as possible. Each block has an overhead between 6 and 14 bytes. Format: <BLock> BlockCount BlockCount: ⌈ ValueCount / BlockSize ⌉ Block: <Header, (Ints)> Header: <B, A, BitsPerValue> B: the B from f: x → A × x + B using a variable-length System.Int64 ( WriteVInt64(Int64) ) A: the A from f: x → A × x + B encoded using SingleToInt32Bits(Single) on 4 bytes ( WriteVInt32(Int32) ) BitsPerValue: a variable-length System.Int32 ( WriteVInt32(Int32) ) Ints: if BitsPerValue is 0 , then there is nothing to read and all values perfectly match the result of the function. Otherwise, these are the zigzag-encoded packed ( PackedInt32s ) deltas from the expected value (computed from the function) using exaclty BitsPerValue bits per value This is a Lucene.NET INTERNAL API, use at your own risk Packed64 Space optimized random access capable array of values with a fixed number of bits/value. Values are packed contiguously. The implementation strives to perform af fast as possible under the constraint of contiguous bits, by avoiding expensive operations. This comes at the cost of code clarity. Technical details: this implementation is a refinement of a non-branching version. The non-branching get and set methods meant that 2 or 4 atomics in the underlying array were always accessed, even for the cases where only 1 or 2 were needed. Even with caching, this had a detrimental effect on performance. Related to this issue, the old implementation used lookup tables for shifts and masks, which also proved to be a bit slower than calculating the shifts and masks on the fly. See https://issues.apache.org/jira/browse/LUCENE-4062 for details. PackedDataInput A DataInput wrapper to read unaligned, variable-length packed integers. This API is much slower than the PackedInt32s fixed-length API but can be convenient to save space. This is a Lucene.NET INTERNAL API, use at your own risk PackedDataOutput A DataOutput wrapper to write unaligned, variable-length packed integers. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s Simplistic compression for array of unsigned long values. Each value is >= 0 and <= a specified maximum value. The values are stored as packed ints, with each value consuming a fixed number of bits. NOTE: This was PackedInts in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.Format A format to write packed System.Int32 s. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.FormatAndBits Simple class that holds a format and a number of bits per value. PackedInt32s.Header Header identifying the structure of a packed integer array. PackedInt32s.Mutable A packed integer array that can be modified. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.MutableImpl PackedInt32s.NullReader A PackedInt32s.Reader which has all its values equal to 0 (bitsPerValue = 0). PackedInt32s.Reader A read-only random access array of positive integers. This is a Lucene.NET INTERNAL API, use at your own risk PackedInt32s.Writer A write-once Writer. This is a Lucene.NET INTERNAL API, use at your own risk PagedGrowableWriter A PagedGrowableWriter . This class slices data into fixed-size blocks which have independent numbers of bits per value and grow on-demand. You should use this class instead of the AbstractAppendingInt64Buffer related ones only when you need random write-access. Otherwise this class will likely be slower and less memory-efficient. This is a Lucene.NET INTERNAL API, use at your own risk PagedMutable A PagedMutable . This class slices data into fixed-size blocks which have the same number of bits per value. It can be a useful replacement for PackedInt32s.Mutable to store more than 2B values. This is a Lucene.NET INTERNAL API, use at your own risk Interfaces PackedInt32s.IDecoder A decoder for packed integers. PackedInt32s.IEncoder An encoder for packed integers. PackedInt32s.IReaderIterator Run-once iterator interface, to decode previously saved PackedInt32s ."
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.html",
    "title": "Class PackedInt32s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s Simplistic compression for array of unsigned long values. Each value is >= 0 and <= a specified maximum value. The values are stored as packed ints, with each value consuming a fixed number of bits. NOTE: This was PackedInts in Lucene. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public class PackedInt32s Fields | Improve this Doc View Source CODEC_NAME Declaration public static string CODEC_NAME Field Value Type Description System.String | Improve this Doc View Source COMPACT No memory overhead at all, but the returned implementation may be slow. Declaration public static float COMPACT Field Value Type Description System.Single | Improve this Doc View Source DEFAULT At most 20% memory overhead. Declaration public static float DEFAULT Field Value Type Description System.Single | Improve this Doc View Source DEFAULT_BUFFER_SIZE Default amount of memory to use for bulk operations. Declaration public static int DEFAULT_BUFFER_SIZE Field Value Type Description System.Int32 | Improve this Doc View Source FAST At most 50% memory overhead, always select a reasonably fast implementation. Declaration public static float FAST Field Value Type Description System.Single | Improve this Doc View Source FASTEST At most 700% memory overhead, always select a direct implementation. Declaration public static float FASTEST Field Value Type Description System.Single | Improve this Doc View Source VERSION_BYTE_ALIGNED Declaration public static int VERSION_BYTE_ALIGNED Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_CURRENT Declaration public static int VERSION_CURRENT Field Value Type Description System.Int32 | Improve this Doc View Source VERSION_START Declaration public static int VERSION_START Field Value Type Description System.Int32 Methods | Improve this Doc View Source BitsRequired(Int64) Returns how many bits are required to hold values up to and including maxValue . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int BitsRequired(long maxValue) Parameters Type Name Description System.Int64 maxValue The maximum value that should be representable. Returns Type Description System.Int32 The amount of bits needed to represent values from 0 to maxValue . | Improve this Doc View Source CheckVersion(Int32) Check the validity of a version number. Declaration public static void CheckVersion(int version) Parameters Type Name Description System.Int32 version | Improve this Doc View Source Copy(PackedInt32s.Reader, Int32, PackedInt32s.Mutable, Int32, Int32, Int32) Copy src[srcPos:srcPos+len] into dest[destPos:destPos+len] using at most mem bytes. Declaration public static void Copy(PackedInt32s.Reader src, int srcPos, PackedInt32s.Mutable dest, int destPos, int len, int mem) Parameters Type Name Description PackedInt32s.Reader src System.Int32 srcPos PackedInt32s.Mutable dest System.Int32 destPos System.Int32 len System.Int32 mem | Improve this Doc View Source FastestFormatAndBits(Int32, Int32, Single) Try to find the PackedInt32s.Format and number of bits per value that would restore from disk the fastest reader whose overhead is less than acceptableOverheadRatio . The acceptableOverheadRatio parameter makes sense for random-access PackedInt32s.Reader s. In case you only plan to perform sequential access on this stream later on, you should probably use COMPACT . If you don't know how many values you are going to write, use valueCount = -1 . Declaration public static PackedInt32s.FormatAndBits FastestFormatAndBits(int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue System.Single acceptableOverheadRatio Returns Type Description PackedInt32s.FormatAndBits | Improve this Doc View Source GetDecoder(PackedInt32s.Format, Int32, Int32) Get a PackedInt32s.IDecoder . Declaration public static PackedInt32s.IDecoder GetDecoder(PackedInt32s.Format format, int version, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format The format used to store packed System.Int32 s. System.Int32 version The compatibility version. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.IDecoder A decoder. | Improve this Doc View Source GetDirectReader(IndexInput) Construct a direct PackedInt32s.Reader from an IndexInput . this method is useful to restore data from streams which have been created using GetWriter(DataOutput, Int32, Int32, Single) . The returned reader will have very little memory overhead, but every call to Get(Int32) is likely to perform a disk seek. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReader(IndexInput in) Parameters Type Name Description IndexInput in The stream to read data from. Returns Type Description PackedInt32s.Reader A direct PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetDirectReaderNoHeader(IndexInput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Construct a direct PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . The returned reader will have very little memory overhead, but every call to Get(Int32) is likely to perform a disk seek. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReaderNoHeader(IndexInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue) Parameters Type Name Description IndexInput in The stream to read data from. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.Reader A direct PackedInt32s.Reader . | Improve this Doc View Source GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header) Expert: Construct a direct PackedInt32s.Reader from an IndexInput without reading metadata at the beginning of the stream. this method is useful to restore data when metadata has been previously read using ReadHeader(DataInput) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetDirectReaderNoHeader(IndexInput in, PackedInt32s.Header header) Parameters Type Name Description IndexInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Header header Metadata result from ReadHeader(DataInput) . Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. See Also ReadHeader(DataInput) | Improve this Doc View Source GetEncoder(PackedInt32s.Format, Int32, Int32) Get an PackedInt32s.IEncoder . Declaration public static PackedInt32s.IEncoder GetEncoder(PackedInt32s.Format format, int version, int bitsPerValue) Parameters Type Name Description PackedInt32s.Format format The format used to store packed System.Int32 s. System.Int32 version The compatibility version. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.IEncoder An encoder. | Improve this Doc View Source GetMutable(Int32, Int32, PackedInt32s.Format) Same as GetMutable(Int32, Int32, Single) with a pre-computed number of bits per value and format. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Mutable GetMutable(int valueCount, int bitsPerValue, PackedInt32s.Format format) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue PackedInt32s.Format format Returns Type Description PackedInt32s.Mutable | Improve this Doc View Source GetMutable(Int32, Int32, Single) Create a packed integer array with the given amount of values initialized to 0. The valueCount and the bitsPerValue cannot be changed after creation. All Mutables known by this factory are kept fully in RAM. Positive values of acceptableOverheadRatio will trade space for speed by selecting a faster but potentially less memory-efficient implementation. An acceptableOverheadRatio of COMPACT will make sure that the most memory-efficient implementation is selected whereas FASTEST will make sure that the fastest implementation is selected. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Mutable GetMutable(int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description System.Int32 valueCount The number of elements. System.Int32 bitsPerValue The number of bits available for any given value. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. Returns Type Description PackedInt32s.Mutable A mutable packed integer array. | Improve this Doc View Source GetReader(DataInput) Restore a PackedInt32s.Reader from a stream. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReader(DataInput in) Parameters Type Name Description DataInput in The stream to read data from. Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source GetReaderIterator(DataInput, Int32) Retrieve PackedInt32s as a PackedInt32s.IReaderIterator . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.IReaderIterator GetReaderIterator(DataInput in, int mem) Parameters Type Name Description DataInput in Positioned at the beginning of a stored packed int structure. System.Int32 mem How much memory the iterator is allowed to use to read-ahead (likely to speed up iteration). Returns Type Description PackedInt32s.IReaderIterator An iterator to access the values. Exceptions Type Condition System.IO.IOException If the structure could not be retrieved. | Improve this Doc View Source GetReaderIteratorNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32, Int32) Expert: Restore a PackedInt32s.IReaderIterator from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.IReaderIterator GetReaderIteratorNoHeader(DataInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue, int mem) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue the number of bits per value. System.Int32 mem How much memory the iterator is allowed to use to read-ahead (likely to speed up iteration). Returns Type Description PackedInt32s.IReaderIterator A PackedInt32s.IReaderIterator . See Also GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source GetReaderNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Restore a PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. This method is useful to restore data from streams which have been created using GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReaderNoHeader(DataInput in, PackedInt32s.Format format, int version, int valueCount, int bitsPerValue) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Format format The format used to serialize. System.Int32 version The version used to serialize the data. System.Int32 valueCount How many values the stream holds. System.Int32 bitsPerValue The number of bits per value. Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. See Also GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source GetReaderNoHeader(DataInput, PackedInt32s.Header) Expert: Restore a PackedInt32s.Reader from a stream without reading metadata at the beginning of the stream. this method is useful to restore data when metadata has been previously read using ReadHeader(DataInput) . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Reader GetReaderNoHeader(DataInput in, PackedInt32s.Header header) Parameters Type Name Description DataInput in The stream to read data from, positioned at the beginning of the packed values. PackedInt32s.Header header Metadata result from ReadHeader(DataInput) . Returns Type Description PackedInt32s.Reader A PackedInt32s.Reader . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. See Also ReadHeader(DataInput) | Improve this Doc View Source GetWriter(DataOutput, Int32, Int32, Single) Create a packed integer array writer for the given output, format, value count, and number of bits per value. The resulting stream will be long-aligned. this means that depending on the format which is used under the hoods, up to 63 bits will be wasted. An easy way to make sure that no space is lost is to always use a valueCount that is a multiple of 64. This method writes metadata to the stream, so that the resulting stream is sufficient to restore a PackedInt32s.Reader from it. You don't need to track valueCount or bitsPerValue by yourself. In case this is a problem, you should probably look at GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) . The acceptableOverheadRatio parameter controls how readers that will be restored from this stream trade space for speed by selecting a faster but potentially less memory-efficient implementation. An acceptableOverheadRatio of COMPACT will make sure that the most memory-efficient implementation is selected whereas FASTEST will make sure that the fastest implementation is selected. In case you are only interested in reading this stream sequentially later on, you should probably use COMPACT . This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Writer GetWriter(DataOutput out, int valueCount, int bitsPerValue, float acceptableOverheadRatio) Parameters Type Name Description DataOutput out The data output. System.Int32 valueCount The number of values. System.Int32 bitsPerValue The number of bits per value. System.Single acceptableOverheadRatio An acceptable overhead ratio per value. Returns Type Description PackedInt32s.Writer A PackedInt32s.Writer . Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetWriterNoHeader(DataOutput, PackedInt32s.Format, Int32, Int32, Int32) Expert: Create a packed integer array writer for the given output, format, value count, and number of bits per value. The resulting stream will be long-aligned. this means that depending on the format which is used, up to 63 bits will be wasted. An easy way to make sure that no space is lost is to always use a valueCount that is a multiple of 64. This method does not write any metadata to the stream, meaning that it is your responsibility to store it somewhere else in order to be able to recover data from the stream later on: format (using Id ), valueCount , bitsPerValue , VERSION_CURRENT . It is possible to start writing values without knowing how many of them you are actually going to write. To do this, just pass -1 as valueCount . On the other hand, for any positive value of valueCount , the returned writer will make sure that you don't write more values than expected and pad the end of stream with zeros in case you have written less than valueCount when calling Finish() . The mem parameter lets you control how much memory can be used to buffer changes in memory before flushing to disk. High values of mem are likely to improve throughput. On the other hand, if speed is not that important to you, a value of 0 will use as little memory as possible and should already offer reasonable throughput. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static PackedInt32s.Writer GetWriterNoHeader(DataOutput out, PackedInt32s.Format format, int valueCount, int bitsPerValue, int mem) Parameters Type Name Description DataOutput out The data output. PackedInt32s.Format format The format to use to serialize the values. System.Int32 valueCount The number of values. System.Int32 bitsPerValue The number of bits per value. System.Int32 mem How much memory (in bytes) can be used to speed up serialization. Returns Type Description PackedInt32s.Writer A PackedInt32s.Writer . See Also GetReaderIteratorNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32, Int32) GetReaderNoHeader(DataInput, PackedInt32s.Format, Int32, Int32, Int32) | Improve this Doc View Source MaxValue(Int32) Calculates the maximum unsigned long that can be expressed with the given number of bits. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static long MaxValue(int bitsPerValue) Parameters Type Name Description System.Int32 bitsPerValue The number of bits available for any given value. Returns Type Description System.Int64 The maximum value for the given bits. | Improve this Doc View Source ReadHeader(DataInput) Expert: reads only the metadata from a stream. This is useful to later restore a stream or open a direct reader via GetReaderNoHeader(DataInput, PackedInt32s.Header) or GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header) . Declaration public static PackedInt32s.Header ReadHeader(DataInput in) Parameters Type Name Description DataInput in The stream to read data. Returns Type Description PackedInt32s.Header Packed integer metadata. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. See Also GetReaderNoHeader(DataInput, PackedInt32s.Header) GetDirectReaderNoHeader(IndexInput, PackedInt32s.Header) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Writer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.Writer.html",
    "title": "Class PackedInt32s.Writer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.Writer A write-once Writer. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PackedInt32s.Writer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class Writer Constructors | Improve this Doc View Source Writer(DataOutput, Int32, Int32) Declaration protected Writer(DataOutput out, int valueCount, int bitsPerValue) Parameters Type Name Description DataOutput out System.Int32 valueCount System.Int32 bitsPerValue Fields | Improve this Doc View Source m_bitsPerValue Declaration protected readonly int m_bitsPerValue Field Value Type Description System.Int32 | Improve this Doc View Source m_out Declaration protected readonly DataOutput m_out Field Value Type Description DataOutput | Improve this Doc View Source m_valueCount Declaration protected readonly int m_valueCount Field Value Type Description System.Int32 Properties | Improve this Doc View Source BitsPerValue The number of bits per value. Declaration public int BitsPerValue { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Format The format used to serialize values. Declaration protected abstract PackedInt32s.Format Format { get; } Property Value Type Description PackedInt32s.Format | Improve this Doc View Source Ord Returns the current ord in the stream (number of values that have been written so far minus one). Declaration public abstract int Ord { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Add(Int64) Add a value to the stream. Declaration public abstract void Add(long v) Parameters Type Name Description System.Int64 v | Improve this Doc View Source Finish() Perform end-of-stream operations. Declaration public abstract void Finish() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Counter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Counter.html",
    "title": "Class Counter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Counter Simple counter class @lucene.internal This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Counter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Counter Methods | Improve this Doc View Source AddAndGet(Int64) Adds the given delta to the counters current value. Declaration public abstract long AddAndGet(long delta) Parameters Type Name Description System.Int64 delta The delta to add. Returns Type Description System.Int64 The counters updated value. | Improve this Doc View Source Get() Returns the counters current value. Declaration public abstract long Get() Returns Type Description System.Int64 The counters current value. | Improve this Doc View Source NewCounter() Returns a new counter. The returned counter is not thread-safe. Declaration public static Counter NewCounter() Returns Type Description Counter | Improve this Doc View Source NewCounter(Boolean) Returns a new counter. Declaration public static Counter NewCounter(bool threadSafe) Parameters Type Name Description System.Boolean threadSafe true if the returned counter can be used by multiple threads concurrently. Returns Type Description Counter A new counter. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Constants.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Constants.html",
    "title": "Class Constants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Constants Some useful constants. Inheritance System.Object Constants Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class Constants Fields | Improve this Doc View Source FREE_BSD True iff running on FreeBSD Declaration public static readonly bool FREE_BSD Field Value Type Description System.Boolean | Improve this Doc View Source LINUX True iff running on Linux. Declaration public static readonly bool LINUX Field Value Type Description System.Boolean | Improve this Doc View Source LUCENE_MAIN_VERSION this is the internal Lucene version, recorded into each segment. NOTE: we track per-segment version as a System.String with the \"X.Y\" format (no minor version), e.g. \"4.0\", \"3.1\", \"3.0\" . Alpha and Beta versions will have numbers like \"X.Y.0.Z\" , anything else is not allowed. This is done to prevent people from using indexes created with ALPHA/BETA versions with the released version. Declaration public static readonly string LUCENE_MAIN_VERSION Field Value Type Description System.String | Improve this Doc View Source LUCENE_VERSION This is the Lucene version for display purposes. Declaration public static readonly string LUCENE_VERSION Field Value Type Description System.String | Improve this Doc View Source MAC_OS_X True iff running on Mac OS X Declaration public static readonly bool MAC_OS_X Field Value Type Description System.Boolean | Improve this Doc View Source OS_ARCH Declaration public static readonly string OS_ARCH Field Value Type Description System.String | Improve this Doc View Source OS_NAME The value of System.Runtime.InteropServices.RuntimeInformation.OSDescription , excluding the version number. Declaration public static readonly string OS_NAME Field Value Type Description System.String | Improve this Doc View Source OS_VERSION Declaration public static readonly string OS_VERSION Field Value Type Description System.String | Improve this Doc View Source RUNTIME_IS_64BIT NOTE: This was JRE_IS_64BIT in Lucene Declaration public static readonly bool RUNTIME_IS_64BIT Field Value Type Description System.Boolean | Improve this Doc View Source RUNTIME_VENDOR NOTE: This was JAVA_VENDOR in Lucene Declaration public static readonly string RUNTIME_VENDOR Field Value Type Description System.String | Improve this Doc View Source RUNTIME_VERSION The value of the version parsed from System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription . NOTE: This was JAVA_VERSION in Lucene Declaration public static readonly string RUNTIME_VERSION Field Value Type Description System.String | Improve this Doc View Source SUN_OS True iff running on SunOS. Declaration public static readonly bool SUN_OS Field Value Type Description System.Boolean | Improve this Doc View Source WINDOWS True iff running on Windows. Declaration public static readonly bool WINDOWS Field Value Type Description System.Boolean Methods | Improve this Doc View Source MainVersionWithoutAlphaBeta() Returns a LUCENE_MAIN_VERSION without any ALPHA/BETA qualifier Used by test only! Declaration public static string MainVersionWithoutAlphaBeta() Returns Type Description System.String"
  },
  "api/Lucene.Net/Lucene.Net.Util.CommandLineUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CommandLineUtil.html",
    "title": "Class CommandLineUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommandLineUtil Class containing some useful methods used by command line tools Inheritance System.Object CommandLineUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class CommandLineUtil Methods | Improve this Doc View Source LoadDirectoryClass(String) Loads a specific Directory implementation. Declaration public static Type LoadDirectoryClass(string clazzName) Parameters Type Name Description System.String clazzName The name of the Directory class to load. Returns Type Description System.Type The Directory class loaded. Exceptions Type Condition System.TypeLoadException If the specified class cannot be found. | Improve this Doc View Source LoadFSDirectoryClass(String) Loads a specific FSDirectory implementation. Declaration public static Type LoadFSDirectoryClass(string clazzName) Parameters Type Name Description System.String clazzName The name of the FSDirectory class to load. Returns Type Description System.Type The FSDirectory class loaded. Exceptions Type Condition System.TypeLoadException If the specified class cannot be found. | Improve this Doc View Source NewFSDirectory(String, DirectoryInfo) Creates a specific FSDirectory instance starting from its class name. Declaration public static FSDirectory NewFSDirectory(string clazzName, DirectoryInfo dir) Parameters Type Name Description System.String clazzName The name of the FSDirectory class to load. System.IO.DirectoryInfo dir The System.IO.DirectoryInfo to be used as parameter constructor. Returns Type Description FSDirectory The new FSDirectory instance | Improve this Doc View Source NewFSDirectory(Type, DirectoryInfo) Creates a new specific FSDirectory instance. Declaration public static FSDirectory NewFSDirectory(Type clazz, DirectoryInfo dir) Parameters Type Name Description System.Type clazz The class of the object to be created System.IO.DirectoryInfo dir The System.IO.DirectoryInfo to be used as parameter constructor Returns Type Description FSDirectory The new FSDirectory instance. Exceptions Type Condition System.MissingMethodException If the Directory does not have a constructor that takes System.IO.DirectoryInfo . System.MemberAccessException If the class is abstract or an interface. System.TypeLoadException If the constructor does not have public visibility. System.Reflection.TargetInvocationException If the constructor throws an exception Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.CollectionUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CollectionUtil.html",
    "title": "Class CollectionUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CollectionUtil Methods for manipulating (sorting) collections. Sort methods work directly on the supplied lists and don't copy to/from arrays before/after. For medium size collections as used in the Lucene indexer that is much more efficient. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CollectionUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class CollectionUtil Methods | Improve this Doc View Source IntroSort<T>(IList<T>) Sorts the given random access System.Collections.Generic.IList<T> in natural order. This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list This System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source IntroSort<T>(IList<T>, IComparer<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the intro sort algorithm, but falls back to insertion sort for small lists. Declaration public static void IntroSort<T>(IList<T> list, IComparer<T> comp) Parameters Type Name Description System.Collections.Generic.IList <T> list This System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comp The System.Collections.Generic.IComparer<T> to use for the sort. Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>) Sorts the given System.Collections.Generic.IList<T> in natural order. This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list This System.Collections.Generic.IList<T> Type Parameters Name Description T | Improve this Doc View Source TimSort<T>(IList<T>, IComparer<T>) Sorts the given System.Collections.Generic.IList<T> using the System.Collections.Generic.IComparer<T> . This method uses the Tim sort algorithm, but falls back to binary sort for small lists. Declaration public static void TimSort<T>(IList<T> list, IComparer<T> comp) Parameters Type Name Description System.Collections.Generic.IList <T> list this System.Collections.Generic.IList<T> System.Collections.Generic.IComparer <T> comp The System.Collections.Generic.IComparer<T> to use for the sort. Type Parameters Name Description T Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.BytesRefIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.BytesRefIterator.html",
    "title": "Class BytesRefIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BytesRefIterator LUCENENET specific class to make the syntax of creating an empty IBytesRefIterator the same as it was in Lucene. Example: var iter = BytesRefIterator.Empty; Inheritance System.Object BytesRefIterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class BytesRefIterator Fields | Improve this Doc View Source EMPTY Singleton BytesRefIterator that iterates over 0 BytesRefs. Declaration public static readonly IBytesRefIterator EMPTY Field Value Type Description IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.ExceptionExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.ExceptionExtensions.html",
    "title": "Class ExceptionExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ExceptionExtensions Extensions to the System.Exception class to allow for adding and retrieving suppressed exceptions, like you can do in Java. Inheritance System.Object ExceptionExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class ExceptionExtensions Fields | Improve this Doc View Source SUPPRESSED_EXCEPTIONS_KEY Declaration public static readonly string SUPPRESSED_EXCEPTIONS_KEY Field Value Type Description System.String Methods | Improve this Doc View Source AddSuppressed(Exception, Exception) Declaration public static void AddSuppressed(this Exception e, Exception exception) Parameters Type Name Description System.Exception e System.Exception exception | Improve this Doc View Source GetSuppressed(Exception) Declaration public static Exception[] GetSuppressed(this Exception e) Parameters Type Name Description System.Exception e Returns Type Description System.Exception [] | Improve this Doc View Source GetSuppressedAsList(Exception) Declaration public static IList<Exception> GetSuppressedAsList(this Exception e) Parameters Type Name Description System.Exception e Returns Type Description System.Collections.Generic.IList < System.Exception >"
  },
  "api/Lucene.Net/Lucene.Net.Support.Equatable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Equatable.html",
    "title": "Class Equatable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Equatable A set of utilities uses for easily wrapping .NET collections so they can be used with System.Object.Equals(System.Object) System.Object.GetHashCode() , and System.Object.ToString() behavior similar to that in Java. The equality checking of collections will recursively compare the values of all elements and any nested collections. The same goes for using System.Object.ToString() - the string is based on the values in the collection and any nested collections. Do note this has a side-effect that any custom System.Object.Equals(System.Object) System.Object.GetHashCode() , and System.Object.ToString() implementations for types that implement System.Collections.Generic.IList<T> (including arrays), System.Collections.Generic.ISet<T> , or System.Collections.Generic.IDictionary<TKey, TValue> will be ignored. Inheritance System.Object Equatable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Equatable Methods | Improve this Doc View Source Wrap<T>(IList<T>) Wraps any System.Collections.Generic.IList<T> (including T[] ) with a lightweight EquatableList<T> class that changes the behavior of System.Object.Equals(System.Object) System.Object.GetHashCode() , and System.Object.ToString() so they consider all values in the System.Collections.Generic.IList<T> or any nested collections when comparing or making strings to represent them. No other behavior is changed - only these 3 methods. Note that if the list is already an EquatableList<T> or a subclass of it, this method simply returns the provided list . Declaration public static IList<T> Wrap<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list Any System.Collections.Generic.IList<T> (including T[] ) Returns Type Description System.Collections.Generic.IList <T> An EquatableList<T> that wraps the provided list , or the value of list unmodified if it already is an EquatableList<T> Type Parameters Name Description T the type of element | Improve this Doc View Source Wrap<T>(ISet<T>) Wraps any System.Collections.Generic.ISet<T> with a lightweight EquatableSet<T> class that changes the behavior of System.Object.Equals(System.Object) System.Object.GetHashCode() , and System.Object.ToString() so they consider all values in the System.Collections.Generic.ISet<T> or any nested collections when comparing or making strings to represent them. No other behavior is changed - only these 3 methods. Note that if the set is already an EquatableSet<T> or a subclass of it, this method simply returns the provided set . Declaration public static ISet<T> Wrap<T>(ISet<T> set) Parameters Type Name Description System.Collections.Generic.ISet <T> set Any System.Collections.Generic.IList<T> (including T[] ) Returns Type Description System.Collections.Generic.ISet <T> An EquatableSet<T> that wraps the provided set , or the value of set unmodified if it already is an EquatableSet<T> Type Parameters Name Description T the type of element"
  },
  "api/Lucene.Net/Lucene.Net.Support.EnumerableExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.EnumerableExtensions.html",
    "title": "Class EnumerableExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EnumerableExtensions .NET Specific Helper Extensions for IEnumerable Inheritance System.Object EnumerableExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class EnumerableExtensions Methods | Improve this Doc View Source InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Enumerates a sequence in pairs Declaration public static IEnumerable<TOut> InPairs<T, TOut>(this IEnumerable<T> source, Func<T, T, TOut> join) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> source An System.Collections.Generic.IEnumerable<T> to enumerate in pairs. System.Func <T, T, TOut> join A function that is invoked for each pair of elements. Returns Type Description System.Collections.Generic.IEnumerable <TOut> A new System.Collections.Generic.IEnumerable<T> containing the results from each pair. Type Parameters Name Description T The type of the elements of source . TOut The type of the elements returned from join . Remarks In the case of an uneven amount of elements, the list call to join pases default(T) as the second parameter. Exceptions Type Condition System.ArgumentNullException source or join is null ."
  },
  "api/Lucene.Net/Lucene.Net.Support.DictionaryExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.DictionaryExtensions.html",
    "title": "Class DictionaryExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryExtensions Inheritance System.Object DictionaryExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class DictionaryExtensions Methods | Improve this Doc View Source EntrySet<TKey, TValue>(IDictionary<TKey, TValue>) Declaration public static ISet<KeyValuePair<TKey, TValue>> EntrySet<TKey, TValue>(this IDictionary<TKey, TValue> dict) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dict Returns Type Description System.Collections.Generic.ISet < System.Collections.Generic.KeyValuePair <TKey, TValue>> Type Parameters Name Description TKey TValue | Improve this Doc View Source Load(IDictionary<String, String>, Stream) Loads properties from the specified System.IO.Stream . The encoding is ISO8859-1. Declaration public static void Load(this IDictionary<string, string> dict, Stream input) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > dict This dictionary. System.IO.Stream input The System.IO.Stream . Remarks The Properties file is interpreted according to the following rules: Empty lines are ignored. Lines starting with either a \"#\" or a \"!\" are comment lines and are ignored. A backslash at the end of the line escapes the following newline character (\"\\r\", \"\\n\", \"\\r\\n\"). If there's a whitespace after the backslash it will just escape that whitespace instead of concatenating the lines. This does not apply to comment lines. A property line consists of the key, the space between the key and the value, and the value. The key goes up to the first whitespace, \"=\" or \":\" that is not escaped. The space between the key and the value contains either one whitespace, one \"=\" or one \":\" and any number of additional whitespaces before and after that character. The value starts with the first character after the space between the key and the value. Following escape sequences are recognized: \"\\ \", \"\\\", \"\\r\", \"\\n\", \"!\", \"#\", \"\\t\", \"\\b\", \"\\f\", and \"\\uXXXX\" (unicode character). This method is to mimic and interoperate with the Properties class in Java, which is essentially a string dictionary that natively supports importing and exporting to this format. Exceptions Type Condition System.IO.IOException If error occurs during reading from the System.IO.Stream . | Improve this Doc View Source Put<TKey, TValue>(IDictionary<TKey, TValue>, TKey, TValue) Declaration public static TValue Put<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue value) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dict TKey key TValue value Returns Type Description TValue Type Parameters Name Description TKey TValue | Improve this Doc View Source PutAll<TKey, TValue>(IDictionary<TKey, TValue>, IEnumerable<KeyValuePair<TKey, TValue>>) Declaration public static void PutAll<TKey, TValue>(this IDictionary<TKey, TValue> dict, IEnumerable<KeyValuePair<TKey, TValue>> kvps) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dict System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> kvps Type Parameters Name Description TKey TValue | Improve this Doc View Source Store(IDictionary<String, String>, Stream, String) Stores the mappings in this Properties to the specified System.IO.Stream , putting the specified comment at the beginning. The output from this method is suitable for being read by the Load(IDictionary<String, String>, Stream) method. Declaration public static void Store(this IDictionary<string, string> dict, Stream output, string comments) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > dict This dictionary. System.IO.Stream output The output System.IO.Stream to write to. System.String comments The comments to put at the beginning. Exceptions Type Condition System.IO.IOException If an error occurs during the write to the System.IO.Stream . System.InvalidCastException If the key or value of a mapping is not a System.String ."
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.AcceptStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanPositionCheckQuery.AcceptStatus.html",
    "title": "Enum SpanPositionCheckQuery.AcceptStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum SpanPositionCheckQuery.AcceptStatus Return value for AcceptPosition(Spans) . Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax protected enum AcceptStatus Fields Name Description NO Indicates the match should be rejected NO_AND_ADVANCE Indicates the match should be rejected, and the enumeration should advance to the next document. YES Indicates the match should be accepted Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Lambda.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Lambda.html",
    "title": "Class Lambda | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lambda The lambda (λ w ) parameter in information-based models. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lambda LambdaDF LambdaTTF Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Lambda Constructors | Improve this Doc View Source Lambda() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Lambda() Methods | Improve this Doc View Source CalculateLambda(BasicStats) Computes the lambda parameter. Declaration public abstract float CalculateLambda(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source Explain(BasicStats) Explains the lambda parameter. Declaration public abstract Explanation Explain(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description Explanation | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the lambda formula. Since the original paper is not very clear on this matter, and also uses the DFR naming scheme incorrectly, the codes here were chosen arbitrarily. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also IBSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadFunction.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Payloads.PayloadFunction.html",
    "title": "Class PayloadFunction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadFunction An abstract class that defines a way for Payload*Query instances to transform the cumulative effects of payload scores for a document. @lucene.experimental this class and its derivations are experimental and subject to change Inheritance System.Object PayloadFunction AveragePayloadFunction MaxPayloadFunction MinPayloadFunction Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Payloads Assembly : Lucene.Net.dll Syntax public abstract class PayloadFunction Methods | Improve this Doc View Source CurrentScore(Int32, String, Int32, Int32, Int32, Single, Single) Calculate the score up to this point for this doc and field Declaration public abstract float CurrentScore(int docId, string field, int start, int end, int numPayloadsSeen, float currentScore, float currentPayloadScore) Parameters Type Name Description System.Int32 docId The current doc System.String field The field System.Int32 start The start position of the matching Span System.Int32 end The end position of the matching Span System.Int32 numPayloadsSeen The number of payloads seen so far System.Single currentScore The current score so far System.Single currentPayloadScore The score for the current payload Returns Type Description System.Single The new current Score See Also Spans | Improve this Doc View Source DocScore(Int32, String, Int32, Single) Calculate the final score for all the payloads seen so far for this doc/field Declaration public abstract float DocScore(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId The current doc System.String field The current field System.Int32 numPayloadsSeen The total number of payloads seen on this document System.Single payloadScore The raw score for those payloads Returns Type Description System.Single The final score for the payloads | Improve this Doc View Source Equals(Object) Declaration public abstract override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source Explain(Int32, String, Int32, Single) Declaration public virtual Explanation Explain(int docId, string field, int numPayloadsSeen, float payloadScore) Parameters Type Name Description System.Int32 docId System.String field System.Int32 numPayloadsSeen System.Single payloadScore Returns Type Description Explanation | Improve this Doc View Source GetHashCode() Declaration public abstract override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Extension Methods Number.IsNumber(Object) See Also PayloadTermQuery"
  },
  "api/Lucene.Net/Lucene.Net.Search.Occur.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Occur.html",
    "title": "Enum Occur | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Occur Specifies how clauses are to occur in matching documents. Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public enum Occur Fields Name Description MUST Use this operator for clauses that must appear in the matching documents. MUST_NOT Use this operator for clauses that must not appear in the matching documents. Note that it is not possible to search for queries that only consist of a MUST_NOT clause. SHOULD Use this operator for clauses that should appear in the matching documents. For a BooleanQuery with no MUST clauses one or more SHOULD clauses must match a document for the BooleanQuery to match. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery.html",
    "title": "Class NumericRangeQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQuery LUCENENET specific class to provide access to static factory metods of NumericRangeQuery<T> without referring to its genereic closing type. Inheritance System.Object NumericRangeQuery Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class NumericRangeQuery Methods | Improve this Doc View Source NewDoubleRange(String, Int32, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Double range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Double.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeQuery<double> NewDoubleRange(string field, int precisionStep, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Double > | Improve this Doc View Source NewDoubleRange(String, Nullable<Double>, Nullable<Double>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Double range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Double.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Double.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. Declaration public static NumericRangeQuery<double> NewDoubleRange(string field, double? min, double? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Double > min System.Nullable < System.Double > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Double > | Improve this Doc View Source NewInt32Range(String, Int32, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Int32 range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeQuery<int> NewInt32Range(string field, int precisionStep, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int32 > | Improve this Doc View Source NewInt32Range(String, Nullable<Int32>, Nullable<Int32>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Int32 range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newIntRange() in Lucene Declaration public static NumericRangeQuery<int> NewInt32Range(string field, int? min, int? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int32 > min System.Nullable < System.Int32 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int32 > | Improve this Doc View Source NewInt64Range(String, Int32, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Int64 range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeQuery<long> NewInt64Range(string field, int precisionStep, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int64 > | Improve this Doc View Source NewInt64Range(String, Nullable<Int64>, Nullable<Int64>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Int64 range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newLongRange() in Lucene Declaration public static NumericRangeQuery<long> NewInt64Range(string field, long? min, long? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Int64 > min System.Nullable < System.Int64 > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Int64 > | Improve this Doc View Source NewSingleRange(String, Int32, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Single range using the given Lucene.Net.Search.NumericRangeQuery`1.precisionStep . You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Single.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeQuery<float> NewSingleRange(string field, int precisionStep, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Int32 precisionStep System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Single > | Improve this Doc View Source NewSingleRange(String, Nullable<Single>, Nullable<Single>, Boolean, Boolean) Factory that creates a NumericRangeQuery<T> , that queries a System.Single range using the default Lucene.Net.Search.NumericRangeQuery`1.precisionStep PRECISION_STEP_DEFAULT (4). You can have half-open ranges (which are in fact </<= or >/>= queries) by setting the min or max value to null . System.Single.NaN will never match a half-open range, to hit NaN use a query with min == max == System.Single.NaN . By setting inclusive to false , it will match all documents excluding the bounds, with inclusive on, the boundaries are hits, too. NOTE: This was newFloatRange() in Lucene Declaration public static NumericRangeQuery<float> NewSingleRange(string field, float? min, float? max, bool minInclusive, bool maxInclusive) Parameters Type Name Description System.String field System.Nullable < System.Single > min System.Nullable < System.Single > max System.Boolean minInclusive System.Boolean maxInclusive Returns Type Description NumericRangeQuery < System.Single >"
  },
  "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.RewriteMethod.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.MultiTermQuery.RewriteMethod.html",
    "title": "Class MultiTermQuery.RewriteMethod | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermQuery.RewriteMethod Abstract class that defines how the query is rewritten. Inheritance System.Object MultiTermQuery.RewriteMethod DocTermOrdsRewriteMethod FieldCacheRewriteMethod SpanRewriteMethod TermCollectingRewrite<Q> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class RewriteMethod Methods | Improve this Doc View Source GetTermsEnum(MultiTermQuery, Terms, AttributeSource) Returns the MultiTermQuery s TermsEnum Declaration protected virtual TermsEnum GetTermsEnum(MultiTermQuery query, Terms terms, AttributeSource atts) Parameters Type Name Description MultiTermQuery query Terms terms AttributeSource atts Returns Type Description TermsEnum See Also GetTermsEnum ( Terms , AttributeSource ) | Improve this Doc View Source Rewrite(IndexReader, MultiTermQuery) Declaration public abstract Query Rewrite(IndexReader reader, MultiTermQuery query) Parameters Type Name Description IndexReader reader MultiTermQuery query Returns Type Description Query Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparerSource.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparerSource.html",
    "title": "Class FieldComparerSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparerSource Provides a FieldComparer for custom field sorting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparerSource BlockJoinComparerSource Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparerSource Methods | Improve this Doc View Source NewComparer(String, Int32, Int32, Boolean) Creates a comparer for the field in the given index. Declaration public abstract FieldComparer NewComparer(string fieldname, int numHits, int sortPos, bool reversed) Parameters Type Name Description System.String fieldname Name of the field to create comparer for. System.Int32 numHits System.Int32 sortPos System.Boolean reversed Returns Type Description FieldComparer FieldComparer . Exceptions Type Condition System.IO.IOException If an error occurs reading the index. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldComparer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldComparer.html",
    "title": "Class FieldComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldComparer Inheritance System.Object FieldComparer FieldComparer<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class FieldComparer Properties | Improve this Doc View Source Item[Int32] Return the actual value in the slot. LUCENENET NOTE: This was value(int) in Lucene. Declaration public abstract IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot The value Property Value Type Description System.IComparable Value in this slot Methods | Improve this Doc View Source Compare(Int32, Int32) Compare hit at slot1 with hit at slot2 . Declaration public abstract int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 first slot to compare System.Int32 slot2 second slot to compare Returns Type Description System.Int32 any N < 0 if slot2 's value is sorted after slot1 , any N > 0 if the slot2 's value is sorted before slot1 and 0 if they are equal | Improve this Doc View Source CompareBottom(Int32) Compare the bottom of the queue with this doc. This will only invoked after setBottom has been called. This should return the same result as Compare(Int32, Int32) as if bottom were slot1 and the new document were slot 2. For a search that hits many results, this method will be the hotspot (invoked by far the most frequently). Declaration public abstract int CompareBottom(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. | Improve this Doc View Source CompareTop(Int32) Compare the top value with this doc. This will only invoked after SetTopValue(Object) has been called. This should return the same result as Compare(Int32, Int32) as if topValue were slot1 and the new document were slot 2. This is only called for searches that use SearchAfter (deep paging). Declaration public abstract int CompareTop(int doc) Parameters Type Name Description System.Int32 doc Doc that was hit Returns Type Description System.Int32 Any N < 0 if the doc's value is sorted after the bottom entry (not competitive), any N > 0 if the doc's value is sorted before the bottom entry and 0 if they are equal. | Improve this Doc View Source CompareValues(Object, Object) Declaration public abstract int CompareValues(object first, object second) Parameters Type Name Description System.Object first System.Object second Returns Type Description System.Int32 | Improve this Doc View Source Copy(Int32, Int32) This method is called when a new hit is competitive. You should copy any state associated with this document that will be required for future comparisons, into the specified slot. Declaration public abstract void Copy(int slot, int doc) Parameters Type Name Description System.Int32 slot Which slot to copy the hit to System.Int32 doc DocID relative to current reader | Improve this Doc View Source SetBottom(Int32) Set the bottom slot, ie the \"weakest\" (sorted last) entry in the queue. When CompareBottom(Int32) is called, you should compare against this slot. This will always be called before CompareBottom(Int32) . Declaration public abstract void SetBottom(int slot) Parameters Type Name Description System.Int32 slot The currently weakest (sorted last) slot in the queue | Improve this Doc View Source SetNextReader(AtomicReaderContext) Set a new AtomicReaderContext . All subsequent docIDs are relative to the current reader (you must add docBase if you need to map it to a top-level docID). Declaration public abstract FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Current reader context Returns Type Description FieldComparer The comparer to use for this segment; most comparers can just return \"this\" to reuse the same comparer across segments Exceptions Type Condition System.IO.IOException if there is a low-level IO error | Improve this Doc View Source SetScorer(Scorer) Sets the Scorer to use in case a document's score is needed. Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Scorer instance that you should use to obtain the current hit's score, if necessary. | Improve this Doc View Source SetTopValue(Object) Record the top value, for future calls to CompareTop(Int32) . This is only called for searches that use SearchAfter (deep paging), and is called before any calls to SetNextReader(AtomicReaderContext) . Declaration public abstract void SetTopValue(object value) Parameters Type Name Description System.Object value Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.IParser.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.IParser.html",
    "title": "Interface FieldCache.IParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface FieldCache.IParser Marker interface as super-interface to all parsers. It is used to specify a custom parser to SortField(String, FieldCache.IParser) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IParser Methods | Improve this Doc View Source TermsEnum(Terms) Pulls a TermsEnum from the given Terms . This method allows certain parsers to filter the actual TermsEnum before the field cache is filled. Declaration TermsEnum TermsEnum(Terms terms) Parameters Type Name Description Terms terms The Terms instance to create the TermsEnum from. Returns Type Description TermsEnum A possibly filtered TermsEnum instance, this method must not return null . Exceptions Type Condition System.IO.IOException If an System.IO.IOException occurs Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int64s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int64s.html",
    "title": "Class FieldCache.Int64s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Int64s Field values as 64-bit signed long integers NOTE: This was Longs in Lucene Inheritance System.Object FieldCache.Int64s Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int64s Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int64s EMPTY Field Value Type Description FieldCache.Int64s Methods | Improve this Doc View Source Get(Int32) Return an System.Int64 representation of this field's value. Declaration public abstract long Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int32s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int32s.html",
    "title": "Class FieldCache.Int32s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Int32s Field values as 32-bit signed integers NOTE: This was Ints in Lucene Inheritance System.Object FieldCache.Int32s Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int32s Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int32s EMPTY Field Value Type Description FieldCache.Int32s Methods | Improve this Doc View Source Get(Int32) Return an System.Int32 representation of this field's value. Declaration public abstract int Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int16s.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.FieldCache.Int16s.html",
    "title": "Class FieldCache.Int16s | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldCache.Int16s Field values as 16-bit signed shorts NOTE: This was Shorts in Lucene Inheritance System.Object FieldCache.Int16s Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Int16s Fields | Improve this Doc View Source EMPTY Zero value for every document Declaration public static readonly FieldCache.Int16s EMPTY Field Value Type Description FieldCache.Int16s Methods | Improve this Doc View Source Get(Int32) Return a System.Int16 representation of this field's value. Declaration public abstract short Get(int docID) Parameters Type Name Description System.Int32 docID Returns Type Description System.Int16 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.BulkScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.BulkScorer.html",
    "title": "Class BulkScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BulkScorer This class is used to score a range of documents at once, and is returned by GetBulkScorer(AtomicReaderContext, Boolean, IBits) . Only queries that have a more optimized means of scoring across a range of documents need to override this. Otherwise, a default implementation is wrapped around the Scorer returned by GetScorer(AtomicReaderContext, IBits) . Inheritance System.Object BulkScorer ConstantScoreQuery.ConstantBulkScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class BulkScorer Methods | Improve this Doc View Source Score(ICollector) Scores and collects all matching documents. Declaration public virtual void Score(ICollector collector) Parameters Type Name Description ICollector collector The collector to which all matching documents are passed. | Improve this Doc View Source Score(ICollector, Int32) Collects matching documents in a range. Declaration public abstract bool Score(ICollector collector, int max) Parameters Type Name Description ICollector collector The collector to which all matching documents are passed. System.Int32 max Score up to, but not including, this doc Returns Type Description System.Boolean true if more matching documents may remain. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TwoPhaseCommitTool.html",
    "title": "Class TwoPhaseCommitTool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TwoPhaseCommitTool A utility for executing 2-phase commit on several objects. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TwoPhaseCommitTool Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TwoPhaseCommitTool Methods | Improve this Doc View Source Execute(ITwoPhaseCommit[]) Executes a 2-phase commit algorithm by first PrepareCommit() all objects and only if all succeed, it proceeds with Commit() . If any of the objects fail on either the preparation or actual commit, it terminates and Rollback() all of them. NOTE: It may happen that an object fails to commit, after few have already successfully committed. This tool will still issue a rollback instruction on them as well, but depending on the implementation, it may not have any effect. NOTE: if any of the objects are null , this method simply skips over them. Declaration public static void Execute(params ITwoPhaseCommit[] objects) Parameters Type Name Description ITwoPhaseCommit [] objects Exceptions Type Condition TwoPhaseCommitTool.PrepareCommitFailException if any of the objects fail to PrepareCommit() TwoPhaseCommitTool.CommitFailException if any of the objects fail to Commit() Extension Methods Number.IsNumber(Object) See Also ITwoPhaseCommit"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentCommitInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentCommitInfo.html",
    "title": "Class SegmentCommitInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentCommitInfo Embeds a [read-only] SegmentInfo and adds per-commit fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentCommitInfo Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentCommitInfo Constructors | Improve this Doc View Source SegmentCommitInfo(SegmentInfo, Int32, Int64, Int64) Sole constructor. Declaration public SegmentCommitInfo(SegmentInfo info, int delCount, long delGen, long fieldInfosGen) Parameters Type Name Description SegmentInfo info SegmentInfo that we wrap System.Int32 delCount number of deleted documents in this segment System.Int64 delGen deletion generation number (used to name deletion files) System.Int64 fieldInfosGen FieldInfos generation number (used to name field-infos files) Properties | Improve this Doc View Source DelCount Returns the number of deleted docs in the segment. Declaration public virtual int DelCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DelGen Returns generation number of the live docs file or -1 if there are no deletes yet. Declaration public virtual long DelGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source FieldInfosGen Returns the generation number of the field infos file or -1 if there are no field updates yet. Declaration public virtual long FieldInfosGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source HasDeletions Returns true if there are any deletions for the segment at this commit. Declaration public virtual bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasFieldUpdates Returns true if there are any field updates for the segment in this commit. Declaration public virtual bool HasFieldUpdates { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Info The SegmentInfo that we wrap. Declaration public SegmentInfo Info { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source NextDelGen Returns the next available generation number of the live docs file. Declaration public virtual long NextDelGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source NextFieldInfosGen Returns the next available generation number of the FieldInfos files. Declaration public virtual long NextFieldInfosGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source UpdatesFiles Returns the per generation updates files. Declaration public virtual IDictionary<long, ISet<string>> UpdatesFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.Int64 , System.Collections.Generic.ISet < System.String >> Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source GetFiles() Returns all files in use by this segment. Declaration public virtual ICollection<string> GetFiles() Returns Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source GetSizeInBytes() Returns total size in bytes of all files for this segment. NOTE: this value is not correct for 3.0 segments that have shared docstores. To get the correct value, upgrade! Declaration public virtual long GetSizeInBytes() Returns Type Description System.Int64 | Improve this Doc View Source SetGenUpdatesFiles(IDictionary<Int64, ISet<String>>) Sets the updates file names per generation. Does not deep clone the map. Declaration public virtual void SetGenUpdatesFiles(IDictionary<long, ISet<string>> genUpdatesFiles) Parameters Type Name Description System.Collections.Generic.IDictionary < System.Int64 , System.Collections.Generic.ISet < System.String >> genUpdatesFiles | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(Directory, Int32) Returns a description of this segment. Declaration public virtual string ToString(Directory dir, int pendingDelCount) Parameters Type Name Description Directory dir System.Int32 pendingDelCount Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderUtil.html",
    "title": "Class ReaderUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReaderUtil Common util methods for dealing with IndexReader s and IndexReaderContext s. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ReaderUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderUtil Methods | Improve this Doc View Source GetTopLevelContext(IndexReaderContext) Walks up the reader tree and return the given context's top level reader context, or in other words the reader tree's root context. Declaration public static IndexReaderContext GetTopLevelContext(IndexReaderContext context) Parameters Type Name Description IndexReaderContext context Returns Type Description IndexReaderContext | Improve this Doc View Source SubIndex(Int32, IList<AtomicReaderContext>) Returns index of the searcher/reader for document n in the array used to construct this searcher/reader. Declaration public static int SubIndex(int n, IList<AtomicReaderContext> leaves) Parameters Type Name Description System.Int32 n System.Collections.Generic.IList < AtomicReaderContext > leaves Returns Type Description System.Int32 | Improve this Doc View Source SubIndex(Int32, Int32[]) Returns index of the searcher/reader for document n in the array used to construct this searcher/reader. Declaration public static int SubIndex(int n, int[] docStarts) Parameters Type Name Description System.Int32 n System.Int32 [] docStarts Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.ReaderSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ReaderSlice.html",
    "title": "Class ReaderSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReaderSlice Subreader slice from a parent composite reader. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object ReaderSlice Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ReaderSlice Constructors | Improve this Doc View Source ReaderSlice(Int32, Int32, Int32) Sole constructor. Declaration public ReaderSlice(int start, int length, int readerIndex) Parameters Type Name Description System.Int32 start System.Int32 length System.Int32 readerIndex Fields | Improve this Doc View Source EMPTY_ARRAY Zero-length ReaderSlice array. Declaration public static readonly ReaderSlice[] EMPTY_ARRAY Field Value Type Description ReaderSlice [] Properties | Improve this Doc View Source Length Number of documents in this slice. Declaration public int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ReaderIndex Sub-reader index for this slice. Declaration public int ReaderIndex { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Document ID this slice starts from. Declaration public int Start { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.EnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiDocsEnum.EnumWithSlice.html",
    "title": "Class MultiDocsEnum.EnumWithSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiDocsEnum.EnumWithSlice Holds a DocsEnum along with the corresponding ReaderSlice . Inheritance System.Object MultiDocsEnum.EnumWithSlice Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class EnumWithSlice Properties | Improve this Doc View Source DocsEnum DocsEnum of this sub-reader. Declaration public DocsEnum DocsEnum { get; } Property Value Type Description DocsEnum | Improve this Doc View Source Slice ReaderSlice describing how this sub-reader fits into the composite reader. Declaration public ReaderSlice Slice { get; } Property Value Type Description ReaderSlice Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexUpgrader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexUpgrader.html",
    "title": "Class IndexUpgrader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexUpgrader This is an easy-to-use tool that upgrades all segments of an index from previous Lucene versions to the current segment file format. It can be used from command line: java -cp lucene-core.jar Lucene.Net.Index.IndexUpgrader [-delete-prior-commits] [-verbose] indexDir Alternatively this class can be instantiated and Upgrade() invoked. It uses UpgradeIndexMergePolicy and triggers the upgrade via an ForceMerge(Int32) request to IndexWriter . This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify -delete-prior-commits to override this, allowing the tool to delete all but the last commit. From .NET code this can be enabled by passing true to IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) . Warning: this tool may reorder documents if the index was partially upgraded before execution (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a full ForceMerge instead. The MergePolicy set by IndexWriterConfig may also reorder documents. Inheritance System.Object IndexUpgrader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class IndexUpgrader Constructors | Improve this Doc View Source IndexUpgrader(Directory, IndexWriterConfig, Boolean) Creates index upgrader on the given directory, using an IndexWriter using the given config. You have the possibility to upgrade indexes with multiple commit points by removing all older ones. Declaration public IndexUpgrader(Directory dir, IndexWriterConfig iwc, bool deletePriorCommits) Parameters Type Name Description Directory dir IndexWriterConfig iwc System.Boolean deletePriorCommits | Improve this Doc View Source IndexUpgrader(Directory, LuceneVersion) Creates index upgrader on the given directory, using an IndexWriter using the given matchVersion . The tool refuses to upgrade indexes with multiple commit points. Declaration public IndexUpgrader(Directory dir, LuceneVersion matchVersion) Parameters Type Name Description Directory dir LuceneVersion matchVersion | Improve this Doc View Source IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) Creates index upgrader on the given directory, using an IndexWriter using the given matchVersion . You have the possibility to upgrade indexes with multiple commit points by removing all older ones. If infoStream is not null , all logging output will be sent to this stream. Declaration public IndexUpgrader(Directory dir, LuceneVersion matchVersion, TextWriter infoStream, bool deletePriorCommits) Parameters Type Name Description Directory dir LuceneVersion matchVersion System.IO.TextWriter infoStream System.Boolean deletePriorCommits Methods | Improve this Doc View Source Main(String[]) Main method to run IndexUpgrader from the command-line. Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source ParseArgs(String[]) Declaration public static IndexUpgrader ParseArgs(string[] args) Parameters Type Name Description System.String [] args Returns Type Description IndexUpgrader | Improve this Doc View Source Upgrade() Perform the upgrade. Declaration public void Upgrade() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexSplitter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexSplitter.html",
    "title": "Class IndexSplitter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexSplitter Command-line tool that enables listing segments in an index, copying specific segments to another index, and deleting segments from an index. This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple Stream) so it will not work with non FSDirectory Directory impls. @lucene.experimental You can easily accidentally remove segments from your index so be careful! Inheritance System.Object IndexSplitter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.Misc.dll Syntax public class IndexSplitter Constructors | Improve this Doc View Source IndexSplitter(DirectoryInfo) Declaration public IndexSplitter(DirectoryInfo dir) Parameters Type Name Description System.IO.DirectoryInfo dir Properties | Improve this Doc View Source Infos Declaration public SegmentInfos Infos { get; set; } Property Value Type Description SegmentInfos Methods | Improve this Doc View Source ListSegments() Declaration public virtual void ListSegments() | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args | Improve this Doc View Source Remove(String[]) Declaration public virtual void Remove(string[] segs) Parameters Type Name Description System.String [] segs | Improve this Doc View Source Split(DirectoryInfo, String[]) Declaration public virtual void Split(DirectoryInfo destDir, string[] segs) Parameters Type Name Description System.IO.DirectoryInfo destDir System.String [] segs Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.IndexReaderContext.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.IndexReaderContext.html",
    "title": "Class IndexReaderContext | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexReaderContext A struct like class that represents a hierarchical relationship between IndexReader instances. Inheritance System.Object IndexReaderContext AtomicReaderContext CompositeReaderContext Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class IndexReaderContext Properties | Improve this Doc View Source Children Returns the context's children iff this context is a composite context otherwise null . Declaration public abstract IList<IndexReaderContext> Children { get; } Property Value Type Description System.Collections.Generic.IList < IndexReaderContext > | Improve this Doc View Source DocBaseInParent the doc base for this reader in the parent, 0 if parent is null Declaration public int DocBaseInParent { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsTopLevel true if this context struct represents the top level reader within the hierarchical context Declaration public bool IsTopLevel { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Leaves Returns the context's leaves if this context is a top-level context. For convenience, if this is an AtomicReaderContext this returns itself as the only leaf. Note: this is convenience method since leaves can always be obtained by walking the context tree using Children . Declaration public abstract IList<AtomicReaderContext> Leaves { get; } Property Value Type Description System.Collections.Generic.IList < AtomicReaderContext > Exceptions Type Condition System.InvalidOperationException if this is not a top-level context. See Also Children | Improve this Doc View Source OrdInParent the ord for this reader in the parent, 0 if parent is null Declaration public int OrdInParent { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Parent The reader context for this reader's immediate parent, or null if none Declaration public CompositeReaderContext Parent { get; } Property Value Type Description CompositeReaderContext | Improve this Doc View Source Reader Returns the IndexReader , this context represents. Declaration public abstract IndexReader Reader { get; } Property Value Type Description IndexReader Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.AcceptStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilteredTermsEnum.AcceptStatus.html",
    "title": "Enum FilteredTermsEnum.AcceptStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum FilteredTermsEnum.AcceptStatus Return value, if term should be accepted or the iteration should END . The *_SEEK values denote, that after handling the current term the enum should call NextSeekTerm(BytesRef) and step forward. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax protected enum AcceptStatus Fields Name Description END Reject the term and stop enumerating. NO Reject the term and position the enum at the next term. NO_AND_SEEK Reject the term and advance ( NextSeekTerm(BytesRef) ) to the next term. YES Accept the term and position the enum at the next term. YES_AND_SEEK Accept the term and advance ( NextSeekTerm(BytesRef) ) to the next term. See Also Accept ( BytesRef ) Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckAbort.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckAbort.html",
    "title": "Class CheckAbort | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckAbort Class for recording units of work when merging segments. Inheritance System.Object CheckAbort Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class CheckAbort Constructors | Improve this Doc View Source CheckAbort(MergePolicy.OneMerge, Directory) Creates a CheckAbort instance. Declaration public CheckAbort(MergePolicy.OneMerge merge, Directory dir) Parameters Type Name Description MergePolicy.OneMerge merge Directory dir Fields | Improve this Doc View Source NONE If you use this: IW.Dispose(false) cannot abort your merge! This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static readonly CheckAbort NONE Field Value Type Description CheckAbort Methods | Improve this Doc View Source Work(Double) Records the fact that roughly units amount of work have been done since this method was last called. When adding time-consuming code into Lucene.Net.Index.SegmentMerger , you should test different values for units to ensure that the time in between calls to merge.CheckAborted is up to ~ 1 second. Declaration public virtual void Work(double units) Parameters Type Name Description System.Double units Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Number.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Number.html",
    "title": "Class Field.Number | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Number Inheritance System.Object Field.Number Field.Byte Field.Double Field.Int16 Field.Int32 Field.Int64 Field.Single Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected abstract class Number Methods | Improve this Doc View Source GetByteValue() Returns this object's value as a System.Byte . Might involve rounding and/or truncating the value, so it fits into a System.Byte . Declaration public virtual byte GetByteValue() Returns Type Description System.Byte the primitive System.Byte value of this object. | Improve this Doc View Source GetDoubleValue() Returns this object's value as a System.Double . Might involve rounding. Declaration public abstract double GetDoubleValue() Returns Type Description System.Double the primitive System.Double value of this object. | Improve this Doc View Source GetInt16Value() Returns this object's value as a System.Int16 . Might involve rounding and/or truncating the value, so it fits into a System.Int16 . Declaration public virtual short GetInt16Value() Returns Type Description System.Int16 the primitive System.Int16 value of this object. | Improve this Doc View Source GetInt32Value() Returns this object's value as an System.Int32 . Might involve rounding and/or truncating the value, so it fits into an System.Int32 . Declaration public abstract int GetInt32Value() Returns Type Description System.Int32 the primitive System.Int32 value of this object. | Improve this Doc View Source GetInt64Value() Returns this object's value as a System.Int64 . Might involve rounding and/or truncating the value, so it fits into a System.Int64 . Declaration public abstract long GetInt64Value() Returns Type Description System.Int64 the primitive System.Int64 value of this object. | Improve this Doc View Source GetSingleValue() Returns this object's value as a System.Single . Might involve rounding. Declaration public abstract float GetSingleValue() Returns Type Description System.Single the primitive System.Single value of this object. | Improve this Doc View Source ToString() Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public abstract string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String | Improve this Doc View Source ToString(String) Declaration public abstract string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public abstract string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.CompressionTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.CompressionTools.html",
    "title": "Class CompressionTools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressionTools Simple utility class providing static methods to compress and decompress binary data for stored fields. this class uses the System.IO.Compression.DeflateStream class to compress and decompress. Inheritance System.Object CompressionTools Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public class CompressionTools Methods | Improve this Doc View Source Compress(Byte[]) Compresses all System.Byte s in the array, with default System.IO.Compression.CompressionLevel.Optimal level Declaration public static byte[] Compress(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.Byte [] | Improve this Doc View Source Compress(Byte[], Int32, Int32) Compresses the specified System.Byte range, with default System.IO.Compression.CompressionLevel.Optimal level Declaration public static byte[] Compress(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.Byte [] | Improve this Doc View Source Compress(Byte[], Int32, Int32, CompressionLevel) Compresses the specified System.Byte range using the specified compressionLevel . Declaration public static byte[] Compress(byte[] value, int offset, int length, CompressionLevel compressionLevel) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length System.IO.Compression.CompressionLevel compressionLevel Returns Type Description System.Byte [] | Improve this Doc View Source CompressString(String) Compresses the System.String value, with default System.IO.Compression.CompressionLevel.Optimal level Declaration public static byte[] CompressString(string value) Parameters Type Name Description System.String value Returns Type Description System.Byte [] | Improve this Doc View Source CompressString(String, CompressionLevel) Compresses the System.String value using the specified compressionLevel . Declaration public static byte[] CompressString(string value, CompressionLevel compressionLevel) Parameters Type Name Description System.String value System.IO.Compression.CompressionLevel compressionLevel Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(BytesRef) Decompress the System.Byte array previously returned by compress (referenced by the provided BytesRef ) Declaration public static byte[] Decompress(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(Byte[]) Decompress the System.Byte array previously returned by compress Declaration public static byte[] Decompress(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.Byte [] | Improve this Doc View Source Decompress(Byte[], Int32, Int32) Decompress the System.Byte array previously returned by compress Declaration public static byte[] Decompress(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.Byte [] | Improve this Doc View Source DecompressString(BytesRef) Decompress the System.Byte array (referenced by the provided BytesRef ) previously returned by CompressString(String) back into a System.String Declaration public static string DecompressString(BytesRef bytes) Parameters Type Name Description BytesRef bytes Returns Type Description System.String | Improve this Doc View Source DecompressString(Byte[]) Decompress the System.Byte array previously returned by CompressString(String) back into a System.String Declaration public static string DecompressString(byte[] value) Parameters Type Name Description System.Byte [] value Returns Type Description System.String | Improve this Doc View Source DecompressString(Byte[], Int32, Int32) Decompress the System.Byte array previously returned by CompressString(String) back into a System.String Declaration public static string DecompressString(byte[] value, int offset, int length) Parameters Type Name Description System.Byte [] value System.Int32 offset System.Int32 length Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.html",
    "title": "Namespace Lucene.Net.Codecs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Codecs API: API for customization of the encoding and structure of the index. The Codec API allows you to customise the way the following pieces of index information are stored: * Postings lists - see PostingsFormat * DocValues - see DocValuesFormat * Stored fields - see StoredFieldsFormat * Term vectors - see TermVectorsFormat * FieldInfos - see FieldInfosFormat * SegmentInfo - see SegmentInfoFormat * Norms - see NormsFormat * Live documents - see LiveDocsFormat For some concrete implementations beyond Lucene's official index format, see the Codecs module . Codecs are identified by name through the Java Service Provider Interface. To create your own codec, extend Codec and pass the new codec's name to the super() constructor: public class MyCodec extends Codec { public MyCodec() { super(\"MyCodecName\"); } ... } You will need to register the Codec class so that the {@link java.util.ServiceLoader ServiceLoader} can find it, by including a META-INF/services/org.apache.lucene.codecs.Codec file on your classpath that contains the package-qualified name of your codec. If you just want to customise the PostingsFormat , or use different postings formats for different fields, then you can register your custom postings format in the same way (in META-INF/services/org.apache.lucene.codecs.PostingsFormat), and then extend the default Lucene46Codec and override #getPostingsFormatForField(String) to return your custom postings format. Similarly, if you just want to customise the DocValuesFormat per-field, have a look at #getDocValuesFormatForField(String) . Classes BlockTermState Holds all state required for PostingsReaderBase to produce a DocsEnum without re-seeking the terms dict. BlockTreeTermsReader A block-based terms index and dictionary that assigns terms to variable length blocks according to how they share prefixes. The terms index is a prefix trie whose leaves are term blocks. The advantage of this approach is that SeekExact() is often able to determine a term cannot exist without doing any IO, and intersection with Automata is very fast. Note that this terms dictionary has it's own fixed terms index (ie, it does not support a pluggable terms index implementation). NOTE : this terms dictionary does not support index divisor when opening an IndexReader. Instead, you can change the min/maxItemsPerBlock during indexing. The data structure used by this implementation is very similar to a burst trie ( http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.3499 ), but with added logic to break up too-large blocks of all terms sharing a given prefix into smaller ones. Use CheckIndex with the -verbose option to see summary statistics on the blocks in the dictionary. See BlockTreeTermsWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockTreeTermsReader.FieldReader BlockTree's implementation of GetTerms(String) . BlockTreeTermsReader.Stats BlockTree statistics for a single field returned by ComputeStats() . BlockTreeTermsWriter Block-based terms index and dictionary writer. Writes terms dict and index, block-encoding (column stride) each term's metadata for each set of terms between two index terms. Files: .tim: Term Dictionary .tip: Term Index Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and per-term metadata (typically pointers to the postings list for that term in the inverted index). The .tim is arranged in blocks: with blocks containing a variable number of entries (by default 25-48), where each entry is either a term or a reference to a sub-block. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections. TermsDict (.tim) --> Header, PostingsHeader , NodeBlock NumBlocks , FieldSummary, DirOffset, Footer NodeBlock --> (OuterNode | InnerNode) OuterNode --> EntryCount, SuffixLength, Byte SuffixLength , StatsLength, < TermStats > EntryCount , MetaLength, < TermMetadata > EntryCount InnerNode --> EntryCount, SuffixLength[,Sub?], Byte SuffixLength , StatsLength, < TermStats ? > EntryCount , MetaLength, < TermMetadata ? > EntryCount TermStats --> DocFreq, TotalTermFreq FieldSummary --> NumFields, <FieldNumber, NumTerms, RootCodeLength, Byte RootCodeLength , SumTotalTermFreq?, SumDocFreq, DocCount> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) DirOffset --> Uint64 ( WriteInt64(Int64) ) EntryCount,SuffixLength,StatsLength,DocFreq,MetaLength,NumFields, FieldNumber,RootCodeLength,DocCount --> VInt ( WriteVInt32(Int32) _ TotalTermFreq,NumTerms,SumTotalTermFreq,SumDocFreq --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the BlockTree implementation. DirOffset is a pointer to the FieldSummary section. DocFreq is the count of documents which contain the term. TotalTermFreq is the total number of occurrences of the term. this is encoded as the difference between the total number of occurrences and the DocFreq. FieldNumber is the fields number from Lucene.Net.Codecs.BlockTreeTermsWriter.fieldInfos . (.fnm) NumTerms is the number of unique terms for the field. RootCode points to the root block for the field. SumDocFreq is the total number of postings, the number of term-document pairs across the entire field. DocCount is the number of documents that have at least one posting for this field. PostingsHeader and TermMetadata are plugged into by the specific postings implementation: these contain arbitrary per-file data (such as parameters or versioning information) and per-term data (such as pointers to inverted files). For inner nodes of the tree, every entry will steal one bit to mark whether it points to child nodes(sub-block). If so, the corresponding TermStats and TermMetadata are omitted Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. The index is also used to determine when a given term cannot exist on disk (in the .tim file), saving a disk seek. TermsIndex (.tip) --> Header, FSTIndex NumFields <IndexStartFP> NumFields , DirOffset, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DirOffset --> Uint64 ( WriteInt64(Int64) IndexStartFP --> VLong ( WriteVInt64(Int64) FSTIndex --> FST{byte[]} Footer --> CodecFooter ( WriteFooter(IndexOutput) Notes: The .tip file contains a separate FST for each field. The FST maps a term prefix to the on-disk block that holds all terms starting with that prefix. Each field's IndexStartFP points to its FST. DirOffset is a pointer to the start of the IndexStartFPs for all fields It's possible that an on-disk block would contain too many terms (more than the allowed maximum (default: 48)). When this happens, the block is sub-divided into new blocks (called \"floor blocks\"), and then the output in the FST for the block's prefix encodes the leading byte of each sub-block, and its file pointer. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Codec Encodes/decodes an inverted index segment. Note, when extending this class, the name ( Name ) is written into the index. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetCodec(String) to resolve codec names. To implement your own codec: Subclass this class. Subclass DefaultCodecFactory , override the Initialize() method, and add the line base.ScanForCodecs(typeof(YourCodec).GetTypeInfo().Assembly) . If you have any codec classes in your assembly that are not meant for reading, you can add the ExcludeCodecFromScanAttribute to them so they are ignored by the scan. set the new ICodecFactory by calling SetCodecFactory(ICodecFactory) at application startup. If your codec has dependencies, you may also override GetCodec(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. Codec Names Unlike the Java version, codec names are by default convention-based on the class name. If you name your custom codec class \"MyCustomCodec\", the codec name will the same name without the \"Codec\" suffix: \"MyCustom\". You can override this default behavior by using the CodecNameAttribute to name the codec differently than this convention. Codec names must be all ASCII alphanumeric, and less than 128 characters in length. CodecNameAttribute Represents an attribute that is used to name a Codec , if a name other than the default Codec naming convention is desired. CodecUtil Utility class for reading and writing versioned headers. Writing codec headers is useful to ensure that a file is in the format you think it is. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DefaultCodecFactory LUCENENET specific class that implements the default functionality for the ICodecFactory . The most common use cases are: Initialize DefaultCodecFactory with a set of CustomCodecTypes . Subclass DefaultCodecFactory and override GetCodec(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetCodec(String) . Subclass DefaultCodecFactory and override GetCodecType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultCodecFactory.codecNameToTypeMap . Subclass DefaultCodecFactory to add new or override the default Codec types by overriding Initialize() and calling PutCodecType(Type) . Subclass DefaultCodecFactory to scan additional assemblies for Codec subclasses in by overriding Initialize() and calling ScanForCodecs(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . DefaultDocValuesFormatFactory LUCENENET specific class that implements the default functionality for the IDocValuesFormatFactory . The most common use cases are: Initialize DefaultDocValuesFormatFactory with a set of CustomDocValuesFormatTypes . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetDocValuesFormat(String) . Subclass DefaultDocValuesFormatFactory and override GetDocValuesFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultDocValuesFormatFactory.docValuesFormatNameToTypeMap . Subclass DefaultDocValuesFormatFactory to add new or override the default DocValuesFormat types by overriding Initialize() and calling PutDocValuesFormatType(Type) . Subclass DefaultDocValuesFormatFactory to scan additional assemblies for DocValuesFormat subclasses in by overriding Initialize() and calling ScanForDocValuesFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . DefaultPostingsFormatFactory LUCENENET specific class that implements the default functionality for the IPostingsFormatFactory . The most common use cases are: Initialize DefaultPostingsFormatFactory with a set of CustomPostingsFormatTypes . Subclass DefaultPostingsFormatFactory and override GetPostingsFormat(Type) so an external dependency injection container can be used to supply the instances (lifetime should be singleton). Note that you could alternately use the \"named type\" feature that many DI containers have to supply the type based on name by overriding GetPostingsFormat(String) . Subclass DefaultPostingsFormatFactory and override GetPostingsFormatType(String) so a type new type can be supplied that is not in the Lucene.Net.Codecs.DefaultPostingsFormatFactory.postingsFormatNameToTypeMap . Subclass DefaultPostingsFormatFactory to add new or override the default PostingsFormat types by overriding Initialize() and calling PutPostingsFormatType(Type) . Subclass DefaultPostingsFormatFactory to scan additional assemblies for PostingsFormat subclasses in by overriding Initialize() and calling ScanForPostingsFormats(Assembly) . For performance reasons, the default behavior only loads Lucene.Net codecs. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . DocValuesConsumer Abstract API that consumes numeric, binary and sorted docvalues. Concrete implementations of this actually do \"something\" with the docvalues (write it into the index in a specific format). The lifecycle is: DocValuesConsumer is created by FieldsConsumer(SegmentWriteState) or NormsConsumer(SegmentWriteState) . AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , or AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) are called for each Numeric, Binary, or Sorted docvalues field. The API is a \"pull\" rather than \"push\", and the implementation is free to iterate over the values multiple times ( System.Collections.Generic.IEnumerable<T>.GetEnumerator() ). After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesFormat Encodes/decodes per-document values. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. To implement your own format: Subclass this class. Subclass DefaultDocValuesFormatFactory , override the Initialize() method, and add the line base.ScanForDocValuesFormats(typeof(YourDocValuesFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludeDocValuesFormatFromScanAttribute to them so they are ignored by the scan. Set the new IDocValuesFormatFactory by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. If your format has dependencies, you may also override GetDocValuesFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. DocValuesFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomDocValuesFormat\", the format name will the same name without the \"DocValuesFormat\" suffix: \"MyCustom\". You can override this default behavior by using the DocValuesFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesFormatNameAttribute Represents an attribute that is used to name a DocValuesFormat , if a name other than the default DocValuesFormat naming convention is desired. DocValuesProducer Abstract API that produces numeric, binary and sorted docvalues. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ExcludeCodecFromScanAttribute When placed on a class that subclasses Codec , adding this attribute will exclude the type from consideration in the ScanForCodecs(Assembly) method. However, the Codec type can still be added manually using PutCodecType(Type) . ExcludeDocValuesFormatFromScanAttribute When placed on a class that subclasses DocValuesFormat , adding this attribute will exclude the type from consideration in the ScanForDocValuesFormats(Assembly) method. However, the DocValuesFormat type can still be added manually using PutDocValuesFormatType(Type) . ExcludePostingsFormatFromScanAttribute When placed on a class that subclasses PostingsFormat , adding this attribute will exclude the type from consideration in the ScanForPostingsFormats(Assembly) method. However, the PostingsFormat type can still be added manually using PutPostingsFormatType(Type) . FieldInfosFormat Encodes/decodes FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInfosReader Codec API for reading FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInfosWriter Codec API for writing FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldsConsumer Abstract API that consumes terms, doc, freq, prox, offset and payloads postings. Concrete implementations of this actually do \"something\" with the postings (write it into the index in a specific format). The lifecycle is: FieldsConsumer is created by FieldsConsumer(SegmentWriteState) . For each field, AddField(FieldInfo) is called, returning a TermsConsumer for the field. After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldsProducer Abstract API that produces terms, doc, freq, prox, offset and payloads postings. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterCodec A codec that forwards all its method calls to another codec. Extend this class when you need to reuse the functionality of an existing codec. For example, if you want to build a codec that redefines Lucene46's LiveDocsFormat : public sealed class CustomCodec : FilterCodec { public CustomCodec() : base(\"CustomCodec\", new Lucene46Codec()) { } public override LiveDocsFormat LiveDocsFormat { get { return new CustomLiveDocsFormat(); } } } Please note: Don't call ForName(String) from the no-arg constructor of your own codec. When the DefaultCodecFactory loads your own Codec , the DefaultCodecFactory has not yet fully initialized! If you want to extend another Codec , instantiate it directly by calling its constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LiveDocsFormat Format for live/deleted documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MappingMultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk MappingMultiDocsEnum Exposes flex API, merged from flex API of sub-segments, remapping docIDs (this is used for segment merging). This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiLevelSkipListReader This abstract class reads skip lists with multiple levels. See MultiLevelSkipListWriter for the information about the encoding of the multi level skip lists. Subclasses must implement the abstract method ReadSkipData(Int32, IndexInput) which defines the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiLevelSkipListWriter This abstract class writes skip lists with multiple levels. Example for skipInterval = 3: c (skip level 2) c c c (skip level 1) x x x x x x x x x x (skip level 0) d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) 3 6 9 12 15 18 21 24 27 30 (df) d - document x - skip data c - skip data with child pointer Skip level i contains every skipInterval-th entry from skip level i-1. Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. this guarantees a logarithmic amount of skips to find the target document. While this class takes care of writing the different skip levels, subclasses must define the actual format of the skip data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NormsFormat Encodes/decodes per-document score normalization values. PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsConsumer Abstract API that consumes postings for an individual term. The lifecycle is: PostingsConsumer is returned for each term by StartTerm(BytesRef) . StartDoc(Int32, Int32) is called for each document where the term occurs, specifying id and term frequency for that document. If positions are enabled for the field, then AddPosition(Int32, BytesRef, Int32, Int32) will be called for each occurrence in the document. FinishDoc() is called when the producer is done adding positions to the document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsFormat Encodes/decodes terms, postings, and proximity data. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. If you implement your own format: Subclass this class. Subclass DefaultPostingsFormatFactory , override Initialize() , and add the line base.ScanForPostingsFormats(typeof(YourPostingsFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludePostingsFormatFromScanAttribute to them so they are ignored by the scan. Set the new IPostingsFormatFactory by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. If your format has dependencies, you may also override GetPostingsFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. PostingsFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomPostingsFormat\", the codec name will the same name without the \"PostingsFormat\" suffix: \"MyCustom\". You can override this default behavior by using the PostingsFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsFormatNameAttribute Represents an attribute that is used to name a PostingsFormat , if a name other than the default PostingsFormat naming convention is desired. PostingsReaderBase The core terms dictionaries (BlockTermsReader, BlockTreeTermsReader ) interact with a single instance of this class to manage creation of DocsEnum and DocsAndPositionsEnum instances. It provides an IndexInput (termsIn) where this class may read any previously stored data that it had written in its corresponding PostingsWriterBase at indexing time. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PostingsWriterBase Extension of PostingsConsumer to support pluggable term dictionaries. This class contains additional hooks to interact with the provided term dictionaries such as BlockTreeTermsWriter . If you want to re-use an existing implementation and are only interested in customizing the format of the postings list, extend this class instead. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoFormat Expert: Controls the format of the SegmentInfo (segment metadata file). This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoReader Specifies an API for classes that can read SegmentInfo information. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfoWriter Specifies an API for classes that can write out SegmentInfo data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StoredFieldsFormat Controls the format of stored fields. StoredFieldsReader Codec API for reading stored fields. You need to implement VisitDocument(Int32, StoredFieldVisitor) to read the stored fields for a document, implement Clone() (creating clones of any IndexInput s used, etc), and Dispose(Boolean) to cleanup any allocated resources. This is a Lucene.NET EXPERIMENTAL API, use at your own risk StoredFieldsWriter Codec API for writing stored fields: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. WriteField(FieldInfo, IIndexableField) is called for each field in the document. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsConsumer Abstract API that consumes terms for an individual field. The lifecycle is: TermsConsumer is returned for each field by AddField(FieldInfo) . TermsConsumer returns a PostingsConsumer for each term in StartTerm(BytesRef) . When the producer (e.g. IndexWriter) is done adding documents for the term, it calls FinishTerm(BytesRef, TermStats) , passing in the accumulated term statistics. Producer calls Finish(Int64, Int64, Int32) with the accumulated collection statistics when it is finished adding terms to the field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermStats Holder for per-term statistics. TermVectorsFormat Controls the format of term vectors. TermVectorsReader Codec API for reading term vectors: This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermVectorsWriter Codec API for writing term vectors: For every document, StartDocument(Int32) is called, informing the Codec how many fields will be written. StartField(FieldInfo, Int32, Boolean, Boolean, Boolean) is called for each field in the document, informing the codec how many terms will be written for that field, and whether or not positions, offsets, or payloads are enabled. Within each field, StartTerm(BytesRef, Int32) is called for each term. If offsets and/or positions are enabled, then AddPosition(Int32, Int32, Int32, BytesRef) will be called for each term occurrence. After all documents have been written, Finish(FieldInfos, Int32) is called for verification/sanity-checks. Finally the writer is disposed ( Dispose(Boolean) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces ICodecFactory LUCENENET specific contract for extending the functionality of Codec implementations so they can be injected with dependencies. To set the ICodecFactory , call SetCodecFactory(ICodecFactory) . IDocValuesFormatFactory LUCENENET specific contract for extending the functionality of DocValuesFormat implementations so they can be injected with dependencies. To set the IDocValuesFormatFactory , call SetDocValuesFormatFactory(IDocValuesFormatFactory) . IPostingsFormatFactory LUCENENET specific contract for extending the functionality of PostingsFormat implementations so they can be injected with dependencies. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) ."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Analysis.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.TokenAttributes Classes CharTermAttribute Default implementation of ICharTermAttribute . FlagsAttribute Default implementation of IFlagsAttribute . KeywordAttribute Default implementation of IKeywordAttribute . OffsetAttribute Default implementation of IOffsetAttribute . PayloadAttribute Default implementation of IPayloadAttribute . PositionIncrementAttribute Default implementation of IPositionIncrementAttribute . PositionLengthAttribute Default implementation of IPositionLengthAttribute . TypeAttribute Default implementation of ITypeAttribute . Interfaces ICharTermAttribute The term text of a Token . IFlagsAttribute This attribute can be used to pass different flags down the Tokenizer chain, eg from one TokenFilter to another one. This is completely distinct from TypeAttribute , although they do share similar purposes. The flags can be used to encode information about the token for use by other TokenFilter s. @lucene.experimental While we think this is here to stay, we may want to change it to be a long. IKeywordAttribute This attribute can be used to mark a token as a keyword. Keyword aware TokenStream s can decide to modify a token based on the return value of IsKeyword if the token is modified. Stemming filters for instance can use this attribute to conditionally skip a term if IsKeyword returns true . IOffsetAttribute The start and end character offset of a Token . IPayloadAttribute The payload of a Token. The payload is stored in the index at each position, and can be used to influence scoring when using Payload-based queries in the Lucene.Net.Search.Payloads and Lucene.Net.Search.Spans namespaces. NOTE: because the payload will be stored at each position, its usually best to use the minimum number of bytes necessary. Some codec implementations may optimize payload storage when all payloads have the same length. IPositionIncrementAttribute Determines the position of this token relative to the previous Token in a TokenStream , used in phrase searching. The default value is one. Some common uses for this are: Set it to zero to put multiple terms in the same position. this is useful if, e.g., a word has multiple stems. Searches for phrases including either stem will match. In this case, all but the first stem's increment should be set to zero: the increment of the first instance should be one. Repeating a token with an increment of zero can also be used to boost the scores of matches on that token. Set it to values greater than one to inhibit exact phrase matches. If, for example, one does not want phrases to match across removed stop words, then one could build a stop word filter that removes stop words and also sets the increment to the number of stop words removed before each non-stop word. Then exact phrase queries will only match when the terms occur with no intervening stop words. IPositionLengthAttribute Determines how many positions this token spans. Very few analyzer components actually produce this attribute, and indexing ignores it, but it's useful to express the graph structure naturally produced by decompounding, word splitting/joining, synonym filtering, etc. NOTE: this is optional, and most analyzers don't change the default value (1). ITermToBytesRefAttribute This attribute is requested by TermsHashPerField to index the contents. This attribute can be used to customize the final byte[] encoding of terms. Consumers of this attribute call BytesRef up-front, and then invoke FillBytesRef() for each term. Example: TermToBytesRefAttribute termAtt = tokenStream.GetAttribute<TermToBytesRefAttribute>; BytesRef bytes = termAtt.BytesRef; while (tokenStream.IncrementToken() { // you must call termAtt.FillBytesRef() before doing something with the bytes. // this encodes the term value (internally it might be a char[], etc) into the bytes. int hashCode = termAtt.FillBytesRef(); if (IsInteresting(bytes)) { // because the bytes are reused by the attribute (like CharTermAttribute's char[] buffer), // you should make a copy if you need persistent access to the bytes, otherwise they will // be rewritten across calls to IncrementToken() DoSomethingWith(new BytesRef(bytes)); } } ... @lucene.experimental this is a very expert API, please use CharTermAttribute and its implementation of this method for UTF-8 terms. ITypeAttribute A Token 's lexical type. The Default value is \"word\"."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicationHandler.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.IReplicationHandler.html",
    "title": "Interface IReplicationHandler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicationHandler Handler for revisions obtained by the client. Namespace : Lucene.Net.Replicator Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationHandler Properties | Improve this Doc View Source CurrentRevisionFiles Returns the current revision version held by the handler. Declaration IDictionary<string, IList<RevisionFile>> CurrentRevisionFiles { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> | Improve this Doc View Source CurrentVersion Returns the current revision files held by the handler. Declaration string CurrentVersion { get; } Property Value Type Description System.String Methods | Improve this Doc View Source RevisionReady(String, IDictionary<String, IList<RevisionFile>>, IDictionary<String, IList<String>>, IDictionary<String, Directory>) Called when a new revision was obtained and is available (i.e. all needed files were successfully copied). Declaration void RevisionReady(string version, IDictionary<string, IList<RevisionFile>> revisionFiles, IDictionary<string, IList<string>> copiedFiles, IDictionary<string, Directory> sourceDirectory) Parameters Type Name Description System.String version The version of the IRevision that was copied System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < RevisionFile >> revisionFiles The files contained by this IRevision System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.String >> copiedFiles The files that were actually copied System.Collections.Generic.IDictionary < System.String , Directory > sourceDirectory A mapping from a source of files to the Directory they were copied into Exceptions Type Condition System.IO.IOException"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.html",
    "title": "Namespace Lucene.Net.Replicator.Http | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator.Http Classes HttpClientBase Base class for Http clients. HttpReplicator An HTTP implementation of IReplicator . Assumes the API supported by ReplicationService . ReplicationService A server-side service for handling replication requests. The service assumes requests are sent in the format /<context>/<shard>/<action> where context is the servlet context, e.g. REPLICATION_CONTEXT shard is the ID of the shard, e.g. \"s1\" action is one of ReplicationService.ReplicationAction values For example, to check whether there are revision updates for shard \"s1\" you should send the request: http://host:port/replicate/s1/update . Enums ReplicationService.ReplicationAction Actions supported by the ReplicationService ."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.ReplicationAction.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.ReplicationService.ReplicationAction.html",
    "title": "Enum ReplicationService.ReplicationAction | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum ReplicationService.ReplicationAction Actions supported by the ReplicationService . Namespace : Lucene.Net.Replicator.Http Assembly : Lucene.Net.Replicator.dll Syntax public enum ReplicationAction Fields Name Description OBTAIN RELEASE UPDATE"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.html",
    "title": "Namespace Lucene.Net.Replicator.Http.Abstractions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Replicator.Http.Abstractions Interfaces IReplicationRequest Abstraction for remote replication requests, allows easy integration into any hosting frameworks. IReplicationResponse Abstraction for remote replication response, allows easy integration into any hosting frameworks. IReplicationService Contract for a replication service."
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationService.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationService.html",
    "title": "Interface IReplicationService | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicationService Contract for a replication service. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationService Methods | Improve this Doc View Source Perform(IReplicationRequest, IReplicationResponse) Executes the replication task. Declaration void Perform(IReplicationRequest request, IReplicationResponse response) Parameters Type Name Description IReplicationRequest request IReplicationResponse response Exceptions Type Condition System.InvalidOperationException required parameters are missing"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationResponse.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationResponse.html",
    "title": "Interface IReplicationResponse | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicationResponse Abstraction for remote replication response, allows easy integration into any hosting frameworks. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationResponse Remarks .NET Specific Abstraction Properties | Improve this Doc View Source Body The response content. Declaration Stream Body { get; } Property Value Type Description System.IO.Stream | Improve this Doc View Source StatusCode Gets or sets the http status code of the response. Declaration int StatusCode { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Flush() Flushes the reponse to the underlying response stream. Declaration void Flush()"
  },
  "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationRequest.html": {
    "href": "api/Lucene.Net.Replicator/Lucene.Net.Replicator.Http.Abstractions.IReplicationRequest.html",
    "title": "Interface IReplicationRequest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IReplicationRequest Abstraction for remote replication requests, allows easy integration into any hosting frameworks. Namespace : Lucene.Net.Replicator.Http.Abstractions Assembly : Lucene.Net.Replicator.dll Syntax public interface IReplicationRequest Remarks .NET Specific Abstraction Properties | Improve this Doc View Source Path Provides the requested path which mapps to a replication operation. Declaration string Path { get; } Property Value Type Description System.String Methods | Improve this Doc View Source QueryParam(String) Returns the requested query parameter or null if not present. Declaration string QueryParam(string name) Parameters Type Name Description System.String name the name of the requested parameter Returns Type Description System.String the value of the requested parameter or null if not present Remarks May though execeptions if the same parameter is provided multiple times, consult the documentation for the specific implementation."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.html",
    "title": "Namespace Lucene.Net.QueryParsers.Xml | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Xml Classes CoreParser Assembles a IQueryBuilder which uses only core Lucene Query objects CorePlusExtensionsParser Assembles a QueryBuilder which uses Query objects from Lucene's sandbox and queries modules in addition to core queries. DOMUtils Helper methods for parsing XML FilterBuilderFactory Factory for IFilterBuilder ParserException Thrown when the xml queryparser encounters invalid syntax/configuration. QueryBuilderFactory Factory for IQueryBuilder Interfaces IFilterBuilder Interface for building Filter s IQueryBuilder Implemented by objects that produce Lucene Query objects from XML streams. Implementations are expected to be thread-safe so that they can be used to simultaneously parse multiple XML documents."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IQueryBuilder.html",
    "title": "Interface IQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IQueryBuilder Implemented by objects that produce Lucene Query objects from XML streams. Implementations are expected to be thread-safe so that they can be used to simultaneously parse multiple XML documents. Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public interface IQueryBuilder Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IFilterBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.IFilterBuilder.html",
    "title": "Interface IFilterBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFilterBuilder Interface for building Filter s Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public interface IFilterBuilder Methods | Improve this Doc View Source GetFilter(XmlElement) Declaration Filter GetFilter(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Filter"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.DOMUtils.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.DOMUtils.html",
    "title": "Class DOMUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DOMUtils Helper methods for parsing XML Inheritance System.Object DOMUtils Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml Assembly : Lucene.Net.QueryParser.dll Syntax public class DOMUtils Methods | Improve this Doc View Source GetAttribute(XmlElement, String, Boolean) Declaration public static bool GetAttribute(XmlElement element, string attributeName, bool deflt) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName System.Boolean deflt Returns Type Description System.Boolean | Improve this Doc View Source GetAttribute(XmlElement, String, Int32) Declaration public static int GetAttribute(XmlElement element, string attributeName, int deflt) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName System.Int32 deflt Returns Type Description System.Int32 | Improve this Doc View Source GetAttribute(XmlElement, String, Single) Declaration public static float GetAttribute(XmlElement element, string attributeName, float deflt) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName System.Single deflt Returns Type Description System.Single | Improve this Doc View Source GetAttribute(XmlElement, String, String) Declaration public static string GetAttribute(XmlElement element, string attributeName, string deflt) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName System.String deflt Returns Type Description System.String | Improve this Doc View Source GetAttributeOrFail(XmlElement, String) Declaration public static string GetAttributeOrFail(XmlElement e, string name) Parameters Type Name Description System.Xml.XmlElement e System.String name Returns Type Description System.String | Improve this Doc View Source GetAttributeWithInheritance(XmlElement, String) Returns an attribute value from this node, or first parent node with this attribute defined Declaration public static string GetAttributeWithInheritance(XmlElement element, string attributeName) Parameters Type Name Description System.Xml.XmlElement element System.String attributeName Returns Type Description System.String A non-zero-length value if defined, otherwise null | Improve this Doc View Source GetAttributeWithInheritanceOrFail(XmlElement, String) Declaration public static string GetAttributeWithInheritanceOrFail(XmlElement e, string name) Parameters Type Name Description System.Xml.XmlElement e System.String name Returns Type Description System.String | Improve this Doc View Source GetChildByTagName(XmlElement, String) Convenience method where there is only one child System.Xml.XmlElement of a given name Declaration public static XmlElement GetChildByTagName(XmlElement e, string name) Parameters Type Name Description System.Xml.XmlElement e System.String name Returns Type Description System.Xml.XmlElement | Improve this Doc View Source GetChildByTagOrFail(XmlElement, String) Declaration public static XmlElement GetChildByTagOrFail(XmlElement e, string name) Parameters Type Name Description System.Xml.XmlElement e System.String name Returns Type Description System.Xml.XmlElement | Improve this Doc View Source GetChildTextByTagName(XmlElement, String) Convenience method where there is only one child System.Xml.XmlElement of a given name Declaration public static string GetChildTextByTagName(XmlElement e, string tagName) Parameters Type Name Description System.Xml.XmlElement e System.String tagName Returns Type Description System.String | Improve this Doc View Source GetFirstChildElement(XmlElement) Declaration public static XmlElement GetFirstChildElement(XmlElement element) Parameters Type Name Description System.Xml.XmlElement element Returns Type Description System.Xml.XmlElement | Improve this Doc View Source GetFirstChildOrFail(XmlElement) Declaration public static XmlElement GetFirstChildOrFail(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description System.Xml.XmlElement | Improve this Doc View Source GetNonBlankTextOrFail(XmlElement) Declaration public static string GetNonBlankTextOrFail(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description System.String | Improve this Doc View Source GetText(XmlNode) Declaration public static string GetText(XmlNode e) Parameters Type Name Description System.Xml.XmlNode e Returns Type Description System.String | Improve this Doc View Source InsertChild(XmlElement, String, String) Convenience method to append a new child with text Declaration public static XmlElement InsertChild(XmlElement parent, string tagName, string text) Parameters Type Name Description System.Xml.XmlElement parent System.String tagName System.String text Returns Type Description System.Xml.XmlElement | Improve this Doc View Source LoadXML(Stream) Helper method to parse an XML file into a DOM tree, given a System.IO.Stream . Declaration public static XmlDocument LoadXML(Stream input) Parameters Type Name Description System.IO.Stream input reader of the XML file to be parsed Returns Type Description System.Xml.XmlDocument an System.Xml.XmlDocument object | Improve this Doc View Source LoadXML(TextReader) Helper method to parse an XML file into a DOM tree, given a System.IO.TextReader . Declaration public static XmlDocument LoadXML(TextReader input) Parameters Type Name Description System.IO.TextReader input reader of the XML file to be parsed Returns Type Description System.Xml.XmlDocument an System.Xml.XmlDocument object | Improve this Doc View Source LoadXML(XmlReader) Helper method to parse an XML file into a DOM tree, given an System.Xml.XmlReader . Declaration public static XmlDocument LoadXML(XmlReader input) Parameters Type Name Description System.Xml.XmlReader input reader of the XML file to be parsed Returns Type Description System.Xml.XmlDocument an System.Xml.XmlDocument object"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.html",
    "title": "Namespace Lucene.Net.QueryParsers.Xml.Builders | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Xml.Builders Classes BooleanFilterBuilder Builder for BooleanFilter BooleanQueryBuilder Builder for BooleanQuery BoostingQueryBuilder Builder for BoostingQuery BoostingTermBuilder Builder for PayloadTermQuery CachedFilterBuilder Filters are cached in an LRU Cache keyed on the contained query or filter object. Using this will speed up overall performance for repeated uses of the same expensive query/filter. The sorts of queries/filters likely to benefit from caching need not necessarily be complex - e.g. simple TermQuerys with a large DF (document frequency) can be expensive on large indexes. A good example of this might be a term query on a field with only 2 possible values - \"true\" or \"false\". In a large index, querying or filtering on this field requires reading millions of document ids from disk which can more usefully be cached as a filter bitset. For Queries/Filters to be cached and reused the object must implement hashcode and equals methods correctly so that duplicate queries/filters can be detected in the cache. The CoreParser.maxNumCachedFilters property can be used to control the size of the LRU Cache established during the construction of CoreParser instances. ConstantScoreQueryBuilder Builder for ConstantScoreQuery DisjunctionMaxQueryBuilder Builder for DisjunctionMaxQuery DuplicateFilterBuilder Builder for Lucene.Net.Sandbox.Queries.DuplicateFilter FilteredQueryBuilder Builder for FilteredQuery FuzzyLikeThisQueryBuilder Builder for Lucene.Net.Sandbox.Queries.FuzzyLikeThisQuery LikeThisQueryBuilder Builder for MoreLikeThisQuery MatchAllDocsQueryBuilder Builder for MatchAllDocsQuery NumericRangeFilterBuilder Creates a NumericRangeFilter . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for NumericRangeFilter : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 If an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type , then the error will be silently ignored and the resulting filter will not match any documents. NumericRangeQueryBuilder Creates a NumericRangeQuery . The table below specifies the required attributes and the defaults if optional attributes are omitted. For more detail on what each of the attributes actually do, consult the documentation for NumericRangeQuery : Attribute nameValuesRequiredDefault fieldNameStringYesN/A lowerTermSpecified by type YesN/A upperTermSpecified by type YesN/A typeint, long, float, doubleNoint includeLowertrue, falseNotrue includeUppertrue, falseNotrue precisionStepintNo4 A ParserException will be thrown if an error occurs parsing the supplied lowerTerm or upperTerm into the numeric type specified by type . RangeFilterBuilder Builder for TermRangeFilter SpanBuilderBase Base class for building SpanQuery s SpanFirstBuilder Builder for SpanFirstQuery SpanNearBuilder Builder for SpanNearQuery SpanNotBuilder Builder for SpanNotQuery SpanOrBuilder Builder for SpanOrQuery SpanOrTermsBuilder Builder that analyzes the text into a SpanOrQuery SpanQueryBuilderFactory Factory for ISpanQueryBuilder s SpanTermBuilder Builder for SpanTermQuery TermQueryBuilder Builder for TermQuery TermsFilterBuilder Builder for TermsFilter TermsQueryBuilder Builds a BooleanQuery from all of the terms found in the XML element using the choice of analyzer UserInputQueryBuilder UserInputQueryBuilder uses 1 of 2 strategies for thread-safe parsing: 1) Synchronizing access to \"Parse\" calls on a previously supplied QueryParser or.. 2) creating a new QueryParser object for each parse request Interfaces ISpanQueryBuilder Interface for retrieving a SpanQuery"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.html",
    "title": "Namespace Lucene.Net.Queries | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Queries Classes BooleanFilter A container Filter that allows Boolean composition of Filter s. Filter s are allocated into one of three logical constructs; SHOULD, MUST NOT, MUST The results Filter BitSet is constructed as follows: SHOULD Filters are OR'd together The resulting Filter is NOT'd with the NOT Filter s The resulting Filter is AND'd with the MUST Filter s BoostingQuery The BoostingQuery class can be used to effectively demote results that match a given query. Unlike the \"NOT\" clause, this still selects documents that contain undesirable terms, but reduces their overall score: Query balancedQuery = new BoostingQuery(positiveQuery, negativeQuery, 0.01f); In this scenario the positiveQuery contains the mandatory, desirable criteria which is used to select all matching documents, and the negativeQuery contains the undesirable elements which are simply used to lessen the scores. Documents that match the negativeQuery have their score multiplied by the supplied \"boost\" parameter, so this should be less than 1 to achieve a demoting effect This code was originally made available here: [WWW] http://marc.theaimsgroup.com/?l=lucene-user&m=108058407130459&w=2 and is documented here: http://wiki.apache.org/lucene-java/CommunityContributions ChainedFilter Allows multiple Filter s to be chained. Logical operations such as NOT and XOR are applied between filters. One operation can be used for all filters, or a specific operation can be declared for each filter. Order in which filters are called depends on the position of the filter in the chain. It's probably more efficient to place the most restrictive filters/least computationally-intensive filters first. CommonTermsQuery A query that executes high-frequency terms in a optional sub-query to prevent slow queries due to \"common\" terms like stopwords. This query builds 2 queries off the Add(Term) added terms: low-frequency terms are added to a required boolean clause and high-frequency terms are added to an optional boolean clause. The optional clause is only executed if the required \"low-frequency\" clause matches. Scores produced by this query will be slightly different than plain BooleanQuery scorer mainly due to differences in the Coord(Int32, Int32) number of leaf queries in the required boolean clause. In most cases, high-frequency terms are unlikely to significantly contribute to the document score unless at least one of the low-frequency terms are matched. This query can improve query execution times significantly if applicable. CommonTermsQuery has several advantages over stopword filtering at index or query time since a term can be \"classified\" based on the actual document frequency in the index and can prevent slow queries even across domains without specialized stopword files. Note: if the query only contains high-frequency terms the query is rewritten into a plain conjunction query ie. all high-frequency terms need to match in order to match a document. Collection initializer note: To create and populate a CommonTermsQuery in a single statement, you can use the following example as a guide: var query = new CommonTermsQuery() { new Term(\"field\", \"microsoft\"), new Term(\"field\", \"office\") }; CustomScoreProvider An instance of this subclass should be returned by GetCustomScoreProvider(AtomicReaderContext) , if you want to modify the custom score calculation of a CustomScoreQuery . Since Lucene 2.9, queries operate on each segment of an index separately, so the protected m_context field can be used to resolve doc IDs, as the supplied doc ID is per-segment and without knowledge of the IndexReader you cannot access the document or IFieldCache . @lucene.experimental @since 2.9.2 CustomScoreQuery Query that sets document score as a programmatic function of several (sub) scores: the score of its subQuery (any query) (optional) the score of its FunctionQuery (or queries). Subclasses can modify the computation by overriding GetCustomScoreProvider(AtomicReaderContext) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterClause A Filter that wrapped with an indication of how that filter is used when composed with another filter. (Follows the boolean logic in BooleanClause for composition of queries.) TermFilter A filter that includes documents that match with a specific term. TermsFilter Constructs a filter for docs matching any of the terms added to this class. Unlike a RangeFilter this can be used for filtering on multiple terms that are not necessarily in a sequence. An example might be a collection of primary keys from a database query result or perhaps a choice of \"category\" labels picked by the end user. As a filter, this is much faster than the equivalent query (a BooleanQuery with many \"should\" TermQuery s)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.html",
    "title": "Namespace Lucene.Net.Queries.Mlt | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Mlt Classes MoreLikeThis Generate \"more like this\" similarity queries. Based on this mail: Lucene does let you access the document frequency of terms, with DocFreq(Term) . Term frequencies can be computed by re-tokenizing the text, which, for a single document, is usually fast enough. But looking up the DocFreq(Term) of every term in the document is probably too slow. You can use some heuristics to prune the set of terms, to avoid calling DocFreq(Term) too much, or at all. Since you're trying to maximize a tf*idf score, you're probably most interested in terms with a high tf. Choosing a tf threshold even as low as two or three will radically reduce the number of terms under consideration. Another heuristic is that terms with a high idf (i.e., a low df) tend to be longer. So you could threshold the terms by the number of characters, not selecting anything less than, e.g., six or seven characters. With these sorts of heuristics you can usually find small set of, e.g., ten or fewer terms that do a pretty good job of characterizing a document. It all depends on what you're trying to do. If you're trying to eek out that last percent of precision and recall regardless of computational difficulty so that you can win a TREC competition, then the techniques I mention above are useless. But if you're trying to provide a \"more like this\" button on a search results page that does a decent job and has good performance, such techniques might be useful. An efficient, effective \"more-like-this\" query generator would be a great contribution, if anyone's interested. I'd imagine that it would take a Reader or a String (the document's text), analyzer Analyzer, and return a set of representative terms using heuristics like those above. The frequency and length thresholds could be parameters, etc. Doug Initial Usage This class has lots of options to try to make it efficient and flexible. The simplest possible usage is as follows. The bold fragment is specific to this class. IndexReader ir = ... IndexSearcher is = ... MoreLikeThis mlt = new MoreLikeThis(ir); TextReader target = ... // orig source of doc you want to find similarities to Query query = mlt.Like(target); Hits hits = is.Search(query); // now the usual iteration thru 'hits' - the only thing to watch for is to make sure //you ignore the doc if it matches your 'target' document, as it should be similar to itself Thus you: do your normal, Lucene setup for searching, create a MoreLikeThis, get the text of the doc you want to find similarities to then call one of the Like(TextReader, String) calls to generate a similarity query call the searcher to find the similar docs More Advanced Usage You may want to use the setter for FieldNames so you can examine multiple fields (e.g. body and title) for similarity. Depending on the size of your index and the size and makeup of your documents you may want to call the other set methods to control how the similarity queries are generated: MinTermFreq MinDocFreq MaxDocFreq SetMaxDocFreqPct(Int32) MinWordLen MaxWordLen MaxQueryTerms MaxNumTokensParsed StopWords MoreLikeThisQuery A simple wrapper for MoreLikeThis for use in scenarios where a Query object is required eg in custom QueryParser extensions. At query.Rewrite() time the reader is used to construct the actual MoreLikeThis object and obtain the real Query object."
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThis.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Mlt.MoreLikeThis.html",
    "title": "Class MoreLikeThis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MoreLikeThis Generate \"more like this\" similarity queries. Based on this mail: Lucene does let you access the document frequency of terms, with DocFreq(Term) . Term frequencies can be computed by re-tokenizing the text, which, for a single document, is usually fast enough. But looking up the DocFreq(Term) of every term in the document is probably too slow. You can use some heuristics to prune the set of terms, to avoid calling DocFreq(Term) too much, or at all. Since you're trying to maximize a tf*idf score, you're probably most interested in terms with a high tf. Choosing a tf threshold even as low as two or three will radically reduce the number of terms under consideration. Another heuristic is that terms with a high idf (i.e., a low df) tend to be longer. So you could threshold the terms by the number of characters, not selecting anything less than, e.g., six or seven characters. With these sorts of heuristics you can usually find small set of, e.g., ten or fewer terms that do a pretty good job of characterizing a document. It all depends on what you're trying to do. If you're trying to eek out that last percent of precision and recall regardless of computational difficulty so that you can win a TREC competition, then the techniques I mention above are useless. But if you're trying to provide a \"more like this\" button on a search results page that does a decent job and has good performance, such techniques might be useful. An efficient, effective \"more-like-this\" query generator would be a great contribution, if anyone's interested. I'd imagine that it would take a Reader or a String (the document's text), analyzer Analyzer, and return a set of representative terms using heuristics like those above. The frequency and length thresholds could be parameters, etc. Doug Initial Usage This class has lots of options to try to make it efficient and flexible. The simplest possible usage is as follows. The bold fragment is specific to this class. IndexReader ir = ... IndexSearcher is = ... MoreLikeThis mlt = new MoreLikeThis(ir); TextReader target = ... // orig source of doc you want to find similarities to Query query = mlt.Like(target); Hits hits = is.Search(query); // now the usual iteration thru 'hits' - the only thing to watch for is to make sure //you ignore the doc if it matches your 'target' document, as it should be similar to itself Thus you: do your normal, Lucene setup for searching, create a MoreLikeThis, get the text of the doc you want to find similarities to then call one of the Like(TextReader, String) calls to generate a similarity query call the searcher to find the similar docs More Advanced Usage You may want to use the setter for FieldNames so you can examine multiple fields (e.g. body and title) for similarity. Depending on the size of your index and the size and makeup of your documents you may want to call the other set methods to control how the similarity queries are generated: MinTermFreq MinDocFreq MaxDocFreq SetMaxDocFreqPct(Int32) MinWordLen MaxWordLen MaxQueryTerms MaxNumTokensParsed StopWords Inheritance System.Object MoreLikeThis Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Queries.Mlt Assembly : Lucene.Net.Queries.dll Syntax public sealed class MoreLikeThis Remarks Changes: Mark Harwood 29/02/04 Some bugfixing, some refactoring, some optimisation. bugfix: retrieveTerms(int docNum) was not working for indexes without a termvector -added missing code bugfix: No significant terms being created for fields with a termvector - because was only counting one occurrence per term/field pair in calculations(ie not including frequency info from TermVector) refactor: moved common code into isNoiseWord() optimise: when no termvector support available - used maxNumTermsParsed to limit amount of tokenization Constructors | Improve this Doc View Source MoreLikeThis(IndexReader) Constructor requiring an IndexReader . Declaration public MoreLikeThis(IndexReader ir) Parameters Type Name Description IndexReader ir | Improve this Doc View Source MoreLikeThis(IndexReader, TFIDFSimilarity) Declaration public MoreLikeThis(IndexReader ir, TFIDFSimilarity sim) Parameters Type Name Description IndexReader ir TFIDFSimilarity sim Fields | Improve this Doc View Source DEFAULT_BOOST Boost terms in query based on score. Declaration public static readonly bool DEFAULT_BOOST Field Value Type Description System.Boolean See Also ApplyBoost | Improve this Doc View Source DEFAULT_FIELD_NAMES Default field names. Null is used to specify that the field names should be looked up at runtime from the provided reader. Declaration public static readonly string[] DEFAULT_FIELD_NAMES Field Value Type Description System.String [] | Improve this Doc View Source DEFAULT_MAX_DOC_FREQ Ignore words which occur in more than this many docs. Declaration public static readonly int DEFAULT_MAX_DOC_FREQ Field Value Type Description System.Int32 See Also MaxDocFreq SetMaxDocFreqPct(Int32) | Improve this Doc View Source DEFAULT_MAX_NUM_TOKENS_PARSED Default maximum number of tokens to parse in each example doc field that is not stored with TermVector support. Declaration public static readonly int DEFAULT_MAX_NUM_TOKENS_PARSED Field Value Type Description System.Int32 See Also MaxNumTokensParsed | Improve this Doc View Source DEFAULT_MAX_QUERY_TERMS Return a Query with no more than this many terms. Declaration public static readonly int DEFAULT_MAX_QUERY_TERMS Field Value Type Description System.Int32 See Also MaxClauseCount MaxQueryTerms | Improve this Doc View Source DEFAULT_MAX_WORD_LENGTH Ignore words greater than this length or if 0 then this has no effect. Declaration public static readonly int DEFAULT_MAX_WORD_LENGTH Field Value Type Description System.Int32 See Also MaxWordLen | Improve this Doc View Source DEFAULT_MIN_DOC_FREQ Ignore words which do not occur in at least this many docs. Declaration public static readonly int DEFAULT_MIN_DOC_FREQ Field Value Type Description System.Int32 See Also MinDocFreq | Improve this Doc View Source DEFAULT_MIN_TERM_FREQ Ignore terms with less than this frequency in the source doc. Declaration public static readonly int DEFAULT_MIN_TERM_FREQ Field Value Type Description System.Int32 See Also MinTermFreq | Improve this Doc View Source DEFAULT_MIN_WORD_LENGTH Ignore words less than this length or if 0 then this has no effect. Declaration public static readonly int DEFAULT_MIN_WORD_LENGTH Field Value Type Description System.Int32 See Also MinWordLen | Improve this Doc View Source DEFAULT_STOP_WORDS Default set of stopwords. If null means to allow stop words. Declaration public static readonly ISet<string> DEFAULT_STOP_WORDS Field Value Type Description System.Collections.Generic.ISet < System.String > See Also StopWords Properties | Improve this Doc View Source Analyzer Gets or Sets an analyzer that will be used to parse source doc with. The default analyzer is not set. An analyzer is not required for generating a query with the Like(Int32) method, all other 'like' methods require an analyzer. Declaration public Analyzer Analyzer { get; set; } Property Value Type Description Analyzer | Improve this Doc View Source ApplyBoost Gets or Sets whether to boost terms in query based on \"score\" or not. The default is DEFAULT_BOOST . Declaration public bool ApplyBoost { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source BoostFactor Gets or Sets the boost factor used when boosting terms Declaration public float BoostFactor { get; set; } Property Value Type Description System.Single | Improve this Doc View Source FieldNames Gets or Sets the field names that will be used when generating the 'More Like This' query. The default field names that will be used is DEFAULT_FIELD_NAMES . Set this to null for the field names to be determined at runtime from the IndexReader provided in the constructor. Declaration public string[] FieldNames { get; set; } Property Value Type Description System.String [] | Improve this Doc View Source MaxDocFreq Gets or Sets the maximum frequency in which words may still appear. Words that appear in more than this many docs will be ignored. The default frequency is DEFAULT_MAX_DOC_FREQ . Declaration public int MaxDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxNumTokensParsed Declaration public int MaxNumTokensParsed { get; set; } Property Value Type Description System.Int32 Gets or Sets the maximum number of tokens to parse in each example doc field that is not stored with TermVector support See Also DEFAULT_MAX_NUM_TOKENS_PARSED | Improve this Doc View Source MaxQueryTerms Gets or Sets the maximum number of query terms that will be included in any generated query. The default is DEFAULT_MAX_QUERY_TERMS . Declaration public int MaxQueryTerms { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxWordLen Gets or Sets the maximum word length above which words will be ignored. Set this to 0 for no maximum word length. The default is DEFAULT_MAX_WORD_LENGTH . Declaration public int MaxWordLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinDocFreq Gets or Sets the frequency at which words will be ignored which do not occur in at least this many docs. The default frequency is DEFAULT_MIN_DOC_FREQ . Declaration public int MinDocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinTermFreq Gets or Sets the frequency below which terms will be ignored in the source doc. The default frequency is the DEFAULT_MIN_TERM_FREQ . Declaration public int MinTermFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MinWordLen Gets or Sets the minimum word length below which words will be ignored. Set this to 0 for no minimum word length. The default is DEFAULT_MIN_WORD_LENGTH . Declaration public int MinWordLen { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity For idf() calculations. Declaration public TFIDFSimilarity Similarity { get; set; } Property Value Type Description TFIDFSimilarity | Improve this Doc View Source StopWords Gets or Sets the set of stopwords. Any word in this set is considered \"uninteresting\" and ignored. Even if your Analyzer allows stopwords, you might want to tell the MoreLikeThis code to ignore them, as for the purposes of document similarity it seems reasonable to assume that \"a stop word is never interesting\". Declaration public ISet<string> StopWords { get; set; } Property Value Type Description System.Collections.Generic.ISet < System.String > Methods | Improve this Doc View Source DescribeParams() Describe the parameters that control how the \"more like this\" query is formed. Declaration public string DescribeParams() Returns Type Description System.String | Improve this Doc View Source Like(Int32) Return a query that will return docs like the passed lucene document ID. Declaration public Query Like(int docNum) Parameters Type Name Description System.Int32 docNum the documentID of the lucene doc to generate the 'More Like This\" query for. Returns Type Description Query a query that will return docs like the passed lucene document ID. | Improve this Doc View Source Like(TextReader, String) Return a query that will return docs like the passed System.IO.TextReader . Declaration public Query Like(TextReader r, string fieldName) Parameters Type Name Description System.IO.TextReader r System.String fieldName Returns Type Description Query a query that will return docs like the passed System.IO.TextReader . | Improve this Doc View Source RetrieveInterestingTerms(Int32) Declaration public string[] RetrieveInterestingTerms(int docNum) Parameters Type Name Description System.Int32 docNum Returns Type Description System.String [] See Also RetrieveInterestingTerms(TextReader, String) | Improve this Doc View Source RetrieveInterestingTerms(TextReader, String) Convenience routine to make it easy to return the most interesting words in a document. More advanced users will call RetrieveTerms(TextReader, String) directly. Declaration public string[] RetrieveInterestingTerms(TextReader r, string fieldName) Parameters Type Name Description System.IO.TextReader r the source document System.String fieldName field passed to analyzer to use when analyzing the content Returns Type Description System.String [] the most interesting words in the document See Also RetrieveTerms(TextReader, String) MaxQueryTerms | Improve this Doc View Source RetrieveTerms(Int32) Find words for a more-like-this query former. Declaration public PriorityQueue<object[]> RetrieveTerms(int docNum) Parameters Type Name Description System.Int32 docNum the id of the lucene document from which to find terms Returns Type Description PriorityQueue < System.Object []> Exceptions Type Condition System.IO.IOException | Improve this Doc View Source RetrieveTerms(TextReader, String) Find words for a more-like-this query former. The result is a priority queue of arrays with one entry for every word in the document. Each array has 6 elements. The elements are: The word ( System.String ) The top field that this word comes from ( System.String ) The score for this word ( System.Single ) The IDF value ( System.Single ) The frequency of this word in the index ( System.Int32 ) The frequency of this word in the source document ( System.Int32 ) This is a somewhat \"advanced\" routine, and in general only the 1st entry in the array is of interest. This method is exposed so that you can identify the \"interesting words\" in a document. For an easier method to call see RetrieveInterestingTerms(TextReader, String) . Declaration public PriorityQueue<object[]> RetrieveTerms(TextReader r, string fieldName) Parameters Type Name Description System.IO.TextReader r the reader that has the content of the document System.String fieldName field passed to the analyzer to use when analyzing the content Returns Type Description PriorityQueue < System.Object []> the most interesting words in the document ordered by score, with the highest scoring, or best entry, first Exceptions Type Condition System.IO.IOException See Also RetrieveInterestingTerms(TextReader, String) | Improve this Doc View Source SetMaxDocFreqPct(Int32) Set the maximum percentage in which words may still appear. Words that appear in more than this many percent of all docs will be ignored. Declaration public void SetMaxDocFreqPct(int maxPercentage) Parameters Type Name Description System.Int32 maxPercentage the maximum percentage of documents (0-100) that a term may appear in to be still considered relevant"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.html",
    "title": "Namespace Lucene.Net.Queries.Function | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function Classes BoostedQuery Query that is boosted by a ValueSource FunctionQuery Returns a score for each document based on a ValueSource , often some function of the value of a field. Note: This API is experimental and may change in non backward-compatible ways in the future FunctionQuery.AllScorer FunctionQuery.FunctionWeight FunctionValues Represents field values as different types. Normally created via a ValueSource for a particular field and reader. FunctionValues.ValueFiller Abstraction of the logic required to fill the value of a specified doc into a reusable MutableValue . Implementations of FunctionValues are encouraged to define their own implementations of FunctionValues.ValueFiller if their value is not a System.Single . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ValueSource Instantiates FunctionValues for a particular reader. Often used when creating a FunctionQuery . ValueSourceScorer Scorer which returns the result of SingleVal(Int32) as the score for a document."
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.Function.ValueSources.html",
    "title": "Namespace Lucene.Net.Queries.Function.ValueSources | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Queries.Function.ValueSources Classes BoolFunction Abstract parent class for those ValueSource implementations which apply boolean logic to their values ByteFieldSource Obtains System.Int32 field values from the FieldCache using GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. * BytesRefFieldSource An implementation for retrieving FunctionValues instances for System.String based fields. ConstNumberSource ConstNumberSource is the base class for all constant numbers ConstValueSource ConstValueSource returns a constant for all documents DefFunction ValueSource implementation which only returns the values from the provided ValueSource s which are available for a particular docId. Consequently, when combined with a ConstValueSource , this function serves as a way to return a default value when the values for a field are unavailable. DivSingleFunction Function to divide \"a\" by \"b\" NOTE: This was DivFloatFunction in Lucene DocFreqValueSource DocFreqValueSource returns the number of documents containing the term. This is a Lucene.NET INTERNAL API, use at your own risk DoubleConstValueSource Function that returns a constant double value for every document. DoubleFieldSource Obtains System.Double field values from GetDoubles(AtomicReader, String, FieldCache.IDoubleParser, Boolean) and makes those values available as other numeric types, casting as needed. DualSingleFunction Abstract ValueSource implementation which wraps two ValueSource s and applies an extendible System.Single function to their values. NOTE: This was DualFloatFunction in Lucene EnumFieldSource Obtains System.Int32 field values from GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. StrVal of the value is not the System.Int32 value, but its System.String (displayed) value FieldCacheSource A base class for ValueSource implementations that retrieve values for a single field from the FieldCache . IDFValueSource Function that returns Idf(Int64, Int64) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal IfFunction Depending on the System.Boolean value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.ifSource function, returns the value of the Lucene.Net.Queries.Function.ValueSources.IfFunction.trueSource or Lucene.Net.Queries.Function.ValueSources.IfFunction.falseSource function. Int16FieldSource Obtains System.Int16 field values from the FieldCache using GetInt16s(AtomicReader, String, FieldCache.IInt16Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was ShortFieldSource in Lucene Int32FieldSource Obtains System.Int32 field values from GetInt32s(AtomicReader, String, FieldCache.IInt32Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was IntFieldSource in Lucene Int64FieldSource Obtains System.Int64 field values from GetInt64s(AtomicReader, String, FieldCache.IInt64Parser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was LongFieldSource in Lucene JoinDocFreqValueSource Use a field value and find the Document Frequency within another field. @since solr 4.0 LinearSingleFunction LinearSingleFunction implements a linear function over another ValueSource . Normally Used as an argument to a FunctionQuery NOTE: This was LinearFloatFunction in Lucene LiteralValueSource Pass a the field value through as a System.String , no matter the type // Q: doesn't this mean it's a \"str\"? MaxDocValueSource Returns the value of MaxDoc for every document. This is the number of documents including deletions. MaxSingleFunction MaxSingleFunction returns the max of it's components. NOTE: This was MaxFloatFunction in Lucene MinSingleFunction MinSingleFunction returns the min of it's components. NOTE: This was MinFloatFunction in Lucene MultiBoolFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible System.Boolean function to their values. MultiFunction Abstract parent class for ValueSource implementations that wrap multiple ValueSource s and apply their own logic. MultiFunction.Values MultiSingleFunction Abstract ValueSource implementation which wraps multiple ValueSource s and applies an extendible System.Single function to their values. NOTE: This was MultiFloatFunction in Lucene MultiValueSource A ValueSource that abstractly represents ValueSource s for poly fields, and other things. NormValueSource Function that returns DecodeNormValue(Int64) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal NumDocsValueSource Returns the value of NumDocs for every document. This is the number of documents excluding deletions. OrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using StringIndex. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example: If there were only three field values: \"apple\",\"banana\",\"pear\" then ord(\"apple\")=1, ord(\"banana\")=2, ord(\"pear\")=3 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. PowSingleFunction Function to raise the base \"a\" to the power \"b\" NOTE: This was PowFloatFunction in Lucene ProductSingleFunction ProductSingleFunction returns the product of it's components. NOTE: This was ProductFloatFunction in Lucene QueryValueSource QueryValueSource returns the relevance score of the query RangeMapSingleFunction RangeMapSingleFunction implements a map function over another ValueSource whose values fall within min and max inclusive to target . Normally used as an argument to a FunctionQuery NOTE: This was RangeMapFloatFunction in Lucene ReciprocalSingleFunction ReciprocalSingleFunction implements a reciprocal function f(x) = a/(mx+b) , based on the System.Single value of a field or function as exported by ValueSource . When a and b are equal, and x>=0 , this function has a maximum value of 1 that drops as x increases. Increasing the value of a and b together results in a movement of the entire function to a flatter part of the curve. These properties make this an idea function for boosting more recent documents. Example: recip(ms(NOW,mydatefield),3.16e-11,1,1) A multiplier of 3.16e-11 changes the units from milliseconds to years (since there are about 3.16e10 milliseconds per year). Thus, a very recent date will yield a value close to 1/(0+1) or 1, a date a year in the past will get a multiplier of about 1/(1+1) or 1/2, and date two years old will yield 1/(2+1) or 1/3. NOTE: This was ReciprocalFloatFunction in Lucene ReverseOrdFieldSource Obtains the ordinal of the field value from the default Lucene FieldCache using GetTermsIndex(AtomicReader, String, Single) and reverses the order. The native lucene index order is used to assign an ordinal value for each field value. Field values (terms) are lexicographically ordered by unicode value, and numbered starting at 1. Example of reverse ordinal (rord): If there were only three field values: \"apple\",\"banana\",\"pear\" then rord(\"apple\")=3, rord(\"banana\")=2, ord(\"pear\")=1 WARNING: Ord depends on the position in an index and can thus change when other documents are inserted or deleted, or if a MultiSearcher is used. WARNING: as of Solr 1.4, ord() and rord() can cause excess memory use since they must use a FieldCache entry at the top level reader, while sorting and function queries now use entries at the segment level. Hence sorting or using a different function query, in addition to ord()/rord() will double memory use. ScaleSingleFunction Scales values to be between min and max . This implementation currently traverses all of the source values to obtain their min and max. This implementation currently cannot distinguish when documents have been deleted or documents that have no value, and 0.0 values will be used for these cases. This means that if values are normally all greater than 0.0, one can still end up with 0.0 as the min value to map from. In these cases, an appropriate map() function could be used as a workaround to change 0.0 to a value in the real range. NOTE: This was ScaleFloatFunction in Lucene SimpleBoolFunction BoolFunction implementation which applies an extendible System.Boolean function to the values of a single wrapped ValueSource . Functions this can be used for include whether a field has a value or not, or inverting the System.Boolean value of the wrapped ValueSource . SimpleSingleFunction A simple System.Single function with a single argument NOTE: This was SimpleFloatFunction in Lucene SingleFieldSource Obtains System.Single field values from GetSingles(AtomicReader, String, FieldCache.ISingleParser, Boolean) and makes those values available as other numeric types, casting as needed. NOTE: This was FloatFieldSource in Lucene SingularFunction A function with a single (one) argument. NOTE: This was SingleFunction in Lucene, changed to avoid conusion with operations on the datatype System.Single . SumSingleFunction SumSingleFunction returns the sum of its components. NOTE: This was SumFloatFunction in Lucene SumTotalTermFreqValueSource SumTotalTermFreqValueSource returns the number of tokens. (sum of term freqs across all documents, across all terms). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk TermFreqValueSource Function that returns Freq for the supplied term in every document. If the term does not exist in the document, returns 0. If frequencies are omitted, returns 1. TFValueSource Function that returns Tf(Single) for every document. Note that the configured Similarity for the field must be a subclass of TFIDFSimilarity @lucene.internal TotalTermFreqValueSource TotalTermFreqValueSource returns the total term freq (sum of term freqs across all documents). Returns -1 if frequencies were omitted for the field, or if the codec doesn't support this statistic. This is a Lucene.NET INTERNAL API, use at your own risk VectorValueSource Converts individual ValueSource instances to leverage the FunctionValues *Val functions that work with multiple values, i.e. DoubleVal(Int32, Double[])"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenGroup.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TokenGroup.html",
    "title": "Class TokenGroup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenGroup One, or several overlapping tokens, along with the score(s) and the scope of the original text Inheritance System.Object TokenGroup Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TokenGroup Constructors | Improve this Doc View Source TokenGroup(TokenStream) Declaration public TokenGroup(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Properties | Improve this Doc View Source EndOffset the end position in the original text Declaration public virtual int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumTokens the number of tokens in this group Declaration public virtual int NumTokens { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset the start position in the original text Declaration public virtual int StartOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalScore all tokens' scores summed up Declaration public virtual float TotalScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetScore(Int32) the \"n\"th score Declaration public virtual float GetScore(int index) Parameters Type Name Description System.Int32 index a value between 0 and numTokens -1 Returns Type Description System.Single | Improve this Doc View Source GetToken(Int32) the \"n\"th token Declaration public virtual Token GetToken(int index) Parameters Type Name Description System.Int32 index a value between 0 and numTokens -1 Returns Type Description Token"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TextFragment.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.TextFragment.html",
    "title": "Class TextFragment | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TextFragment Low-level class used to record information about a section of a document with a score. Inheritance System.Object TextFragment Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class TextFragment Constructors | Improve this Doc View Source TextFragment(StringBuilder, Int32, Int32) Declaration public TextFragment(StringBuilder markedUpText, int textStartPos, int fragNum) Parameters Type Name Description System.Text.StringBuilder markedUpText System.Int32 textStartPos System.Int32 fragNum Properties | Improve this Doc View Source FragNum the fragment sequence number Declaration public virtual int FragNum { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source Score Declaration public virtual float Score { get; protected set; } Property Value Type Description System.Single Methods | Improve this Doc View Source Follows(TextFragment) true if this fragment follows the one passed Declaration public virtual bool Follows(TextFragment fragment) Parameters Type Name Description TextFragment fragment Returns Type Description System.Boolean | Improve this Doc View Source Merge(TextFragment) Declaration public virtual void Merge(TextFragment frag2) Parameters Type Name Description TextFragment frag2 Fragment to be merged into this one | Improve this Doc View Source ToString() Returns the marked-up text for this text fragment Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermExtractor.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.QueryTermExtractor.html",
    "title": "Class QueryTermExtractor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryTermExtractor Utility class used to extract the terms used in a query, plus any weights. This class will not find terms for MultiTermQuery , RangeQuery and PrefixQuery classes so the caller must pass a rewritten query (see Rewrite(IndexReader) ) to obtain a list of expanded terms. Inheritance System.Object QueryTermExtractor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public static class QueryTermExtractor Methods | Improve this Doc View Source GetIdfWeightedTerms(Query, IndexReader, String) Extracts all terms texts of a given Query into an array of WeightedTerms Declaration public static WeightedTerm[] GetIdfWeightedTerms(Query query, IndexReader reader, string fieldName) Parameters Type Name Description Query query Query to extract term texts from IndexReader reader used to compute IDF which can be used to a) score selected fragments better b) use graded highlights eg chaning intensity of font color System.String fieldName the field on which Inverse Document Frequency (IDF) calculations are based Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query) Extracts all terms texts of a given Query into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query) Parameters Type Name Description Query query Query to extract term texts from Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query, Boolean) Extracts all terms texts of a given Query into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query, bool prohibited) Parameters Type Name Description Query query Query to extract term texts from System.Boolean prohibited true to extract \"prohibited\" terms, too Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights. | Improve this Doc View Source GetTerms(Query, Boolean, String) Extracts all terms texts of a given Query into an array of WeightedTerms Declaration public static WeightedTerm[] GetTerms(Query query, bool prohibited, string fieldName) Parameters Type Name Description Query query Query to extract term texts from System.Boolean prohibited true to extract \"prohibited\" terms, too System.String fieldName The fieldName used to filter query terms Returns Type Description WeightedTerm [] an array of the terms used in a query, plus their weights."
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.PositionSpan.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.PositionSpan.html",
    "title": "Class PositionSpan | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PositionSpan Utility class to record Positions Spans This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object PositionSpan Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public class PositionSpan Constructors | Improve this Doc View Source PositionSpan(Int32, Int32) Declaration public PositionSpan(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Properties | Improve this Doc View Source End Declaration public int End { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Declaration public int Start { get; set; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IScorer.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IScorer.html",
    "title": "Interface IScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IScorer A IScorer is responsible for scoring a stream of tokens. These token scores can then be used to compute TextFragment scores. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IScorer Properties | Improve this Doc View Source FragmentScore Called when the Highlighter has no more tokens for the current fragment - the IScorer returns the weighting it has derived for the most recent fragment, typically based on the results of GetTokenScore() . Declaration float FragmentScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source GetTokenScore() Called for each token in the current fragment. The Highlighter will increment the TokenStream passed to init on every call. Declaration float GetTokenScore() Returns Type Description System.Single a score which is passed to the Highlighter class to influence the mark-up of the text (this return value is NOT used to score the fragment) | Improve this Doc View Source Init(TokenStream) Called to init the Scorer with a TokenStream . You can grab references to the attributes you are interested in here and access them from GetTokenScore() . Declaration TokenStream Init(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream the TokenStream that will be scored. Returns Type Description TokenStream either a TokenStream that the Highlighter should continue using (eg if you read the tokenSream in this method) or null to continue using the same TokenStream that was passed in. Exceptions Type Condition System.IO.IOException If there is a low-level I/O error | Improve this Doc View Source StartFragment(TextFragment) Called when a new fragment is started for consideration. Declaration void StartFragment(TextFragment newFragment) Parameters Type Name Description TextFragment newFragment the fragment that will be scored next"
  },
  "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFragmenter.html": {
    "href": "api/Lucene.Net.Highlighter/Lucene.Net.Search.Highlight.IFragmenter.html",
    "title": "Interface IFragmenter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IFragmenter Implements the policy for breaking text into multiple fragments for consideration by the Highlighter class. A sophisticated implementation may do this on the basis of detecting end of sentences in the text. Namespace : Lucene.Net.Search.Highlight Assembly : Lucene.Net.Highlighter.dll Syntax public interface IFragmenter Methods | Improve this Doc View Source IsNewFragment() Test to see if this token from the stream should be held in a new TextFragment . Every time this is called, the TokenStream passed to Start(String, TokenStream) will have been incremented. Declaration bool IsNewFragment() Returns Type Description System.Boolean | Improve this Doc View Source Start(String, TokenStream) Initializes the Fragmenter. You can grab references to the Attributes you are interested in from tokenStream and then access the values in IsNewFragment() . Declaration void Start(string originalText, TokenStream tokenStream) Parameters Type Name Description System.String originalText the original source text TokenStream tokenStream tokenStream the TokenStream to be fragmented"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy.html",
    "title": "Class SearcherTaxonomyManager.SearcherAndTaxonomy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearcherTaxonomyManager.SearcherAndTaxonomy Holds a matched pair of IndexSearcher and TaxonomyReader Inheritance System.Object SearcherTaxonomyManager.SearcherAndTaxonomy Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SearcherAndTaxonomy Constructors | Improve this Doc View Source SearcherAndTaxonomy(IndexSearcher, DirectoryTaxonomyReader) Create a SearcherTaxonomyManager.SearcherAndTaxonomy Declaration public SearcherAndTaxonomy(IndexSearcher searcher, DirectoryTaxonomyReader taxonomyReader) Parameters Type Name Description IndexSearcher searcher DirectoryTaxonomyReader taxonomyReader Properties | Improve this Doc View Source Searcher Point-in-time IndexSearcher . Declaration public IndexSearcher Searcher { get; } Property Value Type Description IndexSearcher | Improve this Doc View Source TaxonomyReader Matching point-in-time DirectoryTaxonomyReader . Declaration public DirectoryTaxonomyReader TaxonomyReader { get; } Property Value Type Description DirectoryTaxonomyReader"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.PrintTaxonomyStats.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.PrintTaxonomyStats.html",
    "title": "Class PrintTaxonomyStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrintTaxonomyStats Prints how many ords are under each dimension. Inheritance System.Object PrintTaxonomyStats Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class PrintTaxonomyStats Constructors | Improve this Doc View Source PrintTaxonomyStats() Sole constructor. Declaration public PrintTaxonomyStats() Methods | Improve this Doc View Source Main(String[]) Command-line tool. Declaration public static int Main(string[] args) Parameters Type Name Description System.String [] args Returns Type Description System.Int32 | Improve this Doc View Source PrintStats(TaxonomyReader, TextWriter, Boolean) Recursively prints stats for all ordinals. Declaration public static void PrintStats(TaxonomyReader r, TextWriter out, bool printTree) Parameters Type Name Description TaxonomyReader r System.IO.TextWriter out System.Boolean printTree"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ParallelTaxonomyArrays.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.ParallelTaxonomyArrays.html",
    "title": "Class ParallelTaxonomyArrays | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ParallelTaxonomyArrays Returns 3 arrays for traversing the taxonomy: Parents : Parents[i] denotes the parent of category ordinal i . Children : Children[i] denotes a child of category ordinal i . Siblings : Siblings[i] denotes the sibling of category ordinal i . To traverse the taxonomy tree, you typically start with Children[0] (ordinal 0 is reserved for ROOT), and then depends if you want to do DFS or BFS, you call Children[Children[0]] or Siblings[Children[0]] and so forth, respectively. NOTE: you are not expected to modify the values of the arrays, since the arrays are shared with other threads. @lucene.experimental Inheritance System.Object ParallelTaxonomyArrays Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class ParallelTaxonomyArrays Constructors | Improve this Doc View Source ParallelTaxonomyArrays() Sole constructor. Declaration public ParallelTaxonomyArrays() Properties | Improve this Doc View Source Children Returns the children array, where Children[i] denotes a child of category ordinal i . Declaration public abstract int[] Children { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Parents Returns the parents array, where Parents[i] denotes the parent of category ordinal i . Declaration public abstract int[] Parents { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Siblings Returns the siblings array, where Siblings[i] denotes the sibling of category ordinal i . Declaration public abstract int[] Siblings { get; } Property Value Type Description System.Int32 []"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.html",
    "title": "Class OrdinalsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrdinalsReader Provides per-document ordinals. Inheritance System.Object OrdinalsReader CachedOrdinalsReader DocValuesOrdinalsReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class OrdinalsReader Constructors | Improve this Doc View Source OrdinalsReader() Default constructor. Declaration public OrdinalsReader() Properties | Improve this Doc View Source IndexFieldName Returns the indexed field name this OrdinalsReader is reading from. Declaration public abstract string IndexFieldName { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetReader(AtomicReaderContext) Set current atomic reader. Declaration public abstract OrdinalsReader.OrdinalsSegmentReader GetReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.OrdinalsSegmentReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.OrdinalsReader.OrdinalsSegmentReader.html",
    "title": "Class OrdinalsReader.OrdinalsSegmentReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OrdinalsReader.OrdinalsSegmentReader Returns ordinals for documents in one segment. Inheritance System.Object OrdinalsReader.OrdinalsSegmentReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class OrdinalsSegmentReader Constructors | Improve this Doc View Source OrdinalsSegmentReader() Default constructor. Declaration public OrdinalsSegmentReader() Methods | Improve this Doc View Source Get(Int32, Int32sRef) Get the ordinals for this document. The ordinals . Offset must always be 0! Declaration public abstract void Get(int doc, Int32sRef ordinals) Parameters Type Name Description System.Int32 doc Int32sRef ordinals"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.WordlistLoader.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.WordlistLoader.html",
    "title": "Class WordlistLoader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class WordlistLoader Loader for text files that represent a list of stopwords. IOUtils to obtain System.IO.TextReader instances. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object WordlistLoader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class WordlistLoader Methods | Improve this Doc View Source GetLines(Stream, Encoding) Accesses a resource by name and returns the (non comment) lines containing data using the given character encoding. A comment line is any line that starts with the character \"#\" Declaration public static IList<string> GetLines(Stream stream, Encoding encoding) Parameters Type Name Description System.IO.Stream stream System.Text.Encoding encoding Returns Type Description System.Collections.Generic.IList < System.String > a list of non-blank non-comment lines with whitespace trimmed Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetSnowballWordSet(TextReader, CharArraySet) Reads stopwords from a stopword list in Snowball format. The snowball format is the following: Lines may contain multiple words separated by whitespace. The comment character is the vertical line (|). Lines may contain trailing comments. Declaration public static CharArraySet GetSnowballWordSet(TextReader reader, CharArraySet result) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing a Snowball stopword list CharArraySet result the CharArraySet to fill with the readers words Returns Type Description CharArraySet the given CharArraySet with the reader's words | Improve this Doc View Source GetSnowballWordSet(TextReader, LuceneVersion) Reads stopwords from a stopword list in Snowball format. The snowball format is the following: Lines may contain multiple words separated by whitespace. The comment character is the vertical line (|). Lines may contain trailing comments. Declaration public static CharArraySet GetSnowballWordSet(TextReader reader, LuceneVersion matchVersion) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing a Snowball stopword list LuceneVersion matchVersion the Lucene LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words | Improve this Doc View Source GetStemDict(TextReader, CharArrayMap<String>) Reads a stem dictionary. Each line contains: word \\t stem (i.e. two tab separated words) Declaration public static CharArrayMap<string> GetStemDict(TextReader reader, CharArrayMap<string> result) Parameters Type Name Description System.IO.TextReader reader CharArrayMap < System.String > result Returns Type Description CharArrayMap < System.String > stem dictionary that overrules the stemming algorithm Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. | Improve this Doc View Source GetWordSet(TextReader, CharArraySet) Reads lines from a System.IO.TextReader and adds every line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the System.IO.TextReader should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, CharArraySet result) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing the wordlist CharArraySet result the CharArraySet to fill with the readers words Returns Type Description CharArraySet the given CharArraySet with the reader's words | Improve this Doc View Source GetWordSet(TextReader, LuceneVersion) Reads lines from a System.IO.TextReader and adds every line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the System.IO.TextReader should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, LuceneVersion matchVersion) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing the wordlist LuceneVersion matchVersion the LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words | Improve this Doc View Source GetWordSet(TextReader, String, CharArraySet) Reads lines from a System.IO.TextReader and adds every non-comment line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the System.IO.TextReader should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, string comment, CharArraySet result) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing the wordlist System.String comment The string representing a comment. CharArraySet result the CharArraySet to fill with the readers words Returns Type Description CharArraySet the given CharArraySet with the reader's words | Improve this Doc View Source GetWordSet(TextReader, String, LuceneVersion) Reads lines from a System.IO.TextReader and adds every non-comment line as an entry to a CharArraySet (omitting leading and trailing whitespace). Every line of the System.IO.TextReader should contain only one word. The words need to be in lowercase if you make use of an Analyzer which uses LowerCaseFilter (like StandardAnalyzer ). Declaration public static CharArraySet GetWordSet(TextReader reader, string comment, LuceneVersion matchVersion) Parameters Type Name Description System.IO.TextReader reader System.IO.TextReader containing the wordlist System.String comment The string representing a comment. LuceneVersion matchVersion the LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.StemmerUtil.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.StemmerUtil.html",
    "title": "Class StemmerUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StemmerUtil Some commonly-used stemming functions This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object StemmerUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StemmerUtil Methods | Improve this Doc View Source Delete(Char[], Int32, Int32) Delete a character in-place Declaration public static int Delete(char[] s, int pos, int len) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 pos Position of character to delete System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after deletion | Improve this Doc View Source DeleteN(Char[], Int32, Int32, Int32) Delete n characters in-place Declaration public static int DeleteN(char[] s, int pos, int len, int nChars) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 pos Position of character to delete System.Int32 len Length of input buffer System.Int32 nChars number of characters to delete Returns Type Description System.Int32 length of input buffer after deletion | Improve this Doc View Source EndsWith(Char[], Int32, Char[]) Returns true if the character array ends with the suffix. Declaration public static bool EndsWith(char[] s, int len, char[] suffix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.Char [] suffix Suffix string to test Returns Type Description System.Boolean true if s ends with suffix | Improve this Doc View Source EndsWith(Char[], Int32, String) Returns true if the character array ends with the suffix. Declaration public static bool EndsWith(char[] s, int len, string suffix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.String suffix Suffix string to test Returns Type Description System.Boolean true if s ends with suffix | Improve this Doc View Source StartsWith(Char[], Int32, String) Returns true if the character array starts with the prefix. Declaration public static bool StartsWith(char[] s, int len, string prefix) Parameters Type Name Description System.Char [] s Input Buffer System.Int32 len length of input buffer System.String prefix Prefix string to test Returns Type Description System.Boolean true if s starts with prefix"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.RollingCharBuffer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.RollingCharBuffer.html",
    "title": "Class RollingCharBuffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RollingCharBuffer Acts like a forever growing char[] as you read characters into it from the provided reader, but internally it uses a circular buffer to only hold the characters that haven't been freed yet. This is like a PushbackReader, except you don't have to specify up-front the max size of the buffer, but you do have to periodically call FreeBefore(Int32) . Inheritance System.Object RollingCharBuffer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RollingCharBuffer Methods | Improve this Doc View Source FreeBefore(Int32) Call this to notify us that no chars before this absolute position are needed anymore. Declaration public void FreeBefore(int pos) Parameters Type Name Description System.Int32 pos | Improve this Doc View Source Get(Int32) Absolute position read. NOTE: pos must not jump ahead by more than 1! Ie, it's OK to read arbitarily far back (just not prior to the last FreeBefore(Int32) , but NOT ok to read arbitrarily far ahead. Returns -1 if you hit EOF. Declaration public int Get(int pos) Parameters Type Name Description System.Int32 pos Returns Type Description System.Int32 | Improve this Doc View Source Get(Int32, Int32) Declaration public char[] Get(int posStart, int length) Parameters Type Name Description System.Int32 posStart System.Int32 length Returns Type Description System.Char [] | Improve this Doc View Source Reset(TextReader) Clear array and switch to new reader. Declaration public void Reset(TextReader reader) Parameters Type Name Description System.IO.TextReader reader"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.IResourceLoaderAware.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.IResourceLoaderAware.html",
    "title": "Interface IResourceLoaderAware | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IResourceLoaderAware Interface for a component that needs to be initialized by an implementation of IResourceLoader . Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IResourceLoaderAware Methods | Improve this Doc View Source Inform(IResourceLoader) Initializes this component with the provided IResourceLoader (used for loading types, embedded resources, files, etc). Declaration void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader See Also IResourceLoader"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.IResourceLoader.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.IResourceLoader.html",
    "title": "Interface IResourceLoader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IResourceLoader Abstraction for loading resources (streams, files, and classes). Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IResourceLoader Methods | Improve this Doc View Source FindType(String) Finds class of the name NOTE: This was findClass() in Lucene Declaration Type FindType(string cname) Parameters Type Name Description System.String cname Returns Type Description System.Type | Improve this Doc View Source NewInstance<T>(String) Creates an instance of the name and expected type Declaration T NewInstance<T>(string cname) Parameters Type Name Description System.String cname Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source OpenResource(String) Opens a named resource Declaration Stream OpenResource(string resource) Parameters Type Name Description System.String resource Returns Type Description System.IO.Stream"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.IMultiTermAwareComponent.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Util.IMultiTermAwareComponent.html",
    "title": "Interface IMultiTermAwareComponent | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IMultiTermAwareComponent Add to any analysis factory component to allow returning an analysis component factory for use with partial terms in prefix queries, wildcard queries, range query endpoints, regex queries, etc. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Analysis.Util Assembly : Lucene.Net.Analysis.Common.dll Syntax public interface IMultiTermAwareComponent Methods | Improve this Doc View Source GetMultiTermComponent() Returns an analysis component to handle analysis if multi-term queries. The returned component must be a TokenizerFactory , TokenFilterFactory or CharFilterFactory . Declaration AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.IPhonemeExpr.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Phonetic.Language.Bm.IPhonemeExpr.html",
    "title": "Interface IPhonemeExpr | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPhonemeExpr Namespace : Lucene.Net.Analysis.Phonetic.Language.Bm Assembly : Lucene.Net.Analysis.Phonetic.dll Syntax public interface IPhonemeExpr Properties | Improve this Doc View Source Phonemes Declaration IList<Phoneme> Phonemes { get; } Property Value Type Description System.Collections.Generic.IList < Phoneme >"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.html",
    "title": "Namespace Lucene.Net.Analysis.Payloads | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Payloads Classes AbstractEncoder Base class for payload encoders. DelimitedPayloadTokenFilter Characters before the delimiter are the \"token\", those after are the payload. For example, if the delimiter is '|', then for the string \"foo|bar\", foo is the token and \"bar\" is a payload. Note, you can also include a IPayloadEncoder to convert the payload in an appropriate way (from characters to bytes). Note make sure your Tokenizer doesn't split on the delimiter, or this won't work DelimitedPayloadTokenFilterFactory Factory for DelimitedPayloadTokenFilter . <fieldType name=\"text_dlmtd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DelimitedPayloadTokenFilterFactory\" encoder=\"float\" delimiter=\"|\"/> </analyzer> </fieldType> IdentityEncoder Does nothing other than convert the char array to a byte array using the specified encoding. IntegerEncoder Encode a character array System.Int32 as a BytesRef . See EncodeInt32(Int32, Byte[], Int32) . NumericPayloadTokenFilter Assigns a payload to a token based on the Type NumericPayloadTokenFilterFactory Factory for NumericPayloadTokenFilter . <fieldType name=\"text_numpayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.NumericPayloadTokenFilterFactory\" payload=\"24\" typeMatch=\"word\"/> </analyzer> </fieldType> PayloadHelper Utility methods for encoding payloads. SingleEncoder Encode a character array System.Single as a BytesRef . NOTE: This was FloatEncoder in Lucene TokenOffsetPayloadTokenFilter Adds the StartOffset and EndOffset First 4 bytes are the start TokenOffsetPayloadTokenFilterFactory Factory for TokenOffsetPayloadTokenFilter . <fieldType name=\"text_tokenoffset\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TokenOffsetPayloadTokenFilterFactory\"/> </analyzer> </fieldType> TypeAsPayloadTokenFilter Makes the Type a payload. Encodes the type using System.Text.Encoding.UTF8.GetBytes(string) TypeAsPayloadTokenFilterFactory Factory for TypeAsPayloadTokenFilter . <fieldType name=\"text_typeaspayload\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.TypeAsPayloadTokenFilterFactory\"/> </analyzer> </fieldType> Interfaces IPayloadEncoder Mainly for use with the DelimitedPayloadTokenFilter , converts char buffers to BytesRef . NOTE: This interface is subject to change"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.PayloadHelper.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Payloads.PayloadHelper.html",
    "title": "Class PayloadHelper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PayloadHelper Utility methods for encoding payloads. Inheritance System.Object PayloadHelper Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Payloads Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PayloadHelper Methods | Improve this Doc View Source DecodeInt32(Byte[], Int32) NOTE: This was decodeInt() in Lucene Declaration public static int DecodeInt32(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes System.Int32 offset Returns Type Description System.Int32 | Improve this Doc View Source DecodeSingle(Byte[]) NOTE: This was decodeFloat() in Lucene Declaration public static float DecodeSingle(byte[] bytes) Parameters Type Name Description System.Byte [] bytes Returns Type Description System.Single the decoded float See Also DecodeSingle(Byte[], Int32) EncodeSingle(Single) | Improve this Doc View Source DecodeSingle(Byte[], Int32) Decode the payload that was encoded using EncodeSingle(Single) . NOTE: the length of the array must be at least offset + 4 long. NOTE: This was decodeFloat() in Lucene Declaration public static float DecodeSingle(byte[] bytes, int offset) Parameters Type Name Description System.Byte [] bytes The bytes to decode System.Int32 offset The offset into the array. Returns Type Description System.Single The float that was encoded See Also EncodeSingle(Single) | Improve this Doc View Source EncodeInt32(Int32) NOTE: This was encodeInt() in Lucene Declaration public static byte[] EncodeInt32(int payload) Parameters Type Name Description System.Int32 payload Returns Type Description System.Byte [] | Improve this Doc View Source EncodeInt32(Int32, Byte[], Int32) NOTE: This was encodeInt() in Lucene Declaration public static byte[] EncodeInt32(int payload, byte[] data, int offset) Parameters Type Name Description System.Int32 payload System.Byte [] data System.Int32 offset Returns Type Description System.Byte [] | Improve this Doc View Source EncodeSingle(Single) NOTE: This was encodeFloat() in Lucene Declaration public static byte[] EncodeSingle(float payload) Parameters Type Name Description System.Single payload Returns Type Description System.Byte [] | Improve this Doc View Source EncodeSingle(Single, Byte[], Int32) NOTE: This was encodeFloat() in Lucene Declaration public static byte[] EncodeSingle(float payload, byte[] data, int offset) Parameters Type Name Description System.Single payload System.Byte [] data System.Int32 offset Returns Type Description System.Byte []"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Token.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Analyzed token with morphological data from its dictionary. Inheritance System.Object Token Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public class Token Constructors | Improve this Doc View Source Token(Int32, Char[], Int32, Int32, JapaneseTokenizerType, Int32, IDictionary) Declaration public Token(int wordId, char[] surfaceForm, int offset, int length, JapaneseTokenizerType type, int position, IDictionary dictionary) Parameters Type Name Description System.Int32 wordId System.Char [] surfaceForm System.Int32 offset System.Int32 length JapaneseTokenizerType type System.Int32 position IDictionary dictionary Properties | Improve this Doc View Source Length length of surfaceForm Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset offset into surfaceForm Declaration public virtual int Offset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Position Get index of this token in input text. Returns position of token. Declaration public virtual int Position { get; } Property Value Type Description System.Int32 | Improve this Doc View Source PositionLength Gets or Sets the length (in tokens) of this token. For normal tokens this is 1; for compound tokens it's > 1. Declaration public virtual int PositionLength { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source SurfaceForm surfaceForm Declaration public virtual char[] SurfaceForm { get; } Property Value Type Description System.Char [] Methods | Improve this Doc View Source GetBaseForm() base form or null if token is not inflected Declaration public virtual string GetBaseForm() Returns Type Description System.String base form or null if token is not inflected | Improve this Doc View Source GetInflectionForm() inflection form or null Declaration public virtual string GetInflectionForm() Returns Type Description System.String inflection form or null | Improve this Doc View Source GetInflectionType() inflection type or null Declaration public virtual string GetInflectionType() Returns Type Description System.String inflection type or null | Improve this Doc View Source GetPartOfSpeech() part of speech. Declaration public virtual string GetPartOfSpeech() Returns Type Description System.String part of speech. | Improve this Doc View Source GetPronunciation() pronunciation. null if token doesn't have pronunciation. Declaration public virtual string GetPronunciation() Returns Type Description System.String pronunciation. null if token doesn't have pronunciation. | Improve this Doc View Source GetReading() reading. null if token doesn't have reading. Declaration public virtual string GetReading() Returns Type Description System.String reading. null if token doesn't have reading. | Improve this Doc View Source GetSurfaceFormString() surfaceForm as a String Declaration public virtual string GetSurfaceFormString() Returns Type Description System.String surfaceForm as a String | Improve this Doc View Source IsKnown() Returns true if this token is known word. Declaration public virtual bool IsKnown() Returns Type Description System.Boolean true if this token is in standard dictionary. false if not. | Improve this Doc View Source IsUnknown() Returns true if this token is unknown word. Declaration public virtual bool IsUnknown() Returns Type Description System.Boolean true if this token is unknown word. false if not. | Improve this Doc View Source IsUser() Returns true if this token is defined in user dictionary. Declaration public virtual bool IsUser() Returns Type Description System.Boolean true if this token is in user dictionary. false if not. | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseTokenizerType.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseTokenizerType.html",
    "title": "Enum JapaneseTokenizerType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum JapaneseTokenizerType Token type reflecting the original source of this token Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum JapaneseTokenizerType Fields Name Description KNOWN Known words from the system dictionary. UNKNOWN Unknown words (heuristically segmented). USER Known words from the user dictionary."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseTokenizerMode.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ja.JapaneseTokenizerMode.html",
    "title": "Enum JapaneseTokenizerMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum JapaneseTokenizerMode Tokenization mode: this determines how the tokenizer handles compound and unknown words. Namespace : Lucene.Net.Analysis.Ja Assembly : Lucene.Net.Analysis.Kuromoji.dll Syntax public enum JapaneseTokenizerMode Fields Name Description EXTENDED Extended mode outputs unigrams for unknown words. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NORMAL Ordinary segmentation: no decomposition for compounds, SEARCH Segmentation geared towards search: this includes a decompounding process for long nouns, also including the full compound token as a synonym."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Eu.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Eu.html",
    "title": "Namespace Lucene.Net.Analysis.Eu | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Eu Classes BasqueAnalyzer Analyzer for Basque."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.html",
    "title": "Namespace Lucene.Net.Analysis.Es | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Es Classes SpanishAnalyzer Analyzer for Spanish. You must specify the required LuceneVersion compatibility when creating SpanishAnalyzer : As of 3.6, SpanishLightStemFilter is used for less aggressive stemming. SpanishLightStemFilter A TokenFilter that applies SpanishLightStemmer to stem Spanish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SpanishLightStemFilterFactory Factory for SpanishLightStemFilter . <fieldType name=\"text_eslgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.SpanishLightStemFilterFactory\"/> </analyzer> </fieldType> SpanishLightStemmer Light Stemmer for Spanish This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.SpanishLightStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Es.SpanishLightStemmer.html",
    "title": "Class SpanishLightStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanishLightStemmer Light Stemmer for Spanish This stemmer implements the algorithm described in: Report on CLEF-2001 Experiments Jacques Savoy Inheritance System.Object SpanishLightStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Es Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SpanishLightStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.html",
    "title": "Namespace Lucene.Net.Analysis.En | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.En Classes EnglishAnalyzer Analyzer for English. EnglishMinimalStemFilter A TokenFilter that applies EnglishMinimalStemmer to stem English words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . EnglishMinimalStemFilterFactory Factory for EnglishMinimalStemFilter . <fieldType name=\"text_enminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishMinimalStemFilterFactory\"/> </analyzer> </fieldType> EnglishMinimalStemmer Minimal plural stemmer for English. This stemmer implements the \"S-Stemmer\" from How Effective Is Suffixing? Donna Harman. EnglishPossessiveFilter TokenFilter that removes possessives (trailing 's) from words. You must specify the required LuceneVersion compatibility when creating EnglishPossessiveFilter : As of 3.6, U+2019 RIGHT SINGLE QUOTATION MARK and U+FF07 FULLWIDTH APOSTROPHE are also treated as quotation marks. EnglishPossessiveFilterFactory Factory for EnglishPossessiveFilter . <fieldType name=\"text_enpossessive\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.EnglishPossessiveFilterFactory\"/> </analyzer> </fieldType> KStemFilter A high-performance kstem filter for english. See \"Viewing Morphology as an Inference Process\" (Krovetz, R., Proceedings of the Sixteenth Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, 191-203, 1993). All terms must already be lowercased for this filter to work correctly. Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory KStemFilterFactory Factory for KStemFilter . <fieldType name=\"text_kstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.KStemFilterFactory\"/> </analyzer> </fieldType> KStemmer This class implements the Kstem algorithm PorterStemFilter Transforms the token stream as per the Porter stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! To use this filter with other analyzers, you'll want to write an Analyzer class that sets up the TokenStream chain as you want it. To use this with LowerCaseTokenizer, for example, you'd write an analyzer like this: class MyAnalyzer : Analyzer { protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) { Tokenizer source = new LowerCaseTokenizer(version, reader); return new TokenStreamComponents(source, new PorterStemFilter(source)); } } Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory PorterStemFilterFactory Factory for PorterStemFilter . <fieldType name=\"text_porterstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PorterStemFilterFactory\"/> </analyzer> </fieldType>"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.KStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.En.KStemmer.html",
    "title": "Class KStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class KStemmer This class implements the Kstem algorithm Inheritance System.Object KStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.En Assembly : Lucene.Net.Analysis.Common.dll Syntax public class KStemmer Remarks Title: Kstemmer Description: This is a java version of Bob Krovetz' kstem stemmer Copyright: Copyright 2008, Luicid Imagination, Inc. Copyright: Copyright 2003, CIIR University of Massachusetts Amherst ( http://ciir.cs.umass.edu )"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.html",
    "title": "Namespace Lucene.Net.Analysis.CharFilters | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.CharFilters Classes BaseCharFilter Base utility class for implementing a CharFilter . You subclass this, and then record mappings by calling AddOffCorrectMap(Int32, Int32) , and then invoke the correct method to correct an offset. HTMLStripCharFilter A CharFilter that wraps another System.IO.TextReader and attempts to strip out HTML constructs. HTMLStripCharFilterFactory Factory for HTMLStripCharFilter . <fieldType name=\"text_html\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.HTMLStripCharFilterFactory\" escapedTags=\"a, title\" /> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> MappingCharFilter Simplistic CharFilter that applies the mappings contained in a NormalizeCharMap to the character stream, and correcting the resulting changes to the offsets. Matching is greedy (longest pattern matching at a given point wins). Replacement is allowed to be the empty string. MappingCharFilterFactory Factory for MappingCharFilter . <fieldType name=\"text_map\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <charFilter class=\"solr.MappingCharFilterFactory\" mapping=\"mapping.txt\"/> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> </analyzer> </fieldType> @since Solr 1.4 NormalizeCharMap Holds a map of System.String input to System.String output, to be used with NormalizeCharMap.Builder . Use the MappingCharFilter to create this. NormalizeCharMap.Builder Builds an NormalizeCharMap. Call add() until you have added all the mappings, then call build() to get a NormalizeCharMap @lucene.experimental"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.html",
    "title": "Class NormalizeCharMap | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizeCharMap Holds a map of System.String input to System.String output, to be used with NormalizeCharMap.Builder . Use the MappingCharFilter to create this. Inheritance System.Object NormalizeCharMap Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class NormalizeCharMap"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.Builder.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CharFilters.NormalizeCharMap.Builder.html",
    "title": "Class NormalizeCharMap.Builder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizeCharMap.Builder Builds an NormalizeCharMap. Call add() until you have added all the mappings, then call build() to get a NormalizeCharMap @lucene.experimental Inheritance System.Object NormalizeCharMap.Builder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CharFilters Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Builder Methods | Improve this Doc View Source Add(String, String) Records a replacement to be applied to the input stream. Whenever singleMatch occurs in the input, it will be replaced with replacement . Declaration public virtual void Add(string match, string replacement) Parameters Type Name Description System.String match input String to be replaced System.String replacement output String Exceptions Type Condition System.ArgumentException if match is the empty string, or was already previously added | Improve this Doc View Source Build() Builds the NormalizeCharMap ; call this once you are done calling Add(String, String) . Declaration public virtual NormalizeCharMap Build() Returns Type Description NormalizeCharMap"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ca.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ca.html",
    "title": "Namespace Lucene.Net.Analysis.Ca | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ca Classes CatalanAnalyzer Analyzer for Catalan. You must specify the required LuceneVersion compatibility when creating CatalanAnalyzer:"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.html",
    "title": "Namespace Lucene.Net.Analysis.Br | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Br Classes BrazilianAnalyzer Analyzer for Brazilian Portuguese language. Supports an external list of stopwords (words that will not be indexed at all) and an external list of exclusions (words that will not be stemmed, but indexed). NOTE : This class uses the same LuceneVersion dependent settings as StandardAnalyzer . BrazilianStemFilter A TokenFilter that applies BrazilianStemmer . To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . BrazilianStemFilterFactory Factory for BrazilianStemFilter . <fieldType name=\"text_brstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BrazilianStemFilterFactory\"/> </analyzer> </fieldType> BrazilianStemmer A stemmer for Brazilian Portuguese words."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.BrazilianStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Br.BrazilianStemmer.html",
    "title": "Class BrazilianStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BrazilianStemmer A stemmer for Brazilian Portuguese words. Inheritance System.Object BrazilianStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Br Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BrazilianStemmer Constructors | Improve this Doc View Source BrazilianStemmer() Declaration public BrazilianStemmer() Methods | Improve this Doc View Source Log() For log and debug purpose Declaration public virtual string Log() Returns Type Description System.String TERM, CT, RV, R1 and R2 | Improve this Doc View Source Stem(String) Stems the given term to an unique discriminator . Declaration protected virtual string Stem(string term) Parameters Type Name Description System.String term The term that should be stemmed. Returns Type Description System.String Discriminator for term"
  },
  "api/Lucene.Net/Lucene.Net.Util.MathUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MathUtil.html",
    "title": "Class MathUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MathUtil Math static utility methods. Inheritance System.Object MathUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class MathUtil Methods | Improve this Doc View Source Acosh(Double) Calculates inverse hyperbolic cosine of a System.Double value. Special cases: If the argument is NaN, then the result is NaN. If the argument is +1, then the result is a zero. If the argument is positive infinity, then the result is positive infinity. If the argument is less than 1, then the result is NaN. Declaration public static double Acosh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Asinh(Double) Calculates inverse hyperbolic sine of a System.Double value. Special cases: If the argument is NaN, then the result is NaN. If the argument is zero, then the result is a zero with the same sign as the argument. If the argument is infinite, then the result is infinity with the same sign as the argument. Declaration public static double Asinh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Atanh(Double) Calculates inverse hyperbolic tangent of a System.Double value. Special cases: If the argument is NaN, then the result is NaN. If the argument is zero, then the result is a zero with the same sign as the argument. If the argument is +1, then the result is positive infinity. If the argument is -1, then the result is negative infinity. If the argument's absolute value is greater than 1, then the result is NaN. Declaration public static double Atanh(double a) Parameters Type Name Description System.Double a Returns Type Description System.Double | Improve this Doc View Source Gcd(Int64, Int64) Return the greatest common divisor of a and b , consistently with System.Numerics.BigInteger.GreatestCommonDivisor(System.Numerics.BigInteger, System.Numerics.BigInteger) . NOTE : A greatest common divisor must be positive, but 2^64 cannot be expressed as a System.Int64 although it is the GCD of System.Int64.MinValue and 0 and the GCD of System.Int64.MinValue and System.Int64.MinValue . So in these 2 cases, and only them, this method will return System.Int64.MinValue . Declaration public static long Gcd(long a, long b) Parameters Type Name Description System.Int64 a System.Int64 b Returns Type Description System.Int64 | Improve this Doc View Source Log(Double, Double) Calculates logarithm in a given base with doubles. Declaration public static double Log(double base, double x) Parameters Type Name Description System.Double base System.Double x Returns Type Description System.Double | Improve this Doc View Source Log(Int64, Int32) Returns x <= 0 ? 0 : Math.Floor(Math.Log(x) / Math.Log(base)) . Declaration public static int Log(long x, int base) Parameters Type Name Description System.Int64 x System.Int32 base Must be > 1 . Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.MapOfSets-2.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.MapOfSets-2.html",
    "title": "Class MapOfSets<TKey, TValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MapOfSets<TKey, TValue> Helper class for keeping Lists of Objects associated with keys. WARNING: this CLASS IS NOT THREAD SAFE This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object MapOfSets<TKey, TValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class MapOfSets<TKey, TValue> Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source MapOfSets(IDictionary<TKey, ISet<TValue>>) Declaration public MapOfSets(IDictionary<TKey, ISet<TValue>> m) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, System.Collections.Generic.ISet <TValue>> m The backing store for this object. Properties | Improve this Doc View Source Map Declaration public virtual IDictionary<TKey, ISet<TValue>> Map { get; } Property Value Type Description System.Collections.Generic.IDictionary <TKey, System.Collections.Generic.ISet <TValue>> Direct access to the map backing this object. Methods | Improve this Doc View Source Put(TKey, TValue) Adds val to the System.Collections.Generic.ISet<T> associated with key in the System.Collections.Generic.IDictionary<TKey, TValue> . If key is not already in the map, a new System.Collections.Generic.ISet<T> will first be created. Declaration public virtual int Put(TKey key, TValue val) Parameters Type Name Description TKey key TValue val Returns Type Description System.Int32 The size of the System.Collections.Generic.ISet<T> associated with key once val is added to it. | Improve this Doc View Source PutAll(TKey, IEnumerable<TValue>) Adds multiple vals to the System.Collections.Generic.ISet<T> associated with key in the System.Collections.Generic.IDictionary<TKey, TValue> . If key is not already in the map, a new System.Collections.Generic.ISet<T> will first be created. Declaration public virtual int PutAll(TKey key, IEnumerable<TValue> vals) Parameters Type Name Description TKey key System.Collections.Generic.IEnumerable <TValue> vals Returns Type Description System.Int32 The size of the System.Collections.Generic.ISet<T> associated with key once val is added to it. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.LuceneVersionExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.LuceneVersionExtensions.html",
    "title": "Class LuceneVersionExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LuceneVersionExtensions Extension methods to the LuceneVersion enumeration to provide version comparison and parsing functionality. Inheritance System.Object LuceneVersionExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public static class LuceneVersionExtensions Methods | Improve this Doc View Source OnOrAfter(LuceneVersion, LuceneVersion) Declaration public static bool OnOrAfter(this LuceneVersion instance, LuceneVersion other) Parameters Type Name Description LuceneVersion instance LuceneVersion other Returns Type Description System.Boolean | Improve this Doc View Source ParseLeniently(String) Declaration public static LuceneVersion ParseLeniently(string version) Parameters Type Name Description System.String version Returns Type Description LuceneVersion"
  },
  "api/Lucene.Net/Lucene.Net.Util.LuceneVersion.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.LuceneVersion.html",
    "title": "Enum LuceneVersion | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum LuceneVersion Use by certain classes to match version compatibility across releases of Lucene. WARNING : When changing the version parameter that you supply to components in Lucene, do not simply change the version at search-time, but instead also adjust your indexing code to match, and re-index. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public enum LuceneVersion Fields Name Description LUCENE_30 Match settings and bugs in Lucene's 3.0 release. LUCENE_31 Match settings and bugs in Lucene's 3.1 release. LUCENE_32 Match settings and bugs in Lucene's 3.2 release. LUCENE_33 Match settings and bugs in Lucene's 3.3 release. LUCENE_34 Match settings and bugs in Lucene's 3.4 release. LUCENE_35 Match settings and bugs in Lucene's 3.5 release. LUCENE_36 Match settings and bugs in Lucene's 3.6 release. LUCENE_40 Match settings and bugs in Lucene's 3.6 release. LUCENE_41 Match settings and bugs in Lucene's 4.1 release. LUCENE_42 Match settings and bugs in Lucene's 4.2 release. LUCENE_43 Match settings and bugs in Lucene's 4.3 release. LUCENE_44 Match settings and bugs in Lucene's 4.4 release. LUCENE_45 Match settings and bugs in Lucene's 4.5 release. LUCENE_46 Match settings and bugs in Lucene's 4.6 release. LUCENE_47 Match settings and bugs in Lucene's 4.7 release. LUCENE_48 Match settings and bugs in Lucene's 4.8 release. Use this to get the latest & greatest settings, bug fixes, etc, for Lucene. LUCENE_CURRENT WARNING : if you use this setting, and then upgrade to a newer release of Lucene, sizable changes may happen. If backwards compatibility is important then you should instead explicitly specify an actual version. If you use this constant then you may need to re-index all of your documents when upgrading Lucene, as the way text is indexed may have changed. Additionally, you may need to re-test your entire application to ensure it behaves as expected, as some defaults may have changed and may break functionality in your application. Extension Methods Number.IsNumber() LuceneVersionExtensions.OnOrAfter(LuceneVersion)"
  },
  "api/Lucene.Net/Lucene.Net.Util.IServiceListable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.IServiceListable.html",
    "title": "Interface IServiceListable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IServiceListable LUCENENET specific contract that provides support for AvailableCodecs , AvailableDocValuesFormats , and AvailablePostingsFormats . Implement this interface in addition to ICodecFactory , IDocValuesFormatFactory , or IPostingsFormatFactory to provide optional support for the above methods when providing a custom implementation. If this interface is not supported by the corresponding factory, a System.NotSupportedException will be thrown from the above methods. Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public interface IServiceListable Properties | Improve this Doc View Source AvailableServices Lists the available services for the current service type. Declaration ICollection<string> AvailableServices { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInvertState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInvertState.html",
    "title": "Class FieldInvertState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInvertState This class tracks the number and position / offset parameters of terms being added to the index. The information collected in this class is also used to calculate the normalization factor for a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInvertState Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldInvertState Constructors | Improve this Doc View Source FieldInvertState(String) Creates FieldInvertState for the specified field name. Declaration public FieldInvertState(string name) Parameters Type Name Description System.String name | Improve this Doc View Source FieldInvertState(String, Int32, Int32, Int32, Int32, Single) Creates FieldInvertState for the specified field name and values for all fields. Declaration public FieldInvertState(string name, int position, int length, int numOverlap, int offset, float boost) Parameters Type Name Description System.String name System.Int32 position System.Int32 length System.Int32 numOverlap System.Int32 offset System.Single boost Properties | Improve this Doc View Source AttributeSource Gets the AttributeSource from the TokenStream that provided the indexed tokens for this field. Declaration public AttributeSource AttributeSource { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Boost Gets or Sets boost value. This is the cumulative product of document boost and field boost for all field instances sharing the same field name. Declaration public float Boost { get; set; } Property Value Type Description System.Single the boost | Improve this Doc View Source Length Gets or Sets total number of terms in this field. Declaration public int Length { get; set; } Property Value Type Description System.Int32 the length | Improve this Doc View Source MaxTermFrequency Get the maximum term-frequency encountered for any term in the field. A field containing \"the quick brown fox jumps over the lazy dog\" would have a value of 2, because \"the\" appears twice. Declaration public int MaxTermFrequency { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Name Gets the field's name Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumOverlap Gets or Sets the number of terms with positionIncrement == 0 . Declaration public int NumOverlap { get; set; } Property Value Type Description System.Int32 the numOverlap | Improve this Doc View Source Offset Gets end offset of the last processed term. Declaration public int Offset { get; } Property Value Type Description System.Int32 the offset | Improve this Doc View Source Position Gets the last processed term position. Declaration public int Position { get; } Property Value Type Description System.Int32 the position | Improve this Doc View Source UniqueTermCount Gets the number of unique terms encountered in this field. Declaration public int UniqueTermCount { get; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FieldInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FieldInfo.html",
    "title": "Class FieldInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfo Access to the Field Info file that describes document fields and whether or not they are indexed. Each segment has a separate Field Info file. Objects of this class are thread-safe for multiple readers, but only one thread can be adding documents at a time, with no other reader or writer threads accessing this object. Inheritance System.Object FieldInfo Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldInfo Constructors | Improve this Doc View Source FieldInfo(String, Boolean, Int32, Boolean, Boolean, Boolean, IndexOptions, DocValuesType, DocValuesType, IDictionary<String, String>) Sole Constructor. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public FieldInfo(string name, bool indexed, int number, bool storeTermVector, bool omitNorms, bool storePayloads, IndexOptions indexOptions, DocValuesType docValues, DocValuesType normsType, IDictionary<string, string> attributes) Parameters Type Name Description System.String name System.Boolean indexed System.Int32 number System.Boolean storeTermVector System.Boolean omitNorms System.Boolean storePayloads IndexOptions indexOptions DocValuesType docValues DocValuesType normsType System.Collections.Generic.IDictionary < System.String , System.String > attributes Properties | Improve this Doc View Source Attributes Returns internal codec attributes map. May be null if no mappings exist. Declaration public IDictionary<string, string> Attributes { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source DocValuesGen Gets or Sets the docValues generation of this field, or -1 if no docValues. Declaration public long DocValuesGen { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source DocValuesType Declaration public DocValuesType DocValuesType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source HasDocValues Returns true if this field has any docValues. Declaration public bool HasDocValues { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasNorms Returns true if this field actually has any norms. Declaration public bool HasNorms { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasPayloads Returns true if any payloads exist for this field. Declaration public bool HasPayloads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source HasVectors Returns true if any term vectors exist for this field. Declaration public bool HasVectors { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IndexOptions Returns IndexOptions for the field, or null if the field is not indexed Declaration public IndexOptions IndexOptions { get; } Property Value Type Description IndexOptions | Improve this Doc View Source IsIndexed Returns true if this field is indexed. Declaration public bool IsIndexed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Field's name Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NormType Returns DocValuesType of the norm. This may be NONE if the field has no norms. Declaration public DocValuesType NormType { get; } Property Value Type Description DocValuesType | Improve this Doc View Source Number Internal field number Declaration public int Number { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OmitsNorms Returns true if norms are explicitly omitted for this field Declaration public bool OmitsNorms { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source GetAttribute(String) Get a codec attribute value, or null if it does not exist Declaration public string GetAttribute(string key) Parameters Type Name Description System.String key Returns Type Description System.String | Improve this Doc View Source PutAttribute(String, String) Puts a codec attribute value. this is a key-value mapping for the field that the codec can use to store additional metadata, and will be available to the codec when reading the segment via GetAttribute(String) If a value already exists for the field, it will be replaced with the new value. Declaration public string PutAttribute(string key, string value) Parameters Type Name Description System.String key System.String value Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesUpdate.html",
    "title": "Class DocValuesUpdate | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesUpdate An in-place update to a DocValues field. Inheritance System.Object DocValuesUpdate DocValuesUpdate.BinaryDocValuesUpdate DocValuesUpdate.NumericDocValuesUpdate Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocValuesUpdate Constructors | Improve this Doc View Source DocValuesUpdate(DocValuesFieldUpdatesType, Term, String, Object) Constructor. Declaration protected DocValuesUpdate(DocValuesFieldUpdatesType type, Term term, string field, object value) Parameters Type Name Description DocValuesFieldUpdatesType type the DocValuesFieldUpdatesType Term term the Term which determines the documents that will be updated System.String field the NumericDocValuesField to update System.Object value the updated value Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.StoredFieldStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.StoredFieldStatus.html",
    "title": "Class CheckIndex.Status.StoredFieldStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.StoredFieldStatus Status from testing stored fields. Inheritance System.Object CheckIndex.Status.StoredFieldStatus Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class StoredFieldStatus Properties | Improve this Doc View Source DocCount Number of documents tested. Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Error Exception thrown during stored fields test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TotFields Total number of stored fields tested. Declaration public long TotFields { get; } Property Value Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.SegmentInfoStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.SegmentInfoStatus.html",
    "title": "Class CheckIndex.Status.SegmentInfoStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.SegmentInfoStatus Holds the status of each segment in the index. See SegmentInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CheckIndex.Status.SegmentInfoStatus Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentInfoStatus Properties | Improve this Doc View Source Codec Codec used to read this segment. Declaration public Codec Codec { get; } Property Value Type Description Codec | Improve this Doc View Source Compound True if segment is compound file format. Declaration public bool Compound { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DeletionsGen Current deletions generation. Declaration public long DeletionsGen { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Diagnostics Map that includes certain debugging details that IndexWriter records into each segment it creates Declaration public IDictionary<string, string> Diagnostics { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source DocCount Document count (does not take deletions into account). Declaration public int DocCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DocStoreCompoundFile True if the shared doc store files are compound file format. Declaration public bool DocStoreCompoundFile { get; } Property Value Type Description System.Boolean | Improve this Doc View Source DocStoreOffset Doc store offset, if this segment shares the doc store files (stored fields and term vectors) with other segments. This is -1 if it does not share. Declaration public int DocStoreOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source DocStoreSegment String of the shared doc store segment, or null if this segment does not share the doc store files. Declaration public string DocStoreSegment { get; } Property Value Type Description System.String | Improve this Doc View Source DocValuesStatus Status for testing of DocValues ( null if DocValues could not be tested). Declaration public CheckIndex.Status.DocValuesStatus DocValuesStatus { get; } Property Value Type Description CheckIndex.Status.DocValuesStatus | Improve this Doc View Source FieldNormStatus Status for testing of field norms ( null if field norms could not be tested). Declaration public CheckIndex.Status.FieldNormStatus FieldNormStatus { get; } Property Value Type Description CheckIndex.Status.FieldNormStatus | Improve this Doc View Source HasDeletions True if this segment has pending deletions. Declaration public bool HasDeletions { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Name of the segment. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NumDeleted Number of deleted documents. Declaration public int NumDeleted { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumFiles Number of files referenced by this segment. Declaration public int NumFiles { get; } Property Value Type Description System.Int32 | Improve this Doc View Source OpenReaderPassed True if we were able to open an AtomicReader on this segment. Declaration public bool OpenReaderPassed { get; } Property Value Type Description System.Boolean | Improve this Doc View Source SizeMB Net size (MB) of the files referenced by this segment. Declaration public double SizeMB { get; } Property Value Type Description System.Double | Improve this Doc View Source StoredFieldStatus Status for testing of stored fields ( null if stored fields could not be tested). Declaration public CheckIndex.Status.StoredFieldStatus StoredFieldStatus { get; } Property Value Type Description CheckIndex.Status.StoredFieldStatus | Improve this Doc View Source TermIndexStatus Status for testing of indexed terms ( null if indexed terms could not be tested). Declaration public CheckIndex.Status.TermIndexStatus TermIndexStatus { get; } Property Value Type Description CheckIndex.Status.TermIndexStatus | Improve this Doc View Source TermVectorStatus Status for testing of term vectors ( null if term vectors could not be tested). Declaration public CheckIndex.Status.TermVectorStatus TermVectorStatus { get; } Property Value Type Description CheckIndex.Status.TermVectorStatus Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.FieldNormStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.FieldNormStatus.html",
    "title": "Class CheckIndex.Status.FieldNormStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.FieldNormStatus Status from testing field norms. Inheritance System.Object CheckIndex.Status.FieldNormStatus Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class FieldNormStatus Properties | Improve this Doc View Source Error Exception thrown during term index test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TotFields Number of fields successfully tested Declaration public long TotFields { get; } Property Value Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.DocValuesStatus.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.CheckIndex.Status.DocValuesStatus.html",
    "title": "Class CheckIndex.Status.DocValuesStatus | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CheckIndex.Status.DocValuesStatus Status from testing DocValues Inheritance System.Object CheckIndex.Status.DocValuesStatus Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class DocValuesStatus Properties | Improve this Doc View Source Error Exception thrown during doc values test ( null on success) Declaration public Exception Error { get; } Property Value Type Description System.Exception | Improve this Doc View Source TotalBinaryFields Total number of binary fields Declaration public long TotalBinaryFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalNumericFields Total number of numeric fields Declaration public long TotalNumericFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalSortedFields Total number of sorted fields Declaration public long TotalSortedFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalSortedSetFields Total number of sortedset fields Declaration public long TotalSortedSetFields { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TotalValueFields Total number of docValues tested. Declaration public long TotalValueFields { get; } Property Value Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.LazyDocument.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.LazyDocument.html",
    "title": "Class LazyDocument | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LazyDocument Defers actually loading a field's value until you ask for it. You must not use the returned Field instances after the provided reader has been closed. Inheritance System.Object LazyDocument Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.Misc.dll Syntax public class LazyDocument Constructors | Improve this Doc View Source LazyDocument(IndexReader, Int32) Declaration public LazyDocument(IndexReader reader, int docID) Parameters Type Name Description IndexReader reader System.Int32 docID Methods | Improve this Doc View Source GetField(FieldInfo) Creates an IndexableField whose value will be lazy loaded if and when it is used. NOTE: This method must be called once for each value of the field name specified in sequence that the values exist. This method may not be used to generate multiple, lazy, IndexableField instances refering to the same underlying IndexableField instance. The lazy loading of field values from all instances of IndexableField objects returned by this method are all backed by a single Document per LazyDocument instance. Declaration public virtual IIndexableField GetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description IIndexableField Extension Methods Number.IsNumber(Object) See Also GetField(FieldInfo)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DateTools.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DateTools.html",
    "title": "Class DateTools | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DateTools Provides support for converting dates to strings and vice-versa. The strings are structured so that lexicographic sorting orders them by date, which makes them suitable for use as field values and search terms. This class also helps you to limit the resolution of your dates. Do not save dates with a finer resolution than you really need, as then TermRangeQuery and PrefixQuery will require more memory and become slower. Another approach is NumericUtils , which provides a sortable binary representation (prefix encoded) of numeric values, which date/time are. For indexing a System.DateTime , just get the System.DateTime.Ticks and index this as a numeric value with Int64Field and use NumericRangeQuery<T> to query it. Inheritance System.Object DateTools Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public static class DateTools Methods | Improve this Doc View Source DateToString(DateTime, DateTools.Resolution) Converts a System.DateTime to a string suitable for indexing. Declaration public static string DateToString(DateTime date, DateTools.Resolution resolution) Parameters Type Name Description System.DateTime date the date to be converted DateTools.Resolution resolution the desired resolution, see Round(DateTime, DateTools.Resolution) Returns Type Description System.String a string in format yyyyMMddHHmmssSSS or shorter, depending on resolution ; using GMT as timezone | Improve this Doc View Source Round(DateTime, DateTools.Resolution) Limit a date's resolution. For example, the date 2004-09-21 13:50:11 will be changed to 2004-09-01 00:00:00 when using MONTH . Declaration public static DateTime Round(DateTime date, DateTools.Resolution resolution) Parameters Type Name Description System.DateTime date the date to be rounded DateTools.Resolution resolution The desired resolution of the date to be returned Returns Type Description System.DateTime the date with all values more precise than resolution set to 0 or 1 | Improve this Doc View Source Round(Int64, DateTools.Resolution) Limit a date's resolution. For example, the date 1095767411000 (which represents 2004-09-21 13:50:11) will be changed to 1093989600000 (2004-09-01 00:00:00) when using MONTH . Declaration public static long Round(long time, DateTools.Resolution resolution) Parameters Type Name Description System.Int64 time the time to be rounded DateTools.Resolution resolution The desired resolution of the date to be returned Returns Type Description System.Int64 the date with all values more precise than resolution set to 0 or 1, expressed as milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") | Improve this Doc View Source StringToDate(String) Converts a string produced by TimeToString(Int64, DateTools.Resolution) or DateToString(DateTime, DateTools.Resolution) back to a time, represented as a System.DateTime object. Declaration public static DateTime StringToDate(string dateString) Parameters Type Name Description System.String dateString the date string to be converted Returns Type Description System.DateTime the parsed time as a System.DateTime object Exceptions Type Condition System.FormatException if dateString is not in the expected format | Improve this Doc View Source StringToTime(String) Converts a string produced by TimeToString(Int64, DateTools.Resolution) or DateToString(DateTime, DateTools.Resolution) back to a time, represented as the number of milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\"). Declaration public static long StringToTime(string dateString) Parameters Type Name Description System.String dateString the date string to be converted Returns Type Description System.Int64 the number of milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") Exceptions Type Condition System.FormatException if dateString is not in the expected format | Improve this Doc View Source TimeToString(Int64, DateTools.Resolution) Converts a millisecond time to a string suitable for indexing. Declaration public static string TimeToString(long time, DateTools.Resolution resolution) Parameters Type Name Description System.Int64 time the date expressed as milliseconds since January 1, 1970, 00:00:00 GMT (also known as the \"epoch\") DateTools.Resolution resolution the desired resolution, see Round(Int64, DateTools.Resolution) Returns Type Description System.String a string in format yyyyMMddHHmmssSSS or shorter, depending on resolution ; using GMT as timezone"
  },
  "api/Lucene.Net/Lucene.Net.Documents.DateTools.Resolution.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.DateTools.Resolution.html",
    "title": "Enum DateTools.Resolution | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DateTools.Resolution Specifies the time granularity. Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public enum Resolution Fields Name Description DAY Limit a date's resolution to day granularity. HOUR Limit a date's resolution to hour granularity. MILLISECOND Limit a date's resolution to millisecond granularity. MINUTE Limit a date's resolution to minute granularity. MONTH Limit a date's resolution to month granularity. SECOND Limit a date's resolution to second granularity. YEAR Limit a date's resolution to year granularity. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsFormat.html",
    "title": "Class PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsFormat Encodes/decodes terms, postings, and proximity data. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. If you implement your own format: Subclass this class. Subclass DefaultPostingsFormatFactory , override Initialize() , and add the line base.ScanForPostingsFormats(typeof(YourPostingsFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludePostingsFormatFromScanAttribute to them so they are ignored by the scan. Set the new IPostingsFormatFactory by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. If your format has dependencies, you may also override GetPostingsFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. PostingsFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomPostingsFormat\", the codec name will the same name without the \"PostingsFormat\" suffix: \"MyCustom\". You can override this default behavior by using the PostingsFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsFormat Lucene40PostingsFormat Lucene41PostingsFormat PerFieldPostingsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsFormat Constructors | Improve this Doc View Source PostingsFormat() Creates a new postings format. The provided name will be written into the index segment in some configurations (such as when using PerFieldPostingsFormat ): in such configurations, for the segment to be read this class should be registered by subclassing DefaultPostingsFormatFactory and calling ScanForPostingsFormats(Assembly) in the class constructor. The new IPostingsFormatFactory can be registered by calling SetPostingsFormatFactory(IPostingsFormatFactory) at application startup. Declaration protected PostingsFormat() Fields | Improve this Doc View Source EMPTY Zero-length PostingsFormat array. Declaration public static readonly PostingsFormat[] EMPTY Field Value Type Description PostingsFormat [] Properties | Improve this Doc View Source AvailablePostingsFormats Returns a list of all available format names. Declaration public static ICollection<string> AvailablePostingsFormats { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source Name Returns this posting format's name. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Writes a new segment. Declaration public abstract FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Reads a segment. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an System.IO.IOException should be thrown by the implementation. System.IO.IOException s are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer | Improve this Doc View Source ForName(String) Looks up a format by name. Declaration public static PostingsFormat ForName(string name) Parameters Type Name Description System.String name Returns Type Description PostingsFormat | Improve this Doc View Source GetPostingsFormatFactory() Gets the associated PostingsFormat factory. Declaration public static IPostingsFormatFactory GetPostingsFormatFactory() Returns Type Description IPostingsFormatFactory The PostingsFormat factory. | Improve this Doc View Source SetPostingsFormatFactory(IPostingsFormatFactory) Sets the IPostingsFormatFactory instance used to instantiate PostingsFormat subclasses. Declaration public static void SetPostingsFormatFactory(IPostingsFormatFactory postingsFormatFactory) Parameters Type Name Description IPostingsFormatFactory postingsFormatFactory The new IPostingsFormatFactory . Exceptions Type Condition System.ArgumentNullException The postingsFormatFactory parameter is null . | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also DefaultPostingsFormatFactory IPostingsFormatFactory PostingsFormatNameAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsConsumer.html",
    "title": "Class PostingsConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsConsumer Abstract API that consumes postings for an individual term. The lifecycle is: PostingsConsumer is returned for each term by StartTerm(BytesRef) . StartDoc(Int32, Int32) is called for each document where the term occurs, specifying id and term frequency for that document. If positions are enabled for the field, then AddPosition(Int32, BytesRef, Int32, Int32) will be called for each occurrence in the document. FinishDoc() is called when the producer is done adding positions to the document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsConsumer PostingsWriterBase Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsConsumer Constructors | Improve this Doc View Source PostingsConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected PostingsConsumer() Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload, and start/end offset. A null payload means no payload; a non- null payload with zero length also means no payload. Caller may reuse the BytesRef for the payload between calls (method must fully consume the payload). startOffset and endOffset will be -1 when offsets are not indexed. Declaration public abstract void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset | Improve this Doc View Source FinishDoc() Called when we are done adding positions & payloads for each doc. Declaration public abstract void FinishDoc() | Improve this Doc View Source Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) Default merge impl: append documents, mapping around deletes. Declaration public virtual TermStats Merge(MergeState mergeState, IndexOptions indexOptions, DocsEnum postings, FixedBitSet visitedDocs) Parameters Type Name Description MergeState mergeState IndexOptions indexOptions DocsEnum postings FixedBitSet visitedDocs Returns Type Description TermStats | Improve this Doc View Source StartDoc(Int32, Int32) Adds a new doc in this term. freq will be -1 when term frequencies are omitted for the field. Declaration public abstract void StartDoc(int docId, int freq) Parameters Type Name Description System.Int32 docId System.Int32 freq Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PostingsBaseFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PostingsBaseFormat.html",
    "title": "Class PostingsBaseFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PostingsBaseFormat Lucene40PostingsBaseFormat Lucene41PostingsBaseFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class PostingsBaseFormat Constructors | Improve this Doc View Source PostingsBaseFormat(String) Sole constructor. Declaration protected PostingsBaseFormat(string name) Parameters Type Name Description System.String name Properties | Improve this Doc View Source Name Unique name that's used to retrieve this codec when reading the index. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source PostingsReaderBase(SegmentReadState) Creates the PostingsReaderBase for this format. Declaration public abstract PostingsReaderBase PostingsReaderBase(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description PostingsReaderBase | Improve this Doc View Source PostingsWriterBase(SegmentWriteState) Creates the PostingsWriterBase for this format. Declaration public abstract PostingsWriterBase PostingsWriterBase(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description PostingsWriterBase Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.PerField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.PerField.html",
    "title": "Namespace Lucene.Net.Codecs.PerField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.PerField Classes PerFieldDocValuesFormat Enables per field docvalues support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. See DefaultDocValuesFormatFactory for information about how to implement your own DocValuesFormat . Files written by each docvalues format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.dat filenames would look like _1_Lucene40_0.dat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PerFieldPostingsFormat Enables per field postings support. Note, when extending this class, the name ( Name ) is written into the index. In order for the field to be read, the name must resolve to your implementation via ForName(String) . This method uses GetPostingsFormat(String) to resolve format names. See DefaultPostingsFormatFactory for information about how to implement your own PostingsFormat . Files written by each posting format have an additional suffix containing the format name. For example, in a per-field configuration instead of _1.prx filenames would look like _1_Lucene40_0.prx . @lucene.experimental"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosWriter.html",
    "title": "Class FieldInfosWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfosWriter Codec API for writing FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosWriter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosWriter Constructors | Improve this Doc View Source FieldInfosWriter() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosWriter() Methods | Improve this Doc View Source Write(Directory, String, String, FieldInfos, IOContext) Writes the provided FieldInfos to the directory. Declaration public abstract void Write(Directory directory, string segmentName, string segmentSuffix, FieldInfos infos, IOContext context) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix FieldInfos infos IOContext context Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.FieldInfosReader.html",
    "title": "Class FieldInfosReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FieldInfosReader Codec API for reading FieldInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldInfosReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class FieldInfosReader Constructors | Improve this Doc View Source FieldInfosReader() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected FieldInfosReader() Methods | Improve this Doc View Source Read(Directory, String, String, IOContext) Read the FieldInfos previously written with FieldInfosWriter . Declaration public abstract FieldInfos Read(Directory directory, string segmentName, string segmentSuffix, IOContext iocontext) Parameters Type Name Description Directory directory System.String segmentName System.String segmentSuffix IOContext iocontext Returns Type Description FieldInfos Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesFormat.html",
    "title": "Class DocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesFormat Encodes/decodes per-document values. Note, when extending this class, the name ( Name ) may written into the index in certain configurations. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetDocValuesFormat(String) to resolve format names. To implement your own format: Subclass this class. Subclass DefaultDocValuesFormatFactory , override the Initialize() method, and add the line base.ScanForDocValuesFormats(typeof(YourDocValuesFormat).GetTypeInfo().Assembly) . If you have any format classes in your assembly that are not meant for reading, you can add the ExcludeDocValuesFormatFromScanAttribute to them so they are ignored by the scan. Set the new IDocValuesFormatFactory by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. If your format has dependencies, you may also override GetDocValuesFormat(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. DocValuesFormat Names Unlike the Java version, format names are by default convention-based on the class name. If you name your custom format class \"MyCustomDocValuesFormat\", the format name will the same name without the \"DocValuesFormat\" suffix: \"MyCustom\". You can override this default behavior by using the DocValuesFormatNameAttribute to name the format differently than this convention. Format names must be all ASCII alphanumeric, and less than 128 characters in length. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesFormat Lucene40DocValuesFormat Lucene42DocValuesFormat Lucene45DocValuesFormat PerFieldDocValuesFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesFormat Constructors | Improve this Doc View Source DocValuesFormat() Creates a new docvalues format. The provided name will be written into the index segment in some configurations (such as when using PerFieldDocValuesFormat ): in such configurations, for the segment to be read this class should be registered by subclassing DefaultDocValuesFormatFactory and calling ScanForDocValuesFormats(Assembly) in the class constructor. The new IDocValuesFormatFactory can be registered by calling SetDocValuesFormatFactory(IDocValuesFormatFactory) at application startup. Declaration protected DocValuesFormat() Properties | Improve this Doc View Source AvailableDocValuesFormats Returns a list of all available format names. Declaration public static ICollection<string> AvailableDocValuesFormats { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source Name Unique name that's used to retrieve this format when reading the index. Declaration public string Name { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Returns a DocValuesConsumer to write docvalues to the index. Declaration public abstract DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer | Improve this Doc View Source FieldsProducer(SegmentReadState) Returns a DocValuesProducer to read docvalues from the index. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an System.IO.IOException should be thrown by the implementation. System.IO.IOException s are expected and will automatically cause a retry of the segment opening logic with the newly revised segments. Declaration public abstract DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer | Improve this Doc View Source ForName(String) Looks up a format by name. Declaration public static DocValuesFormat ForName(string name) Parameters Type Name Description System.String name Returns Type Description DocValuesFormat | Improve this Doc View Source GetDocValuesFormatFactory() Gets the associated DocValuesFormat factory. Declaration public static IDocValuesFormatFactory GetDocValuesFormatFactory() Returns Type Description IDocValuesFormatFactory The DocValuesFormat factory. | Improve this Doc View Source SetDocValuesFormatFactory(IDocValuesFormatFactory) Sets the IDocValuesFormatFactory instance used to instantiate DocValuesFormat subclasses. Declaration public static void SetDocValuesFormatFactory(IDocValuesFormatFactory docValuesFormatFactory) Parameters Type Name Description IDocValuesFormatFactory docValuesFormatFactory The new IDocValuesFormatFactory . Exceptions Type Condition System.ArgumentNullException The docValuesFormatFactory parameter is null . | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also DefaultDocValuesFormatFactory IDocValuesFormatFactory DocValuesFormatNameAttribute"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Compressor.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.Compressor.html",
    "title": "Class Compressor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Compressor A data compressor. Inheritance System.Object Compressor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class Compressor Constructors | Improve this Doc View Source Compressor() Sole constructor, typically called from sub-classes. Declaration protected Compressor() Methods | Improve this Doc View Source Compress(Byte[], Int32, Int32, DataOutput) Compress bytes into out . It it the responsibility of the compressor to add all necessary information so that a Decompressor will know when to stop decompressing bytes from the stream. Declaration public abstract void Compress(byte[] bytes, int off, int len, DataOutput out) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len DataOutput out Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressionMode.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressionMode.html",
    "title": "Class CompressionMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressionMode A compression mode. Tells how much effort should be spent on compression and decompression of stored fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CompressionMode Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public abstract class CompressionMode Constructors | Improve this Doc View Source CompressionMode() Sole constructor. Declaration protected CompressionMode() Fields | Improve this Doc View Source FAST A compression mode that trades compression ratio for speed. Although the compression ratio might remain high, compression and decompression are very fast. Use this mode with indices that have a high update rate but should be able to load documents from disk quickly. Declaration public static readonly CompressionMode FAST Field Value Type Description CompressionMode | Improve this Doc View Source FAST_DECOMPRESSION This compression mode is similar to FAST but it spends more time compressing in order to improve the compression ratio. This compression mode is best used with indices that have a low update rate but should be able to load documents from disk quickly. Declaration public static readonly CompressionMode FAST_DECOMPRESSION Field Value Type Description CompressionMode | Improve this Doc View Source HIGH_COMPRESSION A compression mode that trades speed for compression ratio. Although compression and decompression might be slow, this compression mode should provide a good compression ratio. this mode might be interesting if/when your index size is much bigger than your OS cache. Declaration public static readonly CompressionMode HIGH_COMPRESSION Field Value Type Description CompressionMode Methods | Improve this Doc View Source NewCompressor() Create a new Compressor instance. Declaration public abstract Compressor NewCompressor() Returns Type Description Compressor | Improve this Doc View Source NewDecompressor() Create a new Decompressor instance. Declaration public abstract Decompressor NewDecompressor() Returns Type Description Decompressor Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Codec.html",
    "title": "Class Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Codec Encodes/decodes an inverted index segment. Note, when extending this class, the name ( Name ) is written into the index. In order for the segment to be read, the name must resolve to your implementation via ForName(String) . This method uses GetCodec(String) to resolve codec names. To implement your own codec: Subclass this class. Subclass DefaultCodecFactory , override the Initialize() method, and add the line base.ScanForCodecs(typeof(YourCodec).GetTypeInfo().Assembly) . If you have any codec classes in your assembly that are not meant for reading, you can add the ExcludeCodecFromScanAttribute to them so they are ignored by the scan. set the new ICodecFactory by calling SetCodecFactory(ICodecFactory) at application startup. If your codec has dependencies, you may also override GetCodec(Type) to inject them via pure DI or a DI container. See DI-Friendly Framework to understand the approach used. Codec Names Unlike the Java version, codec names are by default convention-based on the class name. If you name your custom codec class \"MyCustomCodec\", the codec name will the same name without the \"Codec\" suffix: \"MyCustom\". You can override this default behavior by using the CodecNameAttribute to name the codec differently than this convention. Codec names must be all ASCII alphanumeric, and less than 128 characters in length. Inheritance System.Object Codec FilterCodec Lucene3xCodec Lucene40Codec Lucene41Codec Lucene42Codec Lucene45Codec Lucene46Codec Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class Codec Constructors | Improve this Doc View Source Codec() Creates a new codec. The Name will be written into the index segment: in order for the segment to be read this class should be registered by subclassing DefaultCodecFactory and calling ScanForCodecs(Assembly) in the class constructor. The new ICodecFactory can be registered by calling SetCodecFactory(ICodecFactory) at application startup. Declaration protected Codec() Properties | Improve this Doc View Source AvailableCodecs Returns a list of all available codec names. Declaration public static ICollection<string> AvailableCodecs { get; } Property Value Type Description System.Collections.Generic.ICollection < System.String > | Improve this Doc View Source Default Expert: returns the default codec used for newly created IndexWriterConfig s. Declaration public static Codec Default { get; set; } Property Value Type Description Codec | Improve this Doc View Source DocValuesFormat Encodes/decodes docvalues. Declaration public abstract DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat | Improve this Doc View Source FieldInfosFormat Encodes/decodes field infos file. Declaration public abstract FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Encodes/decodes live docs. Declaration public abstract LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat | Improve this Doc View Source Name Returns this codec's name. Declaration public string Name { get; } Property Value Type Description System.String | Improve this Doc View Source NormsFormat Encodes/decodes document normalization values. Declaration public abstract NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat | Improve this Doc View Source PostingsFormat Encodes/decodes postings. Declaration public abstract PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat | Improve this Doc View Source SegmentInfoFormat Encodes/decodes segment info file. Declaration public abstract SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Encodes/decodes stored fields. Declaration public abstract StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Encodes/decodes term vectors. Declaration public abstract TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Methods | Improve this Doc View Source ForName(String) Looks up a codec by name. Declaration public static Codec ForName(string name) Parameters Type Name Description System.String name Returns Type Description Codec | Improve this Doc View Source GetCodecFactory() Gets the associated codec factory. Declaration public static ICodecFactory GetCodecFactory() Returns Type Description ICodecFactory The codec factory. | Improve this Doc View Source SetCodecFactory(ICodecFactory) Sets the ICodecFactory instance used to instantiate Codec subclasses. Declaration public static void SetCodecFactory(ICodecFactory codecFactory) Parameters Type Name Description ICodecFactory codecFactory The new ICodecFactory . Exceptions Type Condition System.ArgumentNullException The codecFactory parameter is null . | Improve this Doc View Source ToString() Returns the codec's name. Subclasses can override to provide more detail (such as parameters). Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also DefaultCodecFactory ICodecFactory CodecNameAttribute"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.html",
    "title": "Namespace Lucene.Net.QueryParsers.Surround.Query | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Surround.Query Classes AndQuery Factory for conjunctions BasicQueryFactory Factory for creating basic term queries ComposedQuery Base class for composite queries (such as AND/OR/NOT) DistanceQuery Factory for NEAR queries FieldsQuery Forms an OR query of the provided query across multiple fields. NotQuery Factory for prohibited clauses OrQuery Factory for disjunctions SimpleTerm Base class for queries that expand to sets of simple terms. SpanNearClauseFactory SpanNearClauseFactory: Operations: create for a field name and an indexreader. add a weighted Term - this should add a corresponding SpanTermQuery, or increase the weight of an existing one. add a weighted subquery SpanNearQuery create a clause for SpanNearQuery from the things added above. For this, create an array of SpanQuery's from the added ones. The clause normally is a SpanOrQuery over the added subquery SpanNearQuery the SpanTermQuery's for the added Term's When it is necessary to suppress double subqueries as much as possible: GetHashCode() and Equals() on unweighted SpanQuery are needed (possibly via GetTerms(), the terms are individually hashable). Idem SpanNearQuery: hash on the subqueries and the slop. Evt. merge SpanNearQuery's by adding the weights of the corresponding subqueries. To be determined: Are SpanQuery weights handled correctly during search by Lucene? Should the resulting SpanOrQuery be sorted? Could other SpanQueries be added for use in this factory: SpanOrQuery: in principle yes, but it only has access to it's terms via getTerms(); are the corresponding weights available? SpanFirstQuery: treat similar to subquery SpanNearQuery. (ok?) SpanNotQuery: treat similar to subquery SpanNearQuery. (ok?) Factory for SpanOrQuery SrndPrefixQuery Query that matches string prefixes SrndQuery Lowest level base class for surround queries SrndTermQuery Simple single-term clause SrndTruncQuery Query that matches wildcards TooManyBasicQueries Exception thrown when BasicQueryFactory would exceed the limit of query clauses. Interfaces IDistanceSubQuery Interface for queries that can be nested as subqueries into a span near. SimpleTerm.IMatchingTermVisitor Callback to visit each matching term during \"rewrite\" in VisitMatchingTerm(Term)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SrndQuery.html",
    "title": "Class SrndQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SrndQuery Lowest level base class for surround queries Inheritance System.Object SrndQuery ComposedQuery FieldsQuery SimpleTerm Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class SrndQuery Fields | Improve this Doc View Source TheEmptyLcnQuery An empty Lucene query Declaration public static readonly Query TheEmptyLcnQuery Field Value Type Description Query Properties | Improve this Doc View Source IsFieldsSubQueryAcceptable Declaration public virtual bool IsFieldsSubQueryAcceptable { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsWeighted Declaration public virtual bool IsWeighted { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Weight Declaration public virtual float Weight { get; set; } Property Value Type Description System.Single | Improve this Doc View Source WeightOperator Declaration public virtual string WeightOperator { get; } Property Value Type Description System.String | Improve this Doc View Source WeightString Declaration public virtual string WeightString { get; } Property Value Type Description System.String Methods | Improve this Doc View Source Clone() Shallow clone. Subclasses must override this if they need to clone any members deeply, Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Equals(Object) For subclasses of SrndQuery within the namespace Lucene.Net.QueryParsers.Surround.Query it is not necessary to override this method, ToString() Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() For subclasses of SrndQuery within the namespace Lucene.Net.QueryParsers.Surround.Query it is not necessary to override this method, ToString() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source MakeLuceneQueryField(String, BasicQueryFactory) Declaration public virtual Query MakeLuceneQueryField(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query | Improve this Doc View Source MakeLuceneQueryFieldNoBoost(String, BasicQueryFactory) Declaration public abstract Query MakeLuceneQueryFieldNoBoost(string fieldName, BasicQueryFactory qf) Parameters Type Name Description System.String fieldName BasicQueryFactory qf Returns Type Description Query | Improve this Doc View Source ToString() This method is used by GetHashCode() and Equals(Object) , see LUCENE-2945. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source WeightToString(StringBuilder) Declaration protected virtual void WeightToString(StringBuilder r) Parameters Type Name Description System.Text.StringBuilder r"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SpanNearClauseFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SpanNearClauseFactory.html",
    "title": "Class SpanNearClauseFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanNearClauseFactory SpanNearClauseFactory: Operations: create for a field name and an indexreader. add a weighted Term - this should add a corresponding SpanTermQuery, or increase the weight of an existing one. add a weighted subquery SpanNearQuery create a clause for SpanNearQuery from the things added above. For this, create an array of SpanQuery's from the added ones. The clause normally is a SpanOrQuery over the added subquery SpanNearQuery the SpanTermQuery's for the added Term's When it is necessary to suppress double subqueries as much as possible: GetHashCode() and Equals() on unweighted SpanQuery are needed (possibly via GetTerms(), the terms are individually hashable). Idem SpanNearQuery: hash on the subqueries and the slop. Evt. merge SpanNearQuery's by adding the weights of the corresponding subqueries. To be determined: Are SpanQuery weights handled correctly during search by Lucene? Should the resulting SpanOrQuery be sorted? Could other SpanQueries be added for use in this factory: SpanOrQuery: in principle yes, but it only has access to it's terms via getTerms(); are the corresponding weights available? SpanFirstQuery: treat similar to subquery SpanNearQuery. (ok?) SpanNotQuery: treat similar to subquery SpanNearQuery. (ok?) Factory for SpanOrQuery Inheritance System.Object SpanNearClauseFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class SpanNearClauseFactory Constructors | Improve this Doc View Source SpanNearClauseFactory(IndexReader, String, BasicQueryFactory) Declaration public SpanNearClauseFactory(IndexReader reader, string fieldName, BasicQueryFactory qf) Parameters Type Name Description IndexReader reader System.String fieldName BasicQueryFactory qf Properties | Improve this Doc View Source BasicQueryFactory Declaration public virtual BasicQueryFactory BasicQueryFactory { get; } Property Value Type Description BasicQueryFactory | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source FieldName Declaration public virtual string FieldName { get; } Property Value Type Description System.String | Improve this Doc View Source IndexReader Declaration public virtual IndexReader IndexReader { get; } Property Value Type Description IndexReader Methods | Improve this Doc View Source AddSpanQuery(Query) Declaration public virtual void AddSpanQuery(Query q) Parameters Type Name Description Query q | Improve this Doc View Source AddSpanQueryWeighted(SpanQuery, Single) Declaration protected virtual void AddSpanQueryWeighted(SpanQuery sq, float weight) Parameters Type Name Description SpanQuery sq System.Single weight | Improve this Doc View Source AddTermWeighted(Term, Single) Declaration public virtual void AddTermWeighted(Term t, float weight) Parameters Type Name Description Term t System.Single weight | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source MakeSpanClause() Declaration public virtual SpanQuery MakeSpanClause() Returns Type Description SpanQuery"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.IMatchingTermVisitor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.SimpleTerm.IMatchingTermVisitor.html",
    "title": "Interface SimpleTerm.IMatchingTermVisitor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface SimpleTerm.IMatchingTermVisitor Callback to visit each matching term during \"rewrite\" in VisitMatchingTerm(Term) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public interface IMatchingTermVisitor Methods | Improve this Doc View Source VisitMatchingTerm(Term) Declaration void VisitMatchingTerm(Term t) Parameters Type Name Description Term t"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.IDistanceSubQuery.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.IDistanceSubQuery.html",
    "title": "Interface IDistanceSubQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IDistanceSubQuery Interface for queries that can be nested as subqueries into a span near. Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public interface IDistanceSubQuery Methods | Improve this Doc View Source AddSpanQueries(SpanNearClauseFactory) Declaration void AddSpanQueries(SpanNearClauseFactory sncf) Parameters Type Name Description SpanNearClauseFactory sncf | Improve this Doc View Source DistanceSubQueryNotAllowed() When DistanceSubQueryNotAllowed() returns non null, the reason why the subquery is not allowed as a distance subquery is returned. When DistanceSubQueryNotAllowed() returns null AddSpanQueries(SpanNearClauseFactory) can be used in the creation of the span near clause for the subquery. Declaration string DistanceSubQueryNotAllowed() Returns Type Description System.String"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.BasicQueryFactory.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Query.BasicQueryFactory.html",
    "title": "Class BasicQueryFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicQueryFactory Factory for creating basic term queries Inheritance System.Object BasicQueryFactory Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Query Assembly : Lucene.Net.QueryParser.dll Syntax public class BasicQueryFactory Constructors | Improve this Doc View Source BasicQueryFactory() Declaration public BasicQueryFactory() | Improve this Doc View Source BasicQueryFactory(Int32) Declaration public BasicQueryFactory(int maxBasicQueries) Parameters Type Name Description System.Int32 maxBasicQueries Properties | Improve this Doc View Source MaxBasicQueries Declaration public virtual int MaxBasicQueries { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NrQueriesMade Declaration public virtual int NrQueriesMade { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CheckMax() Declaration protected virtual void CheckMax() | Improve this Doc View Source Equals(Object) Two BasicQueryFactory's are equal when they generate the same types of basic queries, or both cannot generate queries anymore. Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source NewSpanTermQuery(Term) Declaration public virtual SpanTermQuery NewSpanTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description SpanTermQuery | Improve this Doc View Source NewTermQuery(Term) Declaration public virtual TermQuery NewTermQuery(Term term) Parameters Type Name Description Term term Returns Type Description TermQuery | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Surround.Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Surround.Parser Classes FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. LexicalToken ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method GenerateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. QueryParser This class is generated by JavaCC. The only method that clients should need to call is Parse(String) . This parser generates queries that make use of position information (Span queries). It provides positional operators ( w and n ) that accept a numeric distance, as well as boolean operators ( and , or , and not , wildcards ( /// and ? ), quoting (with \" ), and boosting (via ^ ). The operators (W, N, AND, OR, NOT) can be expressed lower-cased or upper-cased, and the non-unary operators (everything but NOT) support both infix (a AND b AND c) and prefix AND(a, b, c) notation. The W and N operators express a positional relationship among their operands. N is ordered, and W is unordered. The distance is 1 by default, meaning the operands are adjacent, or may be provided as a prefix from 2-99. So, for example, 3W(a, b) means that terms a and b must appear within three positions of each other, or in other words, up to two terms may appear between a and b. QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() QueryParserTokenManager Token Manager. RegexpToken Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.Token.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.Token.html",
    "title": "Class Token | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token Describes the input token stream. Inheritance System.Object Token Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class Token Constructors | Improve this Doc View Source Token() No-argument constructor Declaration public Token() | Improve this Doc View Source Token(Int32) Constructs a new token for the specified Image. Declaration public Token(int kind) Parameters Type Name Description System.Int32 kind | Improve this Doc View Source Token(Int32, String) Constructs a new token for the specified Image and Kind. Declaration public Token(int kind, string image) Parameters Type Name Description System.Int32 kind System.String image Properties | Improve this Doc View Source BeginColumn The column number of the first character of this Token. Declaration public int BeginColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine The line number of the first character of this Token. Declaration public int BeginLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndColumn The column number of the last character of this Token. Declaration public int EndColumn { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine The line number of the last character of this Token. Declaration public int EndLine { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Image The string image of the token. Declaration public string Image { get; set; } Property Value Type Description System.String | Improve this Doc View Source Kind An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. Declaration public int Kind { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Next A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. Declaration public Token Next { get; set; } Property Value Type Description Token | Improve this Doc View Source SpecialToken This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. Declaration public Token SpecialToken { get; set; } Property Value Type Description Token | Improve this Doc View Source Value An optional attribute value of the Token. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or interpreter. This attribute value is often different from the image. Any subclass of Token that actually wants to return a non-null value can override this method as appropriate. Declaration public virtual object Value { get; } Property Value Type Description System.Object Methods | Improve this Doc View Source NewToken(Int32) Declaration public static Token NewToken(int ofKind) Parameters Type Name Description System.Int32 ofKind Returns Type Description Token | Improve this Doc View Source NewToken(Int32, String) Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a subclass of Token called IDToken that you want to create if ofKind is ID, simply add something like : case MyParserConstants.ID : return new IDToken(ofKind, image); to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. Declaration public static Token NewToken(int ofKind, string image) Parameters Type Name Description System.Int32 ofKind System.String image Returns Type Description Token | Improve this Doc View Source ToString() Returns the image. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.RegexpToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.RegexpToken.html",
    "title": "Class RegexpToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RegexpToken Inheritance System.Object RegexpToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class RegexpToken Fields | Improve this Doc View Source AND RegularExpression Id. Declaration public const int AND = 9 Field Value Type Description System.Int32 | Improve this Doc View Source CARAT RegularExpression Id. Declaration public const int CARAT = 17 Field Value Type Description System.Int32 | Improve this Doc View Source COLON RegularExpression Id. Declaration public const int COLON = 16 Field Value Type Description System.Int32 | Improve this Doc View Source COMMA RegularExpression Id. Declaration public const int COMMA = 15 Field Value Type Description System.Int32 | Improve this Doc View Source DISTOP_NUM RegularExpression Id. Declaration public const int DISTOP_NUM = 6 Field Value Type Description System.Int32 | Improve this Doc View Source EOF End of File. Declaration public const int EOF = 0 Field Value Type Description System.Int32 | Improve this Doc View Source LPAREN RegularExpression Id. Declaration public const int LPAREN = 13 Field Value Type Description System.Int32 | Improve this Doc View Source N RegularExpression Id. Declaration public const int N = 12 Field Value Type Description System.Int32 | Improve this Doc View Source NOT RegularExpression Id. Declaration public const int NOT = 10 Field Value Type Description System.Int32 | Improve this Doc View Source NUM_CHAR RegularExpression Id. Declaration public const int NUM_CHAR = 1 Field Value Type Description System.Int32 | Improve this Doc View Source NUMBER RegularExpression Id. Declaration public const int NUMBER = 23 Field Value Type Description System.Int32 | Improve this Doc View Source ONE_CHAR RegularExpression Id. Declaration public const int ONE_CHAR = 5 Field Value Type Description System.Int32 | Improve this Doc View Source OR RegularExpression Id. Declaration public const int OR = 8 Field Value Type Description System.Int32 | Improve this Doc View Source QUOTED RegularExpression Id. Declaration public const int QUOTED = 19 Field Value Type Description System.Int32 | Improve this Doc View Source RPAREN RegularExpression Id. Declaration public const int RPAREN = 14 Field Value Type Description System.Int32 | Improve this Doc View Source STAR RegularExpression Id. Declaration public const int STAR = 4 Field Value Type Description System.Int32 | Improve this Doc View Source SUFFIXTERM RegularExpression Id. Declaration public const int SUFFIXTERM = 20 Field Value Type Description System.Int32 | Improve this Doc View Source TERM RegularExpression Id. Declaration public const int TERM = 22 Field Value Type Description System.Int32 | Improve this Doc View Source TERM_CHAR RegularExpression Id. Declaration public const int TERM_CHAR = 2 Field Value Type Description System.Int32 | Improve this Doc View Source TRUNCQUOTED RegularExpression Id. Declaration public const int TRUNCQUOTED = 18 Field Value Type Description System.Int32 | Improve this Doc View Source TRUNCTERM RegularExpression Id. Declaration public const int TRUNCTERM = 21 Field Value Type Description System.Int32 | Improve this Doc View Source W RegularExpression Id. Declaration public const int W = 11 Field Value Type Description System.Int32 | Improve this Doc View Source WHITESPACE RegularExpression Id. Declaration public const int WHITESPACE = 3 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserTokenManager.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserTokenManager.html",
    "title": "Class QueryParserTokenManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserTokenManager Token Manager. Inheritance System.Object QueryParserTokenManager Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParserTokenManager Constructors | Improve this Doc View Source QueryParserTokenManager(ICharStream) Constructor. Declaration public QueryParserTokenManager(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParserTokenManager(ICharStream, Int32) Constructor. Declaration public QueryParserTokenManager(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState Fields | Improve this Doc View Source jjnewLexState Lex State array. Declaration public static readonly int[] jjnewLexState Field Value Type Description System.Int32 [] | Improve this Doc View Source jjstrLiteralImages Token literal values. Declaration public static readonly string[] jjstrLiteralImages Field Value Type Description System.String [] | Improve this Doc View Source lexStateNames Lexer state names. Declaration public static readonly string[] lexStateNames Field Value Type Description System.String [] | Improve this Doc View Source m_curChar Declaration protected char m_curChar Field Value Type Description System.Char | Improve this Doc View Source m_input_stream Declaration protected ICharStream m_input_stream Field Value Type Description ICharStream Methods | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public virtual Token GetNextToken() Returns Type Description Token | Improve this Doc View Source JjFillToken() Declaration protected Token JjFillToken() Returns Type Description Token | Improve this Doc View Source ReInit(ICharStream) Reinitialize parser. Declaration public void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(ICharStream, Int32) Reinitialize parser. Declaration public void ReInit(ICharStream stream, int lexState) Parameters Type Name Description ICharStream stream System.Int32 lexState | Improve this Doc View Source SetDebugStream(TextWriter) Set debug output. Declaration public virtual void SetDebugStream(TextWriter ds) Parameters Type Name Description System.IO.TextWriter ds | Improve this Doc View Source SwitchTo(Int32) Switch to specified lex state. Declaration public void SwitchTo(int lexState) Parameters Type Name Description System.Int32 lexState"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserConstants.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParserConstants.html",
    "title": "Class QueryParserConstants | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserConstants Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start() Inheritance System.Object QueryParserConstants Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class QueryParserConstants Fields | Improve this Doc View Source TokenImage Literal token values. Declaration public static string[] TokenImage Field Value Type Description System.String []"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.QueryParser.html",
    "title": "Class QueryParser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParser This class is generated by JavaCC. The only method that clients should need to call is Parse(String) . This parser generates queries that make use of position information (Span queries). It provides positional operators ( w and n ) that accept a numeric distance, as well as boolean operators ( and , or , and not , wildcards ( /// and ? ), quoting (with \" ), and boosting (via ^ ). The operators (W, N, AND, OR, NOT) can be expressed lower-cased or upper-cased, and the non-unary operators (everything but NOT) support both infix (a AND b AND c) and prefix AND(a, b, c) notation. The W and N operators express a positional relationship among their operands. N is ordered, and W is unordered. The distance is 1 by default, meaning the operands are adjacent, or may be provided as a prefix from 2-99. So, for example, 3W(a, b) means that terms a and b must appear within three positions of each other, or in other words, up to two terms may appear between a and b. Inheritance System.Object QueryParser Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryParser Constructors | Improve this Doc View Source QueryParser() Declaration public QueryParser() | Improve this Doc View Source QueryParser(ICharStream) Constructor with user supplied ICharStream . Declaration public QueryParser(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source QueryParser(QueryParserTokenManager) Constructor with generated Token Manager. Declaration public QueryParser(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm Properties | Improve this Doc View Source Jj_nt Next token. Declaration public Token Jj_nt { get; set; } Property Value Type Description Token | Improve this Doc View Source Token Current token. Declaration public Token Token { get; set; } Property Value Type Description Token | Improve this Doc View Source TokenSource Generated Token Manager. Declaration public QueryParserTokenManager TokenSource { get; set; } Property Value Type Description QueryParserTokenManager Methods | Improve this Doc View Source AllowedSuffix(String) Declaration protected virtual bool AllowedSuffix(string suffixed) Parameters Type Name Description System.String suffixed Returns Type Description System.Boolean | Improve this Doc View Source AllowedTruncation(String) Declaration protected virtual bool AllowedTruncation(string truncated) Parameters Type Name Description System.String truncated Returns Type Description System.Boolean | Improve this Doc View Source AndQuery() Declaration public SrndQuery AndQuery() Returns Type Description SrndQuery | Improve this Doc View Source CheckDistanceSubQueries(DistanceQuery, String) Declaration protected static void CheckDistanceSubQueries(DistanceQuery distq, string opName) Parameters Type Name Description DistanceQuery distq System.String opName | Improve this Doc View Source Disable_tracing() Disable tracing. Declaration public void Disable_tracing() | Improve this Doc View Source Enable_tracing() Enable tracing. Declaration public void Enable_tracing() | Improve this Doc View Source FieldsQuery() Declaration public SrndQuery FieldsQuery() Returns Type Description SrndQuery | Improve this Doc View Source FieldsQueryList() Declaration public IList<SrndQuery> FieldsQueryList() Returns Type Description System.Collections.Generic.IList < SrndQuery > | Improve this Doc View Source GenerateParseException() Generate ParseException. Declaration public virtual ParseException GenerateParseException() Returns Type Description ParseException | Improve this Doc View Source GetAndQuery(IList<SrndQuery>, Boolean, Token) Declaration protected virtual SrndQuery GetAndQuery(IList<SrndQuery> queries, bool infix, Token andToken) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix Token andToken Returns Type Description SrndQuery | Improve this Doc View Source GetDistanceQuery(IList<SrndQuery>, Boolean, Token, Boolean) Declaration protected virtual SrndQuery GetDistanceQuery(IList<SrndQuery> queries, bool infix, Token dToken, bool ordered) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix Token dToken System.Boolean ordered Returns Type Description SrndQuery | Improve this Doc View Source GetFieldsQuery(SrndQuery, IList<String>) Declaration protected virtual SrndQuery GetFieldsQuery(SrndQuery q, IList<string> fieldNames) Parameters Type Name Description SrndQuery q System.Collections.Generic.IList < System.String > fieldNames Returns Type Description SrndQuery | Improve this Doc View Source GetNextToken() Get the next Token. Declaration public Token GetNextToken() Returns Type Description Token | Improve this Doc View Source GetNotQuery(IList<SrndQuery>, Token) Declaration protected virtual SrndQuery GetNotQuery(IList<SrndQuery> queries, Token notToken) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries Token notToken Returns Type Description SrndQuery | Improve this Doc View Source GetOpDistance(String) Declaration protected static int GetOpDistance(string distanceOp) Parameters Type Name Description System.String distanceOp Returns Type Description System.Int32 | Improve this Doc View Source GetOrQuery(IList<SrndQuery>, Boolean, Token) Declaration protected virtual SrndQuery GetOrQuery(IList<SrndQuery> queries, bool infix, Token orToken) Parameters Type Name Description System.Collections.Generic.IList < SrndQuery > queries System.Boolean infix Token orToken Returns Type Description SrndQuery | Improve this Doc View Source GetPrefixQuery(String, Boolean) Declaration protected virtual SrndQuery GetPrefixQuery(string prefix, bool quoted) Parameters Type Name Description System.String prefix System.Boolean quoted Returns Type Description SrndQuery | Improve this Doc View Source GetTermQuery(String, Boolean) Declaration protected virtual SrndQuery GetTermQuery(string term, bool quoted) Parameters Type Name Description System.String term System.Boolean quoted Returns Type Description SrndQuery | Improve this Doc View Source GetToken(Int32) Get the specific Token. Declaration public Token GetToken(int index) Parameters Type Name Description System.Int32 index Returns Type Description Token | Improve this Doc View Source GetTruncQuery(String) Declaration protected virtual SrndQuery GetTruncQuery(string truncated) Parameters Type Name Description System.String truncated Returns Type Description SrndQuery | Improve this Doc View Source NotQuery() Declaration public SrndQuery NotQuery() Returns Type Description SrndQuery | Improve this Doc View Source NQuery() Declaration public SrndQuery NQuery() Returns Type Description SrndQuery | Improve this Doc View Source OptionalFields() Declaration public IList<string> OptionalFields() Returns Type Description System.Collections.Generic.IList < System.String > | Improve this Doc View Source OptionalWeights(SrndQuery) Declaration public void OptionalWeights(SrndQuery q) Parameters Type Name Description SrndQuery q | Improve this Doc View Source OrQuery() Declaration public SrndQuery OrQuery() Returns Type Description SrndQuery | Improve this Doc View Source Parse(String) Declaration public static SrndQuery Parse(string query) Parameters Type Name Description System.String query Returns Type Description SrndQuery | Improve this Doc View Source Parse2(String) Declaration public virtual SrndQuery Parse2(string query) Parameters Type Name Description System.String query Returns Type Description SrndQuery | Improve this Doc View Source PrefixOperatorQuery() Declaration public SrndQuery PrefixOperatorQuery() Returns Type Description SrndQuery | Improve this Doc View Source PrimaryQuery() Declaration public SrndQuery PrimaryQuery() Returns Type Description SrndQuery | Improve this Doc View Source ReInit(ICharStream) Reinitialize. Declaration public virtual void ReInit(ICharStream stream) Parameters Type Name Description ICharStream stream | Improve this Doc View Source ReInit(QueryParserTokenManager) Reinitialize. Declaration public virtual void ReInit(QueryParserTokenManager tm) Parameters Type Name Description QueryParserTokenManager tm | Improve this Doc View Source SimpleTerm() Declaration public SrndQuery SimpleTerm() Returns Type Description SrndQuery | Improve this Doc View Source TopSrndQuery() Declaration public SrndQuery TopSrndQuery() Returns Type Description SrndQuery | Improve this Doc View Source WQuery() Declaration public SrndQuery WQuery() Returns Type Description SrndQuery"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.html",
    "title": "Class DirectoryTaxonomyWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter ITaxonomyWriter which uses a Directory to store the taxonomy information on disk, and keeps an additional in-memory cache of some or all categories. In addition to the permanently-stored information in the Directory , efficiency dictates that we also keep an in-memory cache of recently seen or all categories, so that we do not need to go back to disk for every category addition to see which ordinal this category already has, if any. A ITaxonomyWriterCache object determines the specific caching algorithm used. This class offers some hooks for extending classes to control the IndexWriter instance that is used. See OpenIndexWriter(Directory, IndexWriterConfig) . @lucene.experimental Inheritance System.Object DirectoryTaxonomyWriter Implements ITaxonomyWriter System.IDisposable ITwoPhaseCommit Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public class DirectoryTaxonomyWriter : ITaxonomyWriter, IDisposable, ITwoPhaseCommit Constructors | Improve this Doc View Source DirectoryTaxonomyWriter(Directory, OpenMode) Creates a new instance with a default cache as defined by DefaultTaxonomyWriterCache() . Declaration public DirectoryTaxonomyWriter(Directory directory, OpenMode openMode = OpenMode.CREATE_OR_APPEND) Parameters Type Name Description Directory directory OpenMode openMode | Improve this Doc View Source DirectoryTaxonomyWriter(Directory, OpenMode, ITaxonomyWriterCache) Construct a Taxonomy writer. Declaration public DirectoryTaxonomyWriter(Directory directory, OpenMode openMode, ITaxonomyWriterCache cache) Parameters Type Name Description Directory directory The Directory in which to store the taxonomy. Note that the taxonomy is written directly to that directory (not to a subdirectory of it). OpenMode openMode Specifies how to open a taxonomy for writing: APPEND means open an existing index for append (failing if the index does not yet exist). CREATE means create a new index (first deleting the old one if it already existed). CREATE_OR_APPEND appends to an existing index if there is one, otherwise it creates a new index. ITaxonomyWriterCache cache A ITaxonomyWriterCache implementation which determines the in-memory caching policy. See for example LruTaxonomyWriterCache and Cl2oTaxonomyWriterCache . If null or missing, DefaultTaxonomyWriterCache() is used. Exceptions Type Condition CorruptIndexException if the taxonomy is corrupted. LockObtainFailedException if the taxonomy is locked by another writer. If it is known that no other concurrent writer is active, the lock might have been left around by an old dead process, and should be removed using Unlock(Directory) . System.IO.IOException if another error occurred. Fields | Improve this Doc View Source INDEX_EPOCH Property name of user commit data that contains the index epoch. The epoch changes whenever the taxonomy is recreated (i.e. opened with CREATE . Applications should not use this property in their commit data because it will be overridden by this taxonomy writer. Declaration public const string INDEX_EPOCH = \"index.epoch\" Field Value Type Description System.String Properties | Improve this Doc View Source CommitData Declaration public virtual IDictionary<string, string> CommitData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Directory Returns the Directory of this taxonomy writer. Declaration public virtual Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source TaxonomyEpoch Expert: returns current index epoch, if this is a near-real-time reader. Used by DirectoryTaxonomyReader to support NRT. @lucene.internal Declaration public long TaxonomyEpoch { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source AddCategory(FacetLabel) Declaration public virtual int AddCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source AddTaxonomy(Directory, DirectoryTaxonomyWriter.IOrdinalMap) Takes the categories from the given taxonomy directory, and adds the missing ones to this taxonomy. Additionally, it fills the given DirectoryTaxonomyWriter.IOrdinalMap with a mapping from the original ordinal to the new ordinal. Declaration public virtual void AddTaxonomy(Directory taxoDir, DirectoryTaxonomyWriter.IOrdinalMap map) Parameters Type Name Description Directory taxoDir DirectoryTaxonomyWriter.IOrdinalMap map | Improve this Doc View Source CloseResources() A hook for extending classes to close additional resources that were used. The default implementation closes the IndexReader as well as the ITaxonomyWriterCache instances that were used. NOTE: if you override this method, you should include a base.CloseResources() call in your implementation. Declaration protected virtual void CloseResources() | Improve this Doc View Source Commit() Declaration public virtual void Commit() | Improve this Doc View Source CreateIndexWriterConfig(OpenMode) Create the IndexWriterConfig that would be used for opening the internal index writer. Extensions can configure the IndexWriter as they see fit, including setting a MergeScheduler , or IndexDeletionPolicy , different RAM size etc. NOTE: internal docids of the configured index must not be altered. For that, categories are never deleted from the taxonomy index. In addition, merge policy in effect must not merge none adjacent segments. Declaration protected virtual IndexWriterConfig CreateIndexWriterConfig(OpenMode openMode) Parameters Type Name Description OpenMode openMode see OpenMode Returns Type Description IndexWriterConfig See Also OpenIndexWriter(Directory, IndexWriterConfig) | Improve this Doc View Source DefaultTaxonomyWriterCache() Defines the default ITaxonomyWriterCache to use in constructors which do not specify one. The current default is Cl2oTaxonomyWriterCache constructed with the parameters (1024, 0.15f, 3), i.e., the entire taxonomy is cached in memory while building it. Declaration public static ITaxonomyWriterCache DefaultTaxonomyWriterCache() Returns Type Description ITaxonomyWriterCache | Improve this Doc View Source Dispose() Frees used resources as well as closes the underlying IndexWriter , which commits whatever changes made to it to the underlying Directory . Declaration public void Dispose() | Improve this Doc View Source EnsureOpen() Verifies that this instance wasn't closed, or throws System.ObjectDisposedException if it is. Declaration protected void EnsureOpen() | Improve this Doc View Source FindCategory(FacetLabel) Look up the given category in the cache and/or the on-disk storage, returning the category's ordinal, or a negative number in case the category does not yet exist in the taxonomy. Declaration protected virtual int FindCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetParent(Int32) Declaration public virtual int GetParent(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description System.Int32 | Improve this Doc View Source OpenIndexWriter(Directory, IndexWriterConfig) Open internal index writer, which contains the taxonomy data. Extensions may provide their own IndexWriter implementation or instance. NOTE: the instance this method returns will be disposed upon calling to Dispose() . NOTE: the merge policy in effect must not merge none adjacent segments. See comment in CreateIndexWriterConfig(OpenMode) for the logic behind this. Declaration protected virtual IndexWriter OpenIndexWriter(Directory directory, IndexWriterConfig config) Parameters Type Name Description Directory directory the Directory on top of which an IndexWriter should be opened. IndexWriterConfig config configuration for the internal index writer. Returns Type Description IndexWriter See Also CreateIndexWriterConfig(OpenMode) | Improve this Doc View Source PrepareCommit() prepare most of the work needed for a two-phase commit. See PrepareCommit() . Declaration public virtual void PrepareCommit() | Improve this Doc View Source ReplaceTaxonomy(Directory) Replaces the current taxonomy with the given one. This method should generally be called in conjunction with AddIndexes(Directory[]) to replace both the taxonomy as well as the search index content. Declaration public virtual void ReplaceTaxonomy(Directory taxoDir) Parameters Type Name Description Directory taxoDir | Improve this Doc View Source Rollback() Rollback changes to the taxonomy writer and closes the instance. Following this method the instance becomes unusable (calling any of its API methods will yield an System.ObjectDisposedException ). Declaration public virtual void Rollback() | Improve this Doc View Source SetCacheMissesUntilFill(Int32) Set the number of cache misses before an attempt is made to read the entire taxonomy into the in-memory cache. This taxonomy writer holds an in-memory cache of recently seen categories to speed up operation. On each cache-miss, the on-disk index needs to be consulted. When an existing taxonomy is opened, a lot of slow disk reads like that are needed until the cache is filled, so it is more efficient to read the entire taxonomy into memory at once. We do this complete read after a certain number (defined by this method) of cache misses. If the number is set to 0 , the entire taxonomy is read into the cache on first use, without fetching individual categories first. NOTE: it is assumed that this method is called immediately after the taxonomy writer has been created. Declaration public virtual void SetCacheMissesUntilFill(int i) Parameters Type Name Description System.Int32 i | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Declaration public virtual void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > commitUserData | Improve this Doc View Source Unlock(Directory) Forcibly unlocks the taxonomy in the named directory. Caution: this should only be used by failure recovery code, when it is known that no other process nor thread is in fact currently accessing this taxonomy. This method is unnecessary if your Directory uses a NativeFSLockFactory instead of the default SimpleFSLockFactory . When the \"native\" lock is used, a lock does not stay behind forever when the process using it dies. Declaration public static void Unlock(Directory directory) Parameters Type Name Description Directory directory Implements ITaxonomyWriter System.IDisposable ITwoPhaseCommit"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader.html",
    "title": "Class DocValuesOrdinalsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesOrdinalsReader Decodes ordinals previously indexed into a BinaryDocValues field Inheritance System.Object OrdinalsReader DocValuesOrdinalsReader Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class DocValuesOrdinalsReader : OrdinalsReader Constructors | Improve this Doc View Source DocValuesOrdinalsReader() Default constructor. Declaration public DocValuesOrdinalsReader() | Improve this Doc View Source DocValuesOrdinalsReader(String) Create this, with the specified indexed field name. Declaration public DocValuesOrdinalsReader(string field) Parameters Type Name Description System.String field Properties | Improve this Doc View Source IndexFieldName Declaration public override string IndexFieldName { get; } Property Value Type Description System.String Overrides OrdinalsReader.IndexFieldName Methods | Improve this Doc View Source Decode(BytesRef, Int32sRef) Subclass & override if you change the encoding. Declaration protected virtual void Decode(BytesRef buf, Int32sRef ordinals) Parameters Type Name Description BytesRef buf Int32sRef ordinals | Improve this Doc View Source GetReader(AtomicReaderContext) Declaration public override OrdinalsReader.OrdinalsSegmentReader GetReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader Overrides OrdinalsReader.GetReader(AtomicReaderContext)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FacetLabel.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.FacetLabel.html",
    "title": "Class FacetLabel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FacetLabel Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object FacetLabel Implements System.IComparable < FacetLabel > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class FacetLabel : IComparable<FacetLabel> Constructors | Improve this Doc View Source FacetLabel(String, String[]) Construct from the dimension plus the given path components. Declaration public FacetLabel(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path | Improve this Doc View Source FacetLabel(String[]) Construct from the given path components. Declaration public FacetLabel(params string[] components) Parameters Type Name Description System.String [] components Fields | Improve this Doc View Source MAX_CATEGORY_PATH_LENGTH The maximum number of characters a FacetLabel can have. Declaration public static readonly int MAX_CATEGORY_PATH_LENGTH Field Value Type Description System.Int32 Properties | Improve this Doc View Source Components The components of this FacetLabel . Note that this array may be shared with other FacetLabel instances, e.g. as a result of Subpath(Int32) , therefore you should traverse the array up to Length for this path's components. Declaration public string[] Components { get; } Property Value Type Description System.String [] | Improve this Doc View Source Length The number of components of this FacetLabel . Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(FacetLabel) Compares this path with another FacetLabel for lexicographic order. Declaration public virtual int CompareTo(FacetLabel other) Parameters Type Name Description FacetLabel other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Int64HashCode() Calculate a 64-bit hash function for this path. This is necessary for NameHashInt32CacheLRU (the default cache impl for LruTaxonomyWriterCache ) to reduce the chance of \"silent but deadly\" collisions. NOTE: This was longHashCode() in Lucene Declaration public virtual long Int64HashCode() Returns Type Description System.Int64 | Improve this Doc View Source Subpath(Int32) Returns a sub-path of this path up to length components. Declaration public virtual FacetLabel Subpath(int length) Parameters Type Name Description System.Int32 length Returns Type Description FacetLabel | Improve this Doc View Source ToString() Returns a string representation of the path. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.TokenMgrError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Classic.TokenMgrError.html",
    "title": "Class TokenMgrError | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenMgrError Token Manager Error. Inheritance System.Object System.Exception TokenMgrError Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Classic Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenMgrError : Exception Constructors | Improve this Doc View Source TokenMgrError() No arg constructor. Declaration public TokenMgrError() | Improve this Doc View Source TokenMgrError(Boolean, Int32, Int32, Int32, String, Char, Int32) Full Constructor. Declaration public TokenMgrError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar, int reason) Parameters Type Name Description System.Boolean eofSeen System.Int32 lexState System.Int32 errorLine System.Int32 errorColumn System.String errorAfter System.Char curChar System.Int32 reason | Improve this Doc View Source TokenMgrError(String, Int32) Constructor with message and reason. Declaration public TokenMgrError(string message, int reason) Parameters Type Name Description System.String message System.Int32 reason Properties | Improve this Doc View Source Message You can also modify the body of this method to customize your error messages. For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like : \"Internal Error : Please file a bug report .... \" from this method for such cases in the release version of your parser. Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message Methods | Improve this Doc View Source AddEscapes(String) Replaces unprintable characters by their escaped (or unicode escaped) equivalents in the given string Declaration protected static string AddEscapes(string str) Parameters Type Name Description System.String str Returns Type Description System.String | Improve this Doc View Source LexicalError(Boolean, Int32, Int32, Int32, String, Char) Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error. Declaration protected static string LexicalError(bool eofSeen, int lexState, int errorLine, int errorColumn, string errorAfter, char curChar) Parameters Type Name Description System.Boolean eofSeen indicates if EOF caused the lexical error System.Int32 lexState lexical state in which this error occurred System.Int32 errorLine line number when the error occurred System.Int32 errorColumn column number when the error occurred System.String errorAfter prefix that was seen before this error occurred System.Char curChar the offending character Returns Type Description System.String Detailed error message Remarks You can customize the lexical error message by modifying this method."
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Memory.MemoryPostingsFormat.html",
    "title": "Class MemoryPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MemoryPostingsFormat Stores terms & postings (docs, positions, payloads) in RAM, using an FST. Note that this codec implements advance as a linear scan! This means if you store large fields in here, queries that rely on advance will (AND BooleanQuery, PhraseQuery) will be relatively slow! @lucene.experimental Inheritance System.Object PostingsFormat MemoryPostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Memory Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"Memory\")] public sealed class MemoryPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source MemoryPostingsFormat() Declaration public MemoryPostingsFormat() | Improve this Doc View Source MemoryPostingsFormat(Boolean, Single) Create MemoryPostingsFormat , specifying advanced FST options. Declaration public MemoryPostingsFormat(bool doPackFST, float acceptableOverheadRatio) Parameters Type Name Description System.Boolean doPackFST true if a packed FST should be built. NOTE: packed FSTs are limited to ~2.1 GB of postings. System.Single acceptableOverheadRatio Allowable overhead for packed System.Int32 s during FST construction. Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.Pulsing41PostingsFormat.html",
    "title": "Class Pulsing41PostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Pulsing41PostingsFormat Concrete pulsing implementation over Lucene41PostingsFormat . @lucene.experimental Inheritance System.Object PostingsFormat PulsingPostingsFormat Pulsing41PostingsFormat Inherited Members PulsingPostingsFormat.ToString() PulsingPostingsFormat.FieldsConsumer(SegmentWriteState) PulsingPostingsFormat.FieldsProducer(SegmentReadState) PulsingPostingsFormat.FreqCutoff PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax [PostingsFormatName(\"Pulsing41\")] public class Pulsing41PostingsFormat : PulsingPostingsFormat Constructors | Improve this Doc View Source Pulsing41PostingsFormat() Inlines docFreq=1 terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat() | Improve this Doc View Source Pulsing41PostingsFormat(Int32) Inlines docFreq= freqCutoff terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat(int freqCutoff) Parameters Type Name Description System.Int32 freqCutoff | Improve this Doc View Source Pulsing41PostingsFormat(Int32, Int32, Int32) Inlines docFreq= freqCutoff terms, otherwise uses the normal \"Lucene41\" format. Declaration public Pulsing41PostingsFormat(int freqCutoff, int minBlockSize, int maxBlockSize) Parameters Type Name Description System.Int32 freqCutoff System.Int32 minBlockSize System.Int32 maxBlockSize"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Pulsing.PulsingPostingsFormat.html",
    "title": "Class PulsingPostingsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PulsingPostingsFormat This postings format \"inlines\" the postings for terms that have low docFreq. It wraps another postings format, which is used for writing the non-inlined terms. @lucene.experimental Inheritance System.Object PostingsFormat PulsingPostingsFormat Pulsing41PostingsFormat Inherited Members PostingsFormat.EMPTY PostingsFormat.SetPostingsFormatFactory(IPostingsFormatFactory) PostingsFormat.GetPostingsFormatFactory() PostingsFormat.Name PostingsFormat.ForName(String) PostingsFormat.AvailablePostingsFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Pulsing Assembly : Lucene.Net.Codecs.dll Syntax public abstract class PulsingPostingsFormat : PostingsFormat Constructors | Improve this Doc View Source PulsingPostingsFormat(PostingsBaseFormat, Int32) Declaration public PulsingPostingsFormat(PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff) Parameters Type Name Description PostingsBaseFormat wrappedPostingsBaseFormat System.Int32 freqCutoff | Improve this Doc View Source PulsingPostingsFormat(PostingsBaseFormat, Int32, Int32, Int32) Terms with freq less than or equal freqCutoff are inlined into terms dict. Declaration public PulsingPostingsFormat(PostingsBaseFormat wrappedPostingsBaseFormat, int freqCutoff, int minBlockSize, int maxBlockSize) Parameters Type Name Description PostingsBaseFormat wrappedPostingsBaseFormat System.Int32 freqCutoff System.Int32 minBlockSize System.Int32 maxBlockSize Properties | Improve this Doc View Source FreqCutoff Declaration public virtual int FreqCutoff { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override FieldsConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description FieldsConsumer Overrides PostingsFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override FieldsProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description FieldsProducer Overrides PostingsFormat.FieldsProducer(SegmentReadState) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides PostingsFormat.ToString()"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.PerFieldReuseStrategy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Analyzer.PerFieldReuseStrategy.html",
    "title": "Class Analyzer.PerFieldReuseStrategy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Analyzer.PerFieldReuseStrategy Implementation of ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. Inheritance System.Object ReuseStrategy Analyzer.PerFieldReuseStrategy Inherited Members ReuseStrategy.GetStoredValue(Analyzer) ReuseStrategy.SetStoredValue(Analyzer, Object) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax [Obsolete(\"this implementation class will be hidden in Lucene 5.0. Use Analyzer.PER_FIELD_REUSE_STRATEGY instead!\")] public class PerFieldReuseStrategy : ReuseStrategy Constructors | Improve this Doc View Source PerFieldReuseStrategy() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration [Obsolete(\"Don't create instances of this class, use Analyzer.PER_FIELD_REUSE_STRATEGY\")] public PerFieldReuseStrategy() Methods | Improve this Doc View Source GetReusableComponents(Analyzer, String) Declaration public override TokenStreamComponents GetReusableComponents(Analyzer analyzer, string fieldName) Parameters Type Name Description Analyzer analyzer System.String fieldName Returns Type Description TokenStreamComponents Overrides ReuseStrategy.GetReusableComponents(Analyzer, String) | Improve this Doc View Source SetReusableComponents(Analyzer, String, TokenStreamComponents) Declaration public override void SetReusableComponents(Analyzer analyzer, string fieldName, TokenStreamComponents components) Parameters Type Name Description Analyzer analyzer System.String fieldName TokenStreamComponents components Overrides ReuseStrategy.SetReusableComponents(Analyzer, String, TokenStreamComponents) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.NumericTermAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.NumericTokenStream.NumericTermAttribute.html",
    "title": "Class NumericTokenStream.NumericTermAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericTokenStream.NumericTermAttribute Implementation of NumericTokenStream.INumericTermAttribute . @lucene.internal @since 4.0 Inheritance System.Object Attribute NumericTokenStream.NumericTermAttribute Implements NumericTokenStream.INumericTermAttribute ITermToBytesRefAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class NumericTermAttribute : Attribute, NumericTokenStream.INumericTermAttribute, ITermToBytesRefAttribute, IAttribute Constructors | Improve this Doc View Source NumericTermAttribute() Creates, but does not yet initialize this attribute instance Declaration public NumericTermAttribute() See Also Init(Int64, Int32, Int32, Int32) Properties | Improve this Doc View Source BytesRef Declaration public BytesRef BytesRef { get; } Property Value Type Description BytesRef | Improve this Doc View Source RawValue Declaration public long RawValue { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Shift Declaration public int Shift { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source ValueSize Declaration public int ValueSize { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source FillBytesRef() Declaration public void FillBytesRef() | Improve this Doc View Source IncShift() Declaration public int IncShift() Returns Type Description System.Int32 | Improve this Doc View Source Init(Int64, Int32, Int32, Int32) Declaration public void Init(long value, int valueSize, int precisionStep, int shift) Parameters Type Name Description System.Int64 value System.Int32 valueSize System.Int32 precisionStep System.Int32 shift | Improve this Doc View Source ReflectWith(IAttributeReflector) Declaration public override void ReflectWith(IAttributeReflector reflector) Parameters Type Name Description IAttributeReflector reflector Overrides Attribute.ReflectWith(IAttributeReflector) Implements NumericTokenStream.INumericTermAttribute ITermToBytesRefAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.ReusableStringReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.ReusableStringReader.html",
    "title": "Class ReusableStringReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReusableStringReader Internal class to enable reuse of the string reader by GetTokenStream(String, String) Inheritance System.Object System.IO.TextReader ReusableStringReader Implements System.IDisposable Inherited Members System.IO.TextReader.Null System.IO.TextReader.Dispose() System.IO.TextReader.Peek() System.IO.TextReader.ReadAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlock(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadBlockAsync(System.Char[], System.Int32, System.Int32) System.IO.TextReader.ReadLine() System.IO.TextReader.ReadLineAsync() System.IO.TextReader.ReadToEndAsync() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class ReusableStringReader : TextReader, IDisposable Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides System.IO.TextReader.Dispose(System.Boolean) | Improve this Doc View Source Read() Declaration public override int Read() Returns Type Description System.Int32 Overrides System.IO.TextReader.Read() | Improve this Doc View Source Read(Char[], Int32, Int32) Declaration public override int Read(char[] c, int off, int len) Parameters Type Name Description System.Char [] c System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) | Improve this Doc View Source ReadToEnd() Declaration public override string ReadToEnd() Returns Type Description System.String Overrides System.IO.TextReader.ReadToEnd() Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.Token.TokenAttributeFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.Token.TokenAttributeFactory.html",
    "title": "Class Token.TokenAttributeFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Token.TokenAttributeFactory Expert: Creates a Token.TokenAttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. @since 3.0 Inheritance System.Object AttributeSource.AttributeFactory Token.TokenAttributeFactory Inherited Members AttributeSource.AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis Assembly : Lucene.Net.dll Syntax public sealed class TokenAttributeFactory : AttributeSource.AttributeFactory Constructors | Improve this Doc View Source TokenAttributeFactory(AttributeSource.AttributeFactory) Expert : Creates an AttributeSource.AttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. Declaration public TokenAttributeFactory(AttributeSource.AttributeFactory delegate) Parameters Type Name Description AttributeSource.AttributeFactory delegate Methods | Improve this Doc View Source CreateAttributeInstance<T>() Declaration public override Attribute CreateAttributeInstance<T>() where T : IAttribute Returns Type Description Attribute Type Parameters Name Description T Overrides AttributeSource.AttributeFactory.CreateAttributeInstance<T>() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.FlagsAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.TokenAttributes.FlagsAttribute.html",
    "title": "Class FlagsAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FlagsAttribute Default implementation of IFlagsAttribute . Inheritance System.Object Attribute FlagsAttribute Implements IFlagsAttribute IAttribute Inherited Members Attribute.ReflectAsString(Boolean) Attribute.ReflectWith(IAttributeReflector) Attribute.ToString() Attribute.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.TokenAttributes Assembly : Lucene.Net.dll Syntax public class FlagsAttribute : Attribute, IFlagsAttribute, IAttribute Constructors | Improve this Doc View Source FlagsAttribute() Initialize this attribute with no bits set Declaration public FlagsAttribute() Properties | Improve this Doc View Source Flags Declaration public virtual int Flags { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Declaration public override void Clear() Overrides Attribute.Clear() | Improve this Doc View Source CopyTo(IAttribute) Declaration public override void CopyTo(IAttribute target) Parameters Type Name Description IAttribute target Overrides Attribute.CopyTo(IAttribute) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() Implements IFlagsAttribute IAttribute Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.CodecNameAttribute.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.CodecNameAttribute.html",
    "title": "Class CodecNameAttribute | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CodecNameAttribute Represents an attribute that is used to name a Codec , if a name other than the default Codec naming convention is desired. Inheritance System.Object System.Attribute ServiceNameAttribute CodecNameAttribute Inherited Members ServiceNameAttribute.Name System.Attribute.Equals(System.Object) System.Attribute.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public sealed class CodecNameAttribute : ServiceNameAttribute Constructors | Improve this Doc View Source CodecNameAttribute(String) Declaration public CodecNameAttribute(string name) Parameters Type Name Description System.String name Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsFormat.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.CompressingTermVectorsFormat.html",
    "title": "Class CompressingTermVectorsFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompressingTermVectorsFormat A TermVectorsFormat that compresses chunks of documents together in order to improve the compression ratio. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermVectorsFormat CompressingTermVectorsFormat Lucene42TermVectorsFormat Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public class CompressingTermVectorsFormat : TermVectorsFormat Constructors | Improve this Doc View Source CompressingTermVectorsFormat(String, String, CompressionMode, Int32) Create a new CompressingTermVectorsFormat . formatName is the name of the format. this name will be used in the file formats to perform codec header checks ( CheckHeader(DataInput, String, Int32, Int32) ). The compressionMode parameter allows you to choose between compression algorithms that have various compression and decompression speeds so that you can pick the one that best fits your indexing and searching throughput. You should never instantiate two CompressingTermVectorsFormat s that have the same name but different CompressionMode s. chunkSize is the minimum byte size of a chunk of documents. Higher values of chunkSize should improve the compression ratio but will require more memory at indexing time and might make document loading a little slower (depending on the size of your OS cache compared to the size of your index). Declaration public CompressingTermVectorsFormat(string formatName, string segmentSuffix, CompressionMode compressionMode, int chunkSize) Parameters Type Name Description System.String formatName The name of the StoredFieldsFormat . System.String segmentSuffix A suffix to append to files created by this format. CompressionMode compressionMode The CompressionMode to use. System.Int32 chunkSize The minimum number of bytes of a single chunk of stored documents. See Also CompressionMode Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) Declaration public override sealed TermVectorsReader VectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos IOContext context Returns Type Description TermVectorsReader Overrides TermVectorsFormat.VectorsReader(Directory, SegmentInfo, FieldInfos, IOContext) | Improve this Doc View Source VectorsWriter(Directory, SegmentInfo, IOContext) Declaration public override sealed TermVectorsWriter VectorsWriter(Directory directory, SegmentInfo segmentInfo, IOContext context) Parameters Type Name Description Directory directory SegmentInfo segmentInfo IOContext context Returns Type Description TermVectorsWriter Overrides TermVectorsFormat.VectorsWriter(Directory, SegmentInfo, IOContext) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.DocValuesConsumer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.DocValuesConsumer.html",
    "title": "Class DocValuesConsumer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValuesConsumer Abstract API that consumes numeric, binary and sorted docvalues. Concrete implementations of this actually do \"something\" with the docvalues (write it into the index in a specific format). The lifecycle is: DocValuesConsumer is created by FieldsConsumer(SegmentWriteState) or NormsConsumer(SegmentWriteState) . AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , or AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) are called for each Numeric, Binary, or Sorted docvalues field. The API is a \"pull\" rather than \"push\", and the implementation is free to iterate over the values multiple times ( System.Collections.Generic.IEnumerable<T>.GetEnumerator() ). After all fields are added, the consumer is Dispose() d. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocValuesConsumer Lucene45DocValuesConsumer Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public abstract class DocValuesConsumer : IDisposable Constructors | Improve this Doc View Source DocValuesConsumer() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocValuesConsumer() Methods | Improve this Doc View Source AddBinaryField(FieldInfo, IEnumerable<BytesRef>) Writes binary docvalues for a field. Declaration public abstract void AddBinaryField(FieldInfo field, IEnumerable<BytesRef> values) Parameters Type Name Description FieldInfo field Field information. System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable<T> of binary values (one for each document). null indicates a missing value. Exceptions Type Condition System.IO.IOException If an I/O error occurred. | Improve this Doc View Source AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) Writes numeric docvalues for a field. Declaration public abstract void AddNumericField(FieldInfo field, IEnumerable<long?> values) Parameters Type Name Description FieldInfo field Field information. System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> values System.Collections.Generic.IEnumerable<T> of numeric values (one for each document). null indicates a missing value. Exceptions Type Condition System.IO.IOException If an I/O error occurred. | Improve this Doc View Source AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) Writes pre-sorted binary docvalues for a field. Declaration public abstract void AddSortedField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrd) Parameters Type Name Description FieldInfo field Field information. System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable<T> of binary values in sorted order (deduplicated). System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrd System.Collections.Generic.IEnumerable<T> of ordinals (one for each document). -1 indicates a missing value. Exceptions Type Condition System.IO.IOException If an I/O error occurred. | Improve this Doc View Source AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) Writes pre-sorted set docvalues for a field Declaration public abstract void AddSortedSetField(FieldInfo field, IEnumerable<BytesRef> values, IEnumerable<long?> docToOrdCount, IEnumerable<long?> ords) Parameters Type Name Description FieldInfo field Field information. System.Collections.Generic.IEnumerable < BytesRef > values System.Collections.Generic.IEnumerable<T> of binary values in sorted order (deduplicated). System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> docToOrdCount System.Collections.Generic.IEnumerable<T> of the number of values for each document. A zero ordinal count indicates a missing value. System.Collections.Generic.IEnumerable < System.Nullable < System.Int64 >> ords System.Collections.Generic.IEnumerable<T> of ordinal occurrences ( docToOrdCount *maxDoc total). Exceptions Type Condition System.IO.IOException If an I/O error occurred. | Improve this Doc View Source Dispose() Disposes all resources used by this object. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Implementations must override and should dispose all resources used by this instance. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source MergeBinaryField(FieldInfo, MergeState, IList<BinaryDocValues>, IList<IBits>) Merges the binary docvalues from toMerge . The default implementation calls AddBinaryField(FieldInfo, IEnumerable<BytesRef>) , passing an System.Collections.Generic.IEnumerable<T> that merges and filters deleted documents on the fly. Declaration public virtual void MergeBinaryField(FieldInfo fieldInfo, MergeState mergeState, IList<BinaryDocValues> toMerge, IList<IBits> docsWithField) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState System.Collections.Generic.IList < BinaryDocValues > toMerge System.Collections.Generic.IList < IBits > docsWithField | Improve this Doc View Source MergeNumericField(FieldInfo, MergeState, IList<NumericDocValues>, IList<IBits>) Merges the numeric docvalues from toMerge . The default implementation calls AddNumericField(FieldInfo, IEnumerable<Nullable<Int64>>) , passing an System.Collections.Generic.IEnumerable<T> that merges and filters deleted documents on the fly. Declaration public virtual void MergeNumericField(FieldInfo fieldInfo, MergeState mergeState, IList<NumericDocValues> toMerge, IList<IBits> docsWithField) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState System.Collections.Generic.IList < NumericDocValues > toMerge System.Collections.Generic.IList < IBits > docsWithField | Improve this Doc View Source MergeSortedField(FieldInfo, MergeState, IList<SortedDocValues>) Merges the sorted docvalues from toMerge . The default implementation calls AddSortedField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>) , passing an System.Collections.Generic.IEnumerable<T> that merges ordinals and values and filters deleted documents. Declaration public virtual void MergeSortedField(FieldInfo fieldInfo, MergeState mergeState, IList<SortedDocValues> toMerge) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState System.Collections.Generic.IList < SortedDocValues > toMerge | Improve this Doc View Source MergeSortedSetField(FieldInfo, MergeState, IList<SortedSetDocValues>) Merges the sortedset docvalues from toMerge . The default implementation calls AddSortedSetField(FieldInfo, IEnumerable<BytesRef>, IEnumerable<Nullable<Int64>>, IEnumerable<Nullable<Int64>>) , passing an System.Collections.Generic.IEnumerable<T> that merges ordinals and values and filters deleted documents. Declaration public virtual void MergeSortedSetField(FieldInfo fieldInfo, MergeState mergeState, IList<SortedSetDocValues> toMerge) Parameters Type Name Description FieldInfo fieldInfo MergeState mergeState System.Collections.Generic.IList < SortedSetDocValues > toMerge Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Standard.StandardFilterFactory.html",
    "title": "Class StandardFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StandardFilterFactory Factory for StandardFilter . <fieldType name=\"text_stndrd\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.StandardFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory StandardFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Standard Assembly : Lucene.Net.Analysis.Common.dll Syntax public class StandardFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source StandardFilterFactory(IDictionary<String, String>) Creates a new StandardFilterFactory Declaration public StandardFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html",
    "title": "Class QueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeProcessor This is a default implementation for the IQueryNodeProcessor interface, it's an abstract class, so it should be extended by classes that want to process a IQueryNode tree. This class process IQueryNode s from left to right in the tree. While it's walking down the tree, for every node, PreProcessNode(IQueryNode) is invoked. After a node's children are processed, PostProcessNode(IQueryNode) is invoked for that node. SetChildrenOrder(IList<IQueryNode>) is invoked before PostProcessNode(IQueryNode) only if the node has at least one child, in SetChildrenOrder(IList<IQueryNode>) the implementor might redefine the children order or remove any children from the children list. Here is an example about how it process the nodes: a / \\ b e / \\ c d Here is the order the methods would be invoked for the tree described above: PreProcessNode( a ); PreProcessNode( b ); PreProcessNode( c ); PostProcessNode( c ); PreProcessNode( d ); PostProcessNode( d ); SetChildrenOrder( bChildrenList ); PostProcessNode( b ); PreProcessNode( e ); PostProcessNode( e ); SetChildrenOrder( aChildrenList ); PostProcessNode( a ) Inheritance System.Object QueryNodeProcessor NoChildOptimizationQueryNodeProcessor RemoveDeletedQueryNodesProcessor BooleanModifiersQueryNodeProcessor AllowLeadingWildcardProcessor AnalyzerQueryNodeProcessor BooleanSingleChildOptimizationQueryNodeProcessor BoostQueryNodeProcessor DefaultPhraseSlopQueryNodeProcessor FuzzyQueryNodeProcessor LowercaseExpandedTermsQueryNodeProcessor MatchAllDocsQueryNodeProcessor MultiFieldQueryNodeProcessor MultiTermRewriteMethodProcessor NumericQueryNodeProcessor NumericRangeQueryNodeProcessor OpenRangeQueryNodeProcessor PhraseSlopQueryNodeProcessor RemoveEmptyNonLeafQueryNodeProcessor TermRangeQueryNodeProcessor WildcardQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public abstract class QueryNodeProcessor : IQueryNodeProcessor Constructors | Improve this Doc View Source QueryNodeProcessor() Declaration public QueryNodeProcessor() | Improve this Doc View Source QueryNodeProcessor(QueryConfigHandler) Declaration public QueryNodeProcessor(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Methods | Improve this Doc View Source GetQueryConfigHandler() For reference about this method check: GetQueryConfigHandler() . Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler QueryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler | Improve this Doc View Source PostProcessNode(IQueryNode) This method is invoked for every node when walking up the tree. Declaration protected abstract IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node node the query node to be post-processed Returns Type Description IQueryNode a query node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source PreProcessNode(IQueryNode) This method is invoked for every node when walking down the tree. Declaration protected abstract IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node the query node to be pre-processed Returns Type Description IQueryNode a query node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source ProcessChildren(IQueryNode) This method is called every time a child is processed. Declaration protected virtual void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree the query node child to be processed Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) This method is invoked for every node that has at least on child. It's invoked right before PostProcessNode(IQueryNode) is invoked. Declaration protected abstract IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children the list containing all current node's children Returns Type Description System.Collections.Generic.IList < IQueryNode > a new list containing all children that should be set to the current node Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) For reference about this method check: SetQueryConfigHandler(QueryConfigHandler) . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler Implements IQueryNodeProcessor See Also IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html",
    "title": "Class QueryNodeProcessorPipeline | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeProcessorPipeline A QueryNodeProcessorPipeline class should be used to build a query node processor pipeline. When a query node tree is processed using this class, it passes the query node tree to each processor on the pipeline and the result from each processor is passed to the next one, always following the order the processors were on the pipeline. When a QueryConfigHandler object is set on a QueryNodeProcessorPipeline , it also takes care of setting this QueryConfigHandler on all processor on pipeline. Inheritance System.Object QueryNodeProcessorPipeline StandardQueryNodeProcessorPipeline Implements IQueryNodeProcessor System.Collections.Generic.IList < IQueryNodeProcessor > System.Collections.Generic.ICollection < IQueryNodeProcessor > System.Collections.Generic.IEnumerable < IQueryNodeProcessor > System.Collections.IEnumerable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeProcessorPipeline : IQueryNodeProcessor, IList<IQueryNodeProcessor>, ICollection<IQueryNodeProcessor>, IEnumerable<IQueryNodeProcessor>, IEnumerable Constructors | Improve this Doc View Source QueryNodeProcessorPipeline() Constructs an empty query node processor pipeline. Declaration public QueryNodeProcessorPipeline() | Improve this Doc View Source QueryNodeProcessorPipeline(QueryConfigHandler) Constructs with a QueryConfigHandler object. Declaration public QueryNodeProcessorPipeline(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler Properties | Improve this Doc View Source Count System.Collections.Generic.ICollection<T>.Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly System.Collections.Generic.ICollection<T>.IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] System.Collections.Generic.IList<T>.Item[System.Int32] Declaration public virtual IQueryNodeProcessor this[int index] { get; set; } Parameters Type Name Description System.Int32 index Property Value Type Description IQueryNodeProcessor Methods | Improve this Doc View Source Add(IQueryNodeProcessor) System.Collections.Generic.ICollection<T>.Add(T) Declaration public virtual bool Add(IQueryNodeProcessor processor) Parameters Type Name Description IQueryNodeProcessor processor Returns Type Description System.Boolean | Improve this Doc View Source Clear() System.Collections.Generic.ICollection<T>.Clear() Declaration public virtual void Clear() | Improve this Doc View Source Contains(IQueryNodeProcessor) System.Collections.Generic.ICollection<T>.Contains(T) Declaration public virtual bool Contains(IQueryNodeProcessor item) Parameters Type Name Description IQueryNodeProcessor item Returns Type Description System.Boolean | Improve this Doc View Source Contains(Object) Declaration public virtual bool Contains(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(IQueryNodeProcessor[], Int32) System.Collections.Generic.ICollection<T>.CopyTo(T[], System.Int32) Declaration public virtual void CopyTo(IQueryNodeProcessor[] array, int arrayIndex) Parameters Type Name Description IQueryNodeProcessor [] array System.Int32 arrayIndex | Improve this Doc View Source GetEnumerator() System.Collections.Generic.IEnumerable<T>.GetEnumerator() Declaration public virtual IEnumerator<IQueryNodeProcessor> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < IQueryNodeProcessor > | Improve this Doc View Source GetQueryConfigHandler() For reference about this method check: GetQueryConfigHandler() . Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler QueryConfigHandler the query configuration handler to be set. See Also SetQueryConfigHandler ( QueryConfigHandler ) QueryConfigHandler | Improve this Doc View Source GetRange(Int32, Int32) Declaration public virtual IList<IQueryNodeProcessor> GetRange(int index, int count) Parameters Type Name Description System.Int32 index System.Int32 count Returns Type Description System.Collections.Generic.IList < IQueryNodeProcessor > | Improve this Doc View Source IndexOf(IQueryNodeProcessor) System.Collections.Generic.IList<T>.IndexOf(T) Declaration public virtual int IndexOf(IQueryNodeProcessor o) Parameters Type Name Description IQueryNodeProcessor o Returns Type Description System.Int32 | Improve this Doc View Source Insert(Int32, IQueryNodeProcessor) Declaration public virtual void Insert(int index, IQueryNodeProcessor item) Parameters Type Name Description System.Int32 index IQueryNodeProcessor item | Improve this Doc View Source Process(IQueryNode) For reference about this method check: Process(IQueryNode) . Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree the query node tree to be processed Returns Type Description IQueryNode Exceptions Type Condition QueryNodeException if something goes wrong during the query node processing See Also IQueryNode | Improve this Doc View Source Remove(IQueryNodeProcessor) System.Collections.Generic.ICollection<T>.Remove(T) Declaration public virtual bool Remove(IQueryNodeProcessor o) Parameters Type Name Description IQueryNodeProcessor o Returns Type Description System.Boolean | Improve this Doc View Source RemoveAt(Int32) System.Collections.Generic.IList<T>.RemoveAt(System.Int32) Declaration public virtual void RemoveAt(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source RemoveRange(Int32, Int32) Declaration public virtual void RemoveRange(int index, int count) Parameters Type Name Description System.Int32 index System.Int32 count | Improve this Doc View Source Set(Int32, IQueryNodeProcessor) Declaration public virtual IQueryNodeProcessor Set(int index, IQueryNodeProcessor processor) Parameters Type Name Description System.Int32 index IQueryNodeProcessor processor Returns Type Description IQueryNodeProcessor | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) For reference about this method check: SetQueryConfigHandler(QueryConfigHandler) . Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler the query configuration handler to be set. See Also GetQueryConfigHandler () QueryConfigHandler Explicit Interface Implementations | Improve this Doc View Source ICollection<IQueryNodeProcessor>.Add(IQueryNodeProcessor) System.Collections.Generic.ICollection<T>.Add(T) Declaration void ICollection<IQueryNodeProcessor>.Add(IQueryNodeProcessor item) Parameters Type Name Description IQueryNodeProcessor item | Improve this Doc View Source IEnumerable.GetEnumerator() System.Collections.IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements IQueryNodeProcessor System.Collections.Generic.IList<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.RemoveDeletedQueryNodesProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.RemoveDeletedQueryNodesProcessor.html",
    "title": "Class RemoveDeletedQueryNodesProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RemoveDeletedQueryNodesProcessor A QueryNodeProcessorPipeline class removes every instance of DeletedQueryNode from a query node tree. If the resulting root node is a DeletedQueryNode , MatchNoDocsQueryNode is returned. Inheritance System.Object QueryNodeProcessor RemoveDeletedQueryNodesProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class RemoveDeletedQueryNodesProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source RemoveDeletedQueryNodesProcessor() Declaration public RemoveDeletedQueryNodesProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeError.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeError.html",
    "title": "Class QueryNodeError | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeError Error class with NLS support Inheritance System.Object System.Exception QueryNodeError Implements INLSException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeError : Exception, INLSException Constructors | Improve this Doc View Source QueryNodeError(IMessage) Declaration public QueryNodeError(IMessage message) Parameters Type Name Description IMessage message NLS Message Object | Improve this Doc View Source QueryNodeError(IMessage, Exception) Declaration public QueryNodeError(IMessage message, Exception throwable) Parameters Type Name Description IMessage message NLS Message Object System.Exception throwable An exception instance to wrap | Improve this Doc View Source QueryNodeError(Exception) Declaration public QueryNodeError(Exception throwable) Parameters Type Name Description System.Exception throwable An exception instance to wrap Properties | Improve this Doc View Source MessageObject MessageObject Declaration public virtual IMessage MessageObject { get; } Property Value Type Description IMessage Implements INLSException See Also NLS IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeException.html",
    "title": "Class QueryNodeException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeException This exception should be thrown if something wrong happens when dealing with IQueryNode s. It also supports NLS messages. Inheritance System.Object System.Exception QueryNodeException QueryNodeParseException Implements INLSException Inherited Members System.Exception.GetBaseException() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeException : Exception, INLSException Constructors | Improve this Doc View Source QueryNodeException(IMessage) Declaration public QueryNodeException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source QueryNodeException(IMessage, Exception) Declaration public QueryNodeException(IMessage message, Exception throwable) Parameters Type Name Description IMessage message System.Exception throwable | Improve this Doc View Source QueryNodeException(Exception) Declaration public QueryNodeException(Exception throwable) Parameters Type Name Description System.Exception throwable Fields | Improve this Doc View Source m_message Declaration protected IMessage m_message Field Value Type Description IMessage Properties | Improve this Doc View Source Message Declaration public override string Message { get; } Property Value Type Description System.String Overrides System.Exception.Message | Improve this Doc View Source MessageObject Declaration public virtual IMessage MessageObject { get; } Property Value Type Description IMessage Methods | Improve this Doc View Source GetLocalizedMessage() Declaration public virtual string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration public virtual string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description System.Globalization.CultureInfo locale Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Exception.ToString() Implements INLSException See Also IMessage NLS INLSException IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeParseException.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.QueryNodeParseException.html",
    "title": "Class QueryNodeParseException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryNodeParseException This should be thrown when an exception happens during the query parsing from string to the query node tree. Inheritance System.Object System.Exception QueryNodeException QueryNodeParseException ParseException Implements INLSException Inherited Members QueryNodeException.m_message QueryNodeException.MessageObject QueryNodeException.Message QueryNodeException.GetLocalizedMessage() QueryNodeException.GetLocalizedMessage(CultureInfo) QueryNodeException.ToString() System.Exception.GetBaseException() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core Assembly : Lucene.Net.QueryParser.dll Syntax public class QueryNodeParseException : QueryNodeException, INLSException Constructors | Improve this Doc View Source QueryNodeParseException(IMessage) Declaration public QueryNodeParseException(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source QueryNodeParseException(IMessage, Exception) Declaration public QueryNodeParseException(IMessage message, Exception throwable) Parameters Type Name Description IMessage message System.Exception throwable | Improve this Doc View Source QueryNodeParseException(Exception) Declaration public QueryNodeParseException(Exception throwable) Parameters Type Name Description System.Exception throwable Properties | Improve this Doc View Source BeginColumn For EndOfLine and EndOfFile (\"<EOF>\") parsing problems the last char in the string is returned. For the case where the parser is not able to figure out the line and column number -1 will be returned. Returns column of the first char where the problem was found. Declaration public virtual int BeginColumn { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine For EndOfLine and EndOfFile (\"<EOF>\") parsing problems the last char in the string is returned. For the case where the parser is not able to figure out the line and column number -1 will be returned. Returns line where the problem was found. Declaration public virtual int BeginLine { get; protected set; } Property Value Type Description System.Int32 | Improve this Doc View Source ErrorToken The errorToken in the query Declaration public virtual string ErrorToken { get; protected set; } Property Value Type Description System.String | Improve this Doc View Source Query Declaration public virtual string Query { get; } Property Value Type Description System.String Methods | Improve this Doc View Source SetNonLocalizedMessage(IMessage) Declaration public virtual void SetNonLocalizedMessage(IMessage message) Parameters Type Name Description IMessage message | Improve this Doc View Source SetQuery(String) Declaration public virtual void SetQuery(string query) Parameters Type Name Description System.String query Implements INLSException See Also QueryNodeException ISyntaxParser IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.UnescapedCharSequence.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Util.UnescapedCharSequence.html",
    "title": "Class UnescapedCharSequence | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class UnescapedCharSequence ICharSequence with escaped chars information. Inheritance System.Object UnescapedCharSequence Implements ICharSequence Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Util Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class UnescapedCharSequence : ICharSequence Constructors | Improve this Doc View Source UnescapedCharSequence(ICharSequence) Create a non-escaped ICharSequence Declaration public UnescapedCharSequence(ICharSequence text) Parameters Type Name Description ICharSequence text | Improve this Doc View Source UnescapedCharSequence(Char[], Boolean[], Int32, Int32) Create a escaped ICharSequence Declaration public UnescapedCharSequence(char[] chars, bool[] wasEscaped, int offset, int length) Parameters Type Name Description System.Char [] chars System.Boolean [] wasEscaped System.Int32 offset System.Int32 length | Improve this Doc View Source UnescapedCharSequence(String) Create a non-escaped System.String Declaration public UnescapedCharSequence(string text) Parameters Type Name Description System.String text | Improve this Doc View Source UnescapedCharSequence(StringBuilder) Create a non-escaped System.Text.StringBuilder Declaration public UnescapedCharSequence(StringBuilder text) Parameters Type Name Description System.Text.StringBuilder text Properties | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToLower(ICharSequence, CultureInfo) Declaration public static ICharSequence ToLower(ICharSequence text, CultureInfo locale) Parameters Type Name Description ICharSequence text System.Globalization.CultureInfo locale Returns Type Description ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() | Improve this Doc View Source ToStringEscaped() Return an escaped System.String Declaration public string ToStringEscaped() Returns Type Description System.String an escaped System.String | Improve this Doc View Source ToStringEscaped(Char[]) Return an escaped System.String Declaration public ICharSequence ToStringEscaped(char[] enabledChars) Parameters Type Name Description System.Char [] enabledChars array of chars to be escaped Returns Type Description ICharSequence an escaped System.String | Improve this Doc View Source WasEscaped(ICharSequence, Int32) Declaration public static bool WasEscaped(ICharSequence text, int index) Parameters Type Name Description ICharSequence text System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source WasEscaped(Int32) Declaration public bool WasEscaped(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean Implements ICharSequence"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.Message.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Messages.Message.html",
    "title": "Class Message | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Message Default implementation of Message interface. For Native Language Support (NLS), system of software internationalization. Inheritance System.Object Message Implements IMessage Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Messages Assembly : Lucene.Net.QueryParser.dll Syntax public class Message : IMessage Constructors | Improve this Doc View Source Message(String) Declaration public Message(string key) Parameters Type Name Description System.String key | Improve this Doc View Source Message(String, Object[]) Declaration public Message(string key, params object[] args) Parameters Type Name Description System.String key System.Object [] args Properties | Improve this Doc View Source Key Declaration public virtual string Key { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetArguments() Declaration public virtual object[] GetArguments() Returns Type Description System.Object [] | Improve this Doc View Source GetLocalizedMessage() Declaration public virtual string GetLocalizedMessage() Returns Type Description System.String | Improve this Doc View Source GetLocalizedMessage(CultureInfo) Declaration public virtual string GetLocalizedMessage(CultureInfo locale) Parameters Type Name Description System.Globalization.CultureInfo locale Returns Type Description System.String | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IMessage"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FilteredQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FilteredQueryBuilder.html",
    "title": "Class FilteredQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilteredQueryBuilder Builder for FilteredQuery Inheritance System.Object FilteredQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FilteredQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source FilteredQueryBuilder(IFilterBuilder, IQueryBuilder) Declaration public FilteredQueryBuilder(IFilterBuilder filterFactory, IQueryBuilder queryFactory) Parameters Type Name Description IFilterBuilder filterFactory IQueryBuilder queryFactory Methods | Improve this Doc View Source GetQuery(XmlElement) (non-Javadoc) @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FuzzyLikeThisQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.FuzzyLikeThisQueryBuilder.html",
    "title": "Class FuzzyLikeThisQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FuzzyLikeThisQueryBuilder Builder for Lucene.Net.Sandbox.Queries.FuzzyLikeThisQuery Inheritance System.Object FuzzyLikeThisQueryBuilder Implements IQueryBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public class FuzzyLikeThisQueryBuilder : IQueryBuilder Constructors | Improve this Doc View Source FuzzyLikeThisQueryBuilder(Analyzer) Declaration public FuzzyLikeThisQueryBuilder(Analyzer analyzer) Parameters Type Name Description Analyzer analyzer Methods | Improve this Doc View Source GetQuery(XmlElement) Declaration public virtual Query GetQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description Query Implements IQueryBuilder"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ISpanQueryBuilder.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Xml.Builders.ISpanQueryBuilder.html",
    "title": "Interface ISpanQueryBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISpanQueryBuilder Interface for retrieving a SpanQuery Inherited Members IQueryBuilder.GetQuery(XmlElement) Namespace : Lucene.Net.QueryParsers.Xml.Builders Assembly : Lucene.Net.QueryParser.dll Syntax public interface ISpanQueryBuilder : IQueryBuilder Methods | Improve this Doc View Source GetSpanQuery(XmlElement) Declaration SpanQuery GetSpanQuery(XmlElement e) Parameters Type Name Description System.Xml.XmlElement e Returns Type Description SpanQuery"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsAndPositionsEnum.html",
    "title": "Class DocsAndPositionsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocsAndPositionsEnum Also iterates through positions. Inheritance System.Object DocIdSetIterator DocsEnum DocsAndPositionsEnum MappingMultiDocsAndPositionsEnum FilterAtomicReader.FilterDocsAndPositionsEnum MultiDocsAndPositionsEnum Inherited Members DocsEnum.Freq DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocsAndPositionsEnum : DocsEnum Constructors | Improve this Doc View Source DocsAndPositionsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocsAndPositionsEnum() Properties | Improve this Doc View Source EndOffset Returns end offset for the current position, or -1 if offsets were not indexed. Declaration public abstract int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source StartOffset Returns start offset for the current position, or -1 if offsets were not indexed. Declaration public abstract int StartOffset { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetPayload() Returns the payload at this position, or null if no payload was indexed. You should not modify anything (neither members of the returned BytesRef nor bytes in the byte[] ). Declaration public abstract BytesRef GetPayload() Returns Type Description BytesRef | Improve this Doc View Source NextPosition() Returns the next position. You should only call this up to Freq times else the behavior is not defined. If positions were not indexed this will return -1; this only happens if offsets were indexed and you passed needsOffset=true when pulling the enum. Declaration public abstract int NextPosition() Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocsEnum.html",
    "title": "Class DocsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocsEnum Iterates through the documents and term freqs. NOTE: you must first call NextDoc() before using any of the per-doc methods. Inheritance System.Object DocIdSetIterator DocsEnum MappingMultiDocsEnum DocsAndPositionsEnum FilterAtomicReader.FilterDocsEnum MultiDocsEnum Scorer Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.DocID DocIdSetIterator.NextDoc() DocIdSetIterator.Advance(Int32) DocIdSetIterator.SlowAdvance(Int32) DocIdSetIterator.GetCost() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class DocsEnum : DocIdSetIterator Constructors | Improve this Doc View Source DocsEnum() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected DocsEnum() Properties | Improve this Doc View Source Attributes Returns the related attributes. Declaration public virtual AttributeSource Attributes { get; } Property Value Type Description AttributeSource | Improve this Doc View Source Freq Returns term frequency in the current document, or 1 if the field was indexed with DOCS_ONLY . Do not call this before NextDoc() is first called, nor after NextDoc() returns NO_MORE_DOCS . NOTE: if the DocsEnum was obtain with NONE , the result of this method is undefined. Declaration public abstract int Freq { get; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MergePolicy.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MergePolicy.html",
    "title": "Class MergePolicy | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergePolicy Expert: a MergePolicy determines the sequence of primitive merge operations. Whenever the segments in an index have been altered by IndexWriter , either the addition of a newly flushed segment, addition of many segments from AddIndexes* calls, or a previous merge that may now need to cascade, IndexWriter invokes FindMerges(MergeTrigger, SegmentInfos) to give the MergePolicy a chance to pick merges that are now required. This method returns a MergePolicy.MergeSpecification instance describing the set of merges that should be done, or null if no merges are necessary. When ForceMerge(Int32) is called, it calls FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) and the MergePolicy should then return the necessary merges. Note that the policy can return more than one merge at a time. In this case, if the writer is using SerialMergeScheduler , the merges will be run sequentially but if it is using they will be run concurrently. The default MergePolicy is TieredMergePolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object MergePolicy LogMergePolicy NoMergePolicy SortingMergePolicy TieredMergePolicy UpgradeIndexMergePolicy Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class MergePolicy : IDisposable Constructors | Improve this Doc View Source MergePolicy() Creates a new merge policy instance. Note that if you intend to use it without passing it to IndexWriter , you should call SetIndexWriter(IndexWriter) . Declaration public MergePolicy() | Improve this Doc View Source MergePolicy(Double, Int64) Creates a new merge policy instance with default settings for m_noCFSRatio and m_maxCFSSegmentSize . This ctor should be used by subclasses using different defaults than the MergePolicy Declaration protected MergePolicy(double defaultNoCFSRatio, long defaultMaxCFSSegmentSize) Parameters Type Name Description System.Double defaultNoCFSRatio System.Int64 defaultMaxCFSSegmentSize Fields | Improve this Doc View Source DEFAULT_MAX_CFS_SEGMENT_SIZE Default max segment size in order to use compound file system. Set to System.Int64.MaxValue . Declaration protected static readonly long DEFAULT_MAX_CFS_SEGMENT_SIZE Field Value Type Description System.Int64 | Improve this Doc View Source DEFAULT_NO_CFS_RATIO Default ratio for compound file system usage. Set to 1.0 , always use compound file system. Declaration protected static readonly double DEFAULT_NO_CFS_RATIO Field Value Type Description System.Double | Improve this Doc View Source m_maxCFSSegmentSize If the size of the merged segment exceeds this value then it will not use compound file format. Declaration protected long m_maxCFSSegmentSize Field Value Type Description System.Int64 | Improve this Doc View Source m_noCFSRatio If the size of the merge segment exceeds this ratio of the total index size then it will remain in non-compound format Declaration protected double m_noCFSRatio Field Value Type Description System.Double | Improve this Doc View Source m_writer IndexWriter that contains this instance. Declaration protected SetOnce<IndexWriter> m_writer Field Value Type Description SetOnce < IndexWriter > Properties | Improve this Doc View Source MaxCFSSegmentSizeMB Gets or Sets the largest size allowed for a compound file segment. If a merged segment will be more than this value, leave the segment as non-compound file even if compound file is enabled. Set this to System.Double.PositiveInfinity (default) and NoCFSRatio to 1.0 to always use CFS regardless of merge size. Declaration public double MaxCFSSegmentSizeMB { get; set; } Property Value Type Description System.Double | Improve this Doc View Source NoCFSRatio Gets or Sets current m_noCFSRatio . If a merged segment will be more than this percentage of the total size of the index, leave the segment as non-compound file even if compound file is enabled. Set to 1.0 to always use CFS regardless of merge size. Declaration public double NoCFSRatio { get; set; } Property Value Type Description System.Double Methods | Improve this Doc View Source Clone() Declaration public virtual object Clone() Returns Type Description System.Object | Improve this Doc View Source Dispose() Release all resources for the policy. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Release all resources for the policy. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source FindForcedDeletesMerges(SegmentInfos) Determine what set of merge operations is necessary in order to expunge all deletes from the index. Declaration public abstract MergePolicy.MergeSpecification FindForcedDeletesMerges(SegmentInfos segmentInfos) Parameters Type Name Description SegmentInfos segmentInfos the total set of segments in the index Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) Determine what set of merge operations is necessary in order to merge to <= the specified segment count. IndexWriter calls this when its ForceMerge(Int32, Boolean) method is called. This call is always synchronized on the IndexWriter instance so only one thread at a time will call this method. Declaration public abstract MergePolicy.MergeSpecification FindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, IDictionary<SegmentCommitInfo, bool?> segmentsToMerge) Parameters Type Name Description SegmentInfos segmentInfos The total set of segments in the index System.Int32 maxSegmentCount Requested maximum number of segments in the index (currently this is always 1) System.Collections.Generic.IDictionary < SegmentCommitInfo , System.Nullable < System.Boolean >> segmentsToMerge Contains the specific SegmentInfo instances that must be merged away. This may be a subset of all SegmentInfos. If the value is true for a given SegmentInfo , that means this segment was an original segment present in the to-be-merged index; else, it was a segment produced by a cascaded merge. Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source FindMerges(MergeTrigger, SegmentInfos) Determine what set of merge operations are now necessary on the index. IndexWriter calls this whenever there is a change to the segments. This call is always synchronized on the IndexWriter instance so only one thread at a time will call this method. Declaration public abstract MergePolicy.MergeSpecification FindMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos) Parameters Type Name Description MergeTrigger mergeTrigger the event that triggered the merge SegmentInfos segmentInfos the total set of segments in the index Returns Type Description MergePolicy.MergeSpecification | Improve this Doc View Source IsMerged(SegmentInfos, SegmentCommitInfo) Returns true if this single info is already fully merged (has no pending deletes, is in the same dir as the writer, and matches the current compound file setting Declaration protected bool IsMerged(SegmentInfos infos, SegmentCommitInfo info) Parameters Type Name Description SegmentInfos infos SegmentCommitInfo info Returns Type Description System.Boolean | Improve this Doc View Source SetIndexWriter(IndexWriter) Sets the IndexWriter to use by this merge policy. This method is allowed to be called only once, and is usually set by IndexWriter . If it is called more than once, AlreadySetException is thrown. Declaration public virtual void SetIndexWriter(IndexWriter writer) Parameters Type Name Description IndexWriter writer See Also SetOnce <T> | Improve this Doc View Source Size(SegmentCommitInfo) Return the byte size of the provided SegmentCommitInfo , pro-rated by percentage of non-deleted documents is set. Declaration protected virtual long Size(SegmentCommitInfo info) Parameters Type Name Description SegmentCommitInfo info Returns Type Description System.Int64 | Improve this Doc View Source UseCompoundFile(SegmentInfos, SegmentCommitInfo) Returns true if a new segment (regardless of its origin) should use the compound file format. The default implementation returns true iff the size of the given mergedInfo is less or equal to MaxCFSSegmentSizeMB and the size is less or equal to the TotalIndexSize * NoCFSRatio otherwise false . Declaration public virtual bool UseCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo) Parameters Type Name Description SegmentInfos infos SegmentCommitInfo mergedInfo Returns Type Description System.Boolean Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.TaskMergeScheduler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.TaskMergeScheduler.html",
    "title": "Class TaskMergeScheduler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaskMergeScheduler A MergeScheduler that runs each merge using System.Threading.Tasks.Task s on the default System.Threading.Tasks.TaskScheduler . If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. LUCENENET specific Inheritance System.Object MergeScheduler TaskMergeScheduler Implements IConcurrentMergeScheduler IMergeScheduler System.IDisposable Inherited Members MergeScheduler.Dispose() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class TaskMergeScheduler : MergeScheduler, IConcurrentMergeScheduler, IMergeScheduler, IDisposable Constructors | Improve this Doc View Source TaskMergeScheduler() Sole constructor, with all settings set to default values. Declaration public TaskMergeScheduler() Fields | Improve this Doc View Source COMPONENT_NAME Declaration public const string COMPONENT_NAME = \"CMS\" Field Value Type Description System.String Properties | Improve this Doc View Source MaxMergeCount Max number of merges we accept before forcefully throttling the incoming threads Declaration public int MaxMergeCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MaxThreadCount Max number of merge threads allowed to be running at once. When there are more merges then this, we forcefully pause the larger ones, letting the smaller ones run, up until MaxMergeCount merges at which point we forcefully pause incoming threads (that presumably are the ones causing so much merging). Declaration public int MaxThreadCount { get; } Property Value Type Description System.Int32 See Also SetMaxMergesAndThreads(Int32, Int32) | Improve this Doc View Source MergeThreadPriority Return the priority that merge threads run at. This is always the same. Declaration public int MergeThreadPriority { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Verbose Returns true if verbosing is enabled. This method is usually used in conjunction with Message(String) , like that: if (Verbose) { Message(\"your message\"); } Declaration protected bool Verbose { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source ClearSuppressExceptions() Used for testing Declaration public virtual void ClearSuppressExceptions() | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides MergeScheduler.Clone() | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides MergeScheduler.Dispose(Boolean) | Improve this Doc View Source DoMerge(MergePolicy.OneMerge) Does the actual merge, by calling Merge(MergePolicy.OneMerge) Declaration protected virtual void DoMerge(MergePolicy.OneMerge merge) Parameters Type Name Description MergePolicy.OneMerge merge | Improve this Doc View Source HandleMergeException(Exception) Called when an exception is hit in a background merge thread Declaration protected virtual void HandleMergeException(Exception exc) Parameters Type Name Description System.Exception exc | Improve this Doc View Source Merge(IndexWriter, MergeTrigger, Boolean) Declaration public override void Merge(IndexWriter writer, MergeTrigger trigger, bool newMergesFound) Parameters Type Name Description IndexWriter writer MergeTrigger trigger System.Boolean newMergesFound Overrides MergeScheduler.Merge(IndexWriter, MergeTrigger, Boolean) | Improve this Doc View Source Message(String) Outputs the given message - this method assumes Verbose was called and returned true . Declaration protected virtual void Message(string message) Parameters Type Name Description System.String message | Improve this Doc View Source SetMaxMergesAndThreads(Int32, Int32) Sets the maximum number of merge threads and simultaneous merges allowed. Declaration public void SetMaxMergesAndThreads(int maxMergeCount, int maxThreadCount) Parameters Type Name Description System.Int32 maxMergeCount The max # simultaneous merges that are allowed. If a merge is necessary yet we already have this many threads running, the incoming thread (that is calling add/updateDocument) will block until a merge thread has completed. Note that we will only run the smallest maxThreadCount merges at a time. System.Int32 maxThreadCount The max # simultaneous merge threads that should be running at once. This must be <= maxMergeCount | Improve this Doc View Source SetMergeThreadPriority(Int32) This method has no effect in TaskMergeScheduler because the MergeThreadPriority returns a constant value. Declaration public void SetMergeThreadPriority(int priority) Parameters Type Name Description System.Int32 priority | Improve this Doc View Source SetSuppressExceptions() Used for testing Declaration public virtual void SetSuppressExceptions() | Improve this Doc View Source Sync() Wait for any running merge threads to finish. This call is not interruptible as used by Dispose() . Declaration public virtual void Sync() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements IConcurrentMergeScheduler IMergeScheduler System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumInt32Associations.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumInt32Associations.html",
    "title": "Class TaxonomyFacetSumInt32Associations | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaxonomyFacetSumInt32Associations Aggregates sum of System.Int32 values previously indexed with Int32AssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumIntAssociations in Lucene @lucene.experimental Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets TaxonomyFacetSumInt32Associations Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumInt32Associations : Int32TaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumInt32Associations(TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumInt32Associations against the default index field. Declaration public TaxonomyFacetSumInt32Associations(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source TaxonomyFacetSumInt32Associations(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumInt32Associations against the specified index field. Declaration public TaxonomyFacetSumInt32Associations(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Field.Single.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Field.Single.html",
    "title": "Class Field.Single | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Field.Single Inheritance System.Object Field.Number Field.Single Inherited Members Field.Number.GetByteValue() Field.Number.GetInt16Value() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax protected sealed class Single : Field.Number Constructors | Improve this Doc View Source Single(Single) Declaration public Single(float value) Parameters Type Name Description System.Single value Methods | Improve this Doc View Source GetDoubleValue() Declaration public override double GetDoubleValue() Returns Type Description System.Double Overrides Field.Number.GetDoubleValue() | Improve this Doc View Source GetInt32Value() Declaration public override int GetInt32Value() Returns Type Description System.Int32 Overrides Field.Number.GetInt32Value() | Improve this Doc View Source GetInt64Value() Declaration public override long GetInt64Value() Returns Type Description System.Int64 Overrides Field.Number.GetInt64Value() | Improve this Doc View Source GetSingleValue() Declaration public override float GetSingleValue() Returns Type Description System.Single Overrides Field.Number.GetSingleValue() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.Number.ToString() | Improve this Doc View Source ToString(IFormatProvider) Declaration public override string ToString(IFormatProvider provider) Parameters Type Name Description System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(IFormatProvider) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string format) Parameters Type Name Description System.String format Returns Type Description System.String Overrides Field.Number.ToString(String) | Improve this Doc View Source ToString(String, IFormatProvider) Declaration public override string ToString(string format, IFormatProvider provider) Parameters Type Name Description System.String format System.IFormatProvider provider Returns Type Description System.String Overrides Field.Number.ToString(String, IFormatProvider) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int16DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int16DocValuesField.html",
    "title": "Class Int16DocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int16DocValuesField Field that stores a per-document System.Int16 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int16DocValuesField(name, (short) 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was ShortDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int16DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use NumericDocValuesField instead.\")] public class Int16DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int16DocValuesField(String, Int16) Creates a new DocValues field with the specified 16-bit System.Int16 value Declaration public Int16DocValuesField(string name, short value) Parameters Type Name Description System.String name field name System.Int16 value 16-bit System.Int16 value Exceptions Type Condition System.ArgumentNullException if the field name is null Methods | Improve this Doc View Source SetInt16Value(Int16) Declaration public override void SetInt16Value(short value) Parameters Type Name Description System.Int16 value Overrides Field.SetInt16Value(Int16) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.Int32DocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.Int32DocValuesField.html",
    "title": "Class Int32DocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int32DocValuesField Field that stores a per-document System.Int32 value for scoring, sorting or value retrieval. Here's an example usage: document.Add(new Int32DocValuesField(name, 22)); If you also need to store the value, you should add a separate StoredField instance. NOTE: This was IntDocValuesField in Lucene Inheritance System.Object Field NumericDocValuesField Int32DocValuesField Implements IIndexableField Inherited Members NumericDocValuesField.TYPE Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Deprecated, use NumericDocValuesField instead\")] public class Int32DocValuesField : NumericDocValuesField, IIndexableField Constructors | Improve this Doc View Source Int32DocValuesField(String, Int32) Creates a new DocValues field with the specified 32-bit System.Int32 value Declaration public Int32DocValuesField(string name, int value) Parameters Type Name Description System.String name field name System.Int32 value 32-bit System.Int32 value Exceptions Type Condition System.ArgumentNullException if the field name is null Methods | Improve this Doc View Source SetInt32Value(Int32) Declaration public override void SetInt32Value(int value) Parameters Type Name Description System.Int32 value Overrides Field.SetInt32Value(Int32) Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also NumericDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StoredField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StoredField.html",
    "title": "Class StoredField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StoredField A field whose value is stored so that Doc(Int32) and Document(Int32) will return the field and its value. Inheritance System.Object Field StoredField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax public sealed class StoredField : Field, IIndexableField Constructors | Improve this Doc View Source StoredField(String, BytesRef) Create a stored-only field with the given binary value. NOTE: the provided BytesRef is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, BytesRef value) Parameters Type Name Description System.String name field name BytesRef value BytesRef pointing to binary content (not copied) Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Byte[]) Create a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, byte[] value) Parameters Type Name Description System.String name field name System.Byte [] value byte array pointing to binary content (not copied) Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Byte[], Int32, Int32) Create a stored-only field with the given binary value. NOTE: the provided byte[] is not copied so be sure not to change it until you're done with this field. Declaration public StoredField(string name, byte[] value, int offset, int length) Parameters Type Name Description System.String name field name System.Byte [] value System.Byte array pointing to binary content (not copied) System.Int32 offset starting position of the byte array System.Int32 length valid length of the byte array Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Double) Create a stored-only field with the given System.Double value. Declaration public StoredField(string name, double value) Parameters Type Name Description System.String name field name System.Double value System.Double value Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Int32) Create a stored-only field with the given System.Int32 value. Declaration public StoredField(string name, int value) Parameters Type Name Description System.String name field name System.Int32 value System.Int32 value Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Int64) Create a stored-only field with the given System.Int64 value. Declaration public StoredField(string name, long value) Parameters Type Name Description System.String name field name System.Int64 value System.Int64 value Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, Single) Create a stored-only field with the given System.Single value. Declaration public StoredField(string name, float value) Parameters Type Name Description System.String name field name System.Single value System.Single value Exceptions Type Condition System.ArgumentNullException if the field name is null . | Improve this Doc View Source StoredField(String, String) Create a stored-only field with the given System.String value. Declaration public StoredField(string name, string value) Parameters Type Name Description System.String name field name System.String value System.String value Exceptions Type Condition System.ArgumentNullException if the field name or value is null . Fields | Improve this Doc View Source TYPE Type for a stored-only field. Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Documents.StraightBytesDocValuesField.html": {
    "href": "api/Lucene.Net/Lucene.Net.Documents.StraightBytesDocValuesField.html",
    "title": "Class StraightBytesDocValuesField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StraightBytesDocValuesField Field that stores a per-document BytesRef value. If values may be shared it's better to use SortedDocValuesField . Here's an example usage: document.Add(new StraightBytesDocValuesField(name, new BytesRef(\"hello\"))); If you also need to store the value, you should add a separate StoredField instance. Inheritance System.Object Field BinaryDocValuesField StraightBytesDocValuesField Implements IIndexableField Inherited Members BinaryDocValuesField.fType Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.ToString() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Documents Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use BinaryDocValuesField instead.\")] public class StraightBytesDocValuesField : BinaryDocValuesField, IIndexableField Constructors | Improve this Doc View Source StraightBytesDocValuesField(String, BytesRef) Create a new fixed or variable length DocValues field. Declaration public StraightBytesDocValuesField(string name, BytesRef bytes) Parameters Type Name Description System.String name field name BytesRef bytes binary content Exceptions Type Condition System.ArgumentNullException if the field name is null | Improve this Doc View Source StraightBytesDocValuesField(String, BytesRef, Boolean) Create a new fixed or variable length direct DocValues field. Declaration public StraightBytesDocValuesField(string name, BytesRef bytes, bool isFixedLength) Parameters Type Name Description System.String name field name BytesRef bytes binary content System.Boolean isFixedLength (ignored) Exceptions Type Condition System.ArgumentNullException if the field name is null Fields | Improve this Doc View Source TYPE_FIXED_LEN Type for direct bytes DocValues : all with the same length Declaration public static readonly FieldType TYPE_FIXED_LEN Field Value Type Description FieldType | Improve this Doc View Source TYPE_VAR_LEN Type for direct bytes DocValues : can have variable lengths Declaration public static readonly FieldType TYPE_VAR_LEN Field Value Type Description FieldType Implements IIndexableField Extension Methods IndexableFieldExtensions.GetByteValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt16ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt32ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetInt64ValueOrDefault(IIndexableField) IndexableFieldExtensions.GetSingleValueOrDefault(IIndexableField) IndexableFieldExtensions.GetDoubleValueOrDefault(IIndexableField) Number.IsNumber(Object) See Also BinaryDocValuesField"
  },
  "api/Lucene.Net/Lucene.Net.Index.ByteSliceReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.ByteSliceReader.html",
    "title": "Class ByteSliceReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ByteSliceReader IndexInput that knows how to read the byte slices written by Posting and PostingVector. We read the bytes in each slice until we hit the end of that slice at which point we read the forwarding address of the next slice and then jump to it. Inheritance System.Object DataInput ByteSliceReader Inherited Members DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) DataInput.ReadInt16() DataInput.ReadInt32() DataInput.ReadVInt32() DataInput.ReadInt64() DataInput.ReadVInt64() DataInput.ReadString() DataInput.Clone() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class ByteSliceReader : DataInput Properties | Improve this Doc View Source BufferOffset Declaration public int BufferOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndIndex Declaration public int EndIndex { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Eof() Declaration public bool Eof() Returns Type Description System.Boolean | Improve this Doc View Source Init(ByteBlockPool, Int32, Int32) Declaration public void Init(ByteBlockPool pool, int startIndex, int endIndex) Parameters Type Name Description ByteBlockPool pool System.Int32 startIndex System.Int32 endIndex | Improve this Doc View Source NextSlice() Declaration public void NextSlice() | Improve this Doc View Source ReadByte() Declaration public override byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source WriteTo(DataOutput) Declaration public long WriteTo(DataOutput out) Parameters Type Name Description DataOutput out Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.EquatableList-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.EquatableList-1.html",
    "title": "Class EquatableList<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EquatableList<T> Represents a strongly typed list of objects that can be accessed by index. Provides methods to manipulate lists. Also provides functionality to compare lists against each other through an implementations of System.IEquatable<T> , or to wrap an existing list to use the same comparison logic as this one while not affecting any of its other functionality. Inheritance System.Object EquatableList<T> Implements System.Collections.Generic.IList <T> System.Collections.Generic.ICollection <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable System.IEquatable < System.Collections.Generic.IList <T>> Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class EquatableList<T> : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IEquatable<IList<T>> Type Parameters Name Description T The type of elements in the list. Constructors | Improve this Doc View Source EquatableList() Initializes a new instance of the EquatableList<T> class that is empty and has the default initial capacity. Declaration public EquatableList() | Improve this Doc View Source EquatableList(IEnumerable<T>) Initializes a new instance of the EquatableList<T> class that contains elements copied from the specified collection and has sufficient capacity to accommodate the number of elements copied. Declaration public EquatableList(IEnumerable<T> collection) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> collection The collection whose elements are copied to the new list. | Improve this Doc View Source EquatableList(IList<T>, Boolean) Initializes a new instance of EquatableList<T> . If the wrap parameter is true , the collection is used as is without doing a copy operation. Otherwise, the collection is copied (which is the same operation as the EquatableList(IEnumerable<T>) overload). The internal collection is used for all operations except for Equals(Object) , GetHashCode() , and ToString() , which are all based on deep analysis of this collection and any nested collections. Declaration public EquatableList(IList<T> collection, bool wrap) Parameters Type Name Description System.Collections.Generic.IList <T> collection The collection that will either be wrapped or copied depending on the value of wrap . System.Boolean wrap true to wrap an existing System.Collections.Generic.IList<T> without copying, or false to copy the collection into a new System.Collections.Generic.List<T> . | Improve this Doc View Source EquatableList(Int32) Initializes a new instance of the EquatableList<T> class that is empty and has the specified initial capacity. Declaration public EquatableList(int capacity) Parameters Type Name Description System.Int32 capacity The number of elements that the new list can initially store. Properties | Improve this Doc View Source Count Gets the number of elements contained in the EquatableList<T> . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Gets a value indicating whether the EquatableList<T> is read-only. Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[Int32] Gets or sets the element at the specified index. Declaration public virtual T this[int index] { get; set; } Parameters Type Name Description System.Int32 index The zero-based index of the element to get or set. Property Value Type Description T Methods | Improve this Doc View Source Add(T) Adds an object to the end of the EquatableList<T> . Declaration public virtual void Add(T item) Parameters Type Name Description T item The object to be added to the end of the EquatableList<T> . The value can be null for reference types. | Improve this Doc View Source Clear() Removes all items from the EquatableList<T> . Declaration public virtual void Clear() | Improve this Doc View Source Clone() Clones the EquatableList<T> . Declaration public virtual object Clone() Returns Type Description System.Object A new shallow clone of this EquatableList<T> . Remarks This is a shallow clone. | Improve this Doc View Source Contains(T) Determines whether the EquatableList<T> contains a specific value. Declaration public virtual bool Contains(T item) Parameters Type Name Description T item The object to locate in the EquatableList<T> . Returns Type Description System.Boolean true if the Object is found in the EquatableList<T> ; otherwise, false . | Improve this Doc View Source CopyTo(T[], Int32) Copies the entire EquatableList<T> to a compatible one-dimensional array, starting at the specified index of the target array. Declaration public virtual void CopyTo(T[] array, int arrayIndex) Parameters Type Name Description T[] array The one-dimensional System.Array that is the destination of the elements copied from EquatableList<T> . The Array must have zero-based indexing. System.Int32 arrayIndex The zero-based index in array at which copying begins. | Improve this Doc View Source Equals(IList<T>) Compares this sequence to another System.Collections.Generic.IList<T> implementation, returning true if they are equal, false otherwise. The comparison takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, EquatableList<T> can equal any System.Collections.Generic.IList<T> with the exact same values in the same order. Declaration public virtual bool Equals(IList<T> other) Parameters Type Name Description System.Collections.Generic.IList <T> other The other System.Collections.Generic.IList<T> implementation to compare against. Returns Type Description System.Boolean true if the sequence in other is the same as this one. | Improve this Doc View Source Equals(Object) If the object passed implements System.Collections.Generic.IList<T> , compares this sequence to other , returning true if they are equal, false otherwise. The comparison takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, EquatableList<T> can equal any System.Collections.Generic.IList<T> with the exact same values in the same order. Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other The other object to compare against. Returns Type Description System.Boolean true if the sequence in other is the same as this one. Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the EquatableList<T> . Declaration public virtual IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> An System.Collections.Generic.IEnumerator<T> for the EquatableList<T> . | Improve this Doc View Source GetHashCode() Returns the hash code value for this list. The hash code determination takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, the hash codes will be exactly the same for this EquatableList<T> and another System.Collections.Generic.IList<T> (including arrays) with the same values in the same order. Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code value for this list Overrides System.Object.GetHashCode() | Improve this Doc View Source IndexOf(T) Determines the index of a specific item in the EquatableList<T> . Declaration public virtual int IndexOf(T item) Parameters Type Name Description T item The object to locate in the EquatableList<T> . Returns Type Description System.Int32 The index of item if found in the list; otherwise, -1. | Improve this Doc View Source Insert(Int32, T) Inserts an item to the EquatableList<T> at the specified index. Declaration public virtual void Insert(int index, T item) Parameters Type Name Description System.Int32 index The zero-based index at which item should be inserted. T item The object to insert into the EquatableList<T> . | Improve this Doc View Source Remove(T) Removes the first occurrence of a specific object from the EquatableList<T> . Declaration public virtual bool Remove(T item) Parameters Type Name Description T item The object to remove from the EquatableList<T> . Returns Type Description System.Boolean true if item was successfully removed from the EquatableList<T> ; otherwise, false . This method also returns false if item is not found in the original EquatableList<T> . | Improve this Doc View Source RemoveAt(Int32) Removes the EquatableList<T> item at the specified index. Declaration public virtual void RemoveAt(int index) Parameters Type Name Description System.Int32 index The zero-based index of the item to remove. | Improve this Doc View Source ToString() Returns a string representation of this collection (and any nested collections). The string representation consists of a list of the collection's elements in the order they are returned by its enumerator, enclosed in square brackets (\"[]\"). Adjacent elements are separated by the characters \", \" (comma and space). Declaration public override string ToString() Returns Type Description System.String a string representation of this collection Overrides System.Object.ToString() Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Returns an enumerator that iterates through the EquatableList<T> . Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator An System.Collections.IEnumerator for the EquatableList<T> . Implements System.Collections.Generic.IList<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IEquatable<T> Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) ListExtensions.AddRange<T>(IList<T>, IEnumerable<T>) ListExtensions.Shuffle<T>(IList<T>) ListExtensions.Shuffle<T>(IList<T>, Random) ListExtensions.SubList<T>(IList<T>, Int32, Int32) ListExtensions.Swap<T>(IList<T>, Int32, Int32) ListExtensions.Sort<T>(IList<T>) ListExtensions.Sort<T>(IList<T>, IComparer<T>) ListExtensions.Sort<T>(IList<T>, Comparison<T>) ListExtensions.TimSort<T>(IList<T>) ListExtensions.TimSort<T>(IList<T>, IComparer<T>) ListExtensions.IntroSort<T>(IList<T>) ListExtensions.IntroSort<T>(IList<T>, IComparer<T>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Support.EquatableSet-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.EquatableSet-1.html",
    "title": "Class EquatableSet<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EquatableSet<T> Represents a strongly typed set of objects. Provides methods to manipulate the set. Also provides functionality to compare sets against each other through an implementations of System.IEquatable<T> , or to wrap an existing set to use the same comparison logic as this one while not affecting any of its other functionality. Inheritance System.Object EquatableSet<T> Implements System.Collections.Generic.ISet <T> System.Collections.Generic.ICollection <T> System.Collections.Generic.IEnumerable <T> System.Collections.IEnumerable System.IEquatable < System.Collections.Generic.ISet <T>> Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class EquatableSet<T> : ISet<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IEquatable<ISet<T>> Type Parameters Name Description T The type of elements in the list. Constructors | Improve this Doc View Source EquatableSet() Initializes a new instance of the EquatableSet<T> class that is empty and has the default initial capacity. Declaration public EquatableSet() | Improve this Doc View Source EquatableSet(ICollection<T>) Initializes a new instance of the EquatableSet<T> class that contains elements copied from the specified collection and has sufficient capacity to accommodate the number of elements copied. Declaration public EquatableSet(ICollection<T> collection) Parameters Type Name Description System.Collections.Generic.ICollection <T> collection The collection whose elements are copied to the new set. | Improve this Doc View Source EquatableSet(IEnumerable<T>, IEqualityComparer<T>) Initializes a new instance of the EquatableSet<T> class that uses the specified equality comparer for the set type, contains elements copied from the specified collection, and has sufficient capacity to accommodate the number of elements copied. Declaration public EquatableSet(IEnumerable<T> collection, IEqualityComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> collection The collection whose elements are copied to the new set. System.Collections.Generic.IEqualityComparer <T> comparer The System.Collections.Generic.IEqualityComparer<T> implementation to use when comparing values in the set, or null to use the default System.Collections.Generic.EqualityComparer`1 implementation for the set type. | Improve this Doc View Source EquatableSet(IEqualityComparer<T>) Initializes a new instance of the EquatableSet<T> class that is empty and uses the specified equality comparer for the set type. Declaration public EquatableSet(IEqualityComparer<T> comparer) Parameters Type Name Description System.Collections.Generic.IEqualityComparer <T> comparer The System.Collections.Generic.IEqualityComparer<T> implementation to use when comparing values in the set, or null to use the default System.Collections.Generic.EqualityComparer`1 implementation for the set type. | Improve this Doc View Source EquatableSet(ISet<T>, Boolean) Initializes a new instance of EquatableSet<T> . If the wrap parameter is true , the collection is used as is without doing a copy operation. Otherwise, the collection is copied (which is the same operation as the EquatableSet(ICollection<T>) overload). The internal collection is used for all operations except for Equals(Object) , GetHashCode() , and ToString() , which are all based on deep analysis of this collection and any nested collections. Declaration public EquatableSet(ISet<T> collection, bool wrap) Parameters Type Name Description System.Collections.Generic.ISet <T> collection The collection that will either be wrapped or copied depending on the value of wrap . System.Boolean wrap true to wrap an existing System.Collections.Generic.ISet<T> without copying, or false to copy the collection into a new System.Collections.Generic.HashSet<T> . Properties | Improve this Doc View Source Count Gets the number of elements contained in the EquatableSet<T> . Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Gets a value indicating whether the EquatableSet<T> is read-only. Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Add(T) Adds an element to the current set and returns a value to indicate if the element was successfully added. Declaration public virtual bool Add(T item) Parameters Type Name Description T item The element to add to the set. Returns Type Description System.Boolean true if the element is added to the set; false if the element is already in the set. | Improve this Doc View Source Clear() Removes all items from the EquatableSet<T> . Declaration public virtual void Clear() | Improve this Doc View Source Clone() Clones the EquatableSet<T> . Declaration public virtual object Clone() Returns Type Description System.Object A new shallow clone of this EquatableSet<T> . Remarks This is a shallow clone. | Improve this Doc View Source Contains(T) Determines whether the EquatableSet<T> contains a specific value. Declaration public virtual bool Contains(T item) Parameters Type Name Description T item The object to locate in the EquatableSet<T> . Returns Type Description System.Boolean true if item is found in the EquatableSet<T> ; otherwise, false . | Improve this Doc View Source CopyTo(T[], Int32) Copies the elements of the EquatableSet<T> to an System.Array , starting at a particular System.Array index. Declaration public virtual void CopyTo(T[] array, int arrayIndex) Parameters Type Name Description T[] array The one-dimensional System.Array that is the destination of the elements copied from EquatableSet<T> . The System.Array must have zero-based indexing. System.Int32 arrayIndex The zero-based index in array at which copying begins. | Improve this Doc View Source Equals(ISet<T>) Compares this sequence to other , returning true if they are equal, false otherwise. The comparison takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, EquatableSet<T> can equal any System.Collections.Generic.ISet<T> with the exact same values (in any order). Declaration public virtual bool Equals(ISet<T> other) Parameters Type Name Description System.Collections.Generic.ISet <T> other The other object to compare against. Returns Type Description System.Boolean true if the sequence in other is the same as this one. | Improve this Doc View Source Equals(Object) If the object passed implements System.Collections.Generic.IList<T> , compares this sequence to other , returning true if they are equal, false otherwise. The comparison takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, EquatableSet<T> can equal any System.Collections.Generic.ISet<T> with the exact same values (in any order). Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other The other object to compare against. Returns Type Description System.Boolean true if the sequence in other is the same as this one. Overrides System.Object.Equals(System.Object) | Improve this Doc View Source ExceptWith(IEnumerable<T>) Removes all elements in the specified collection from the current set. Declaration public virtual void ExceptWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection of items to remove from the set. | Improve this Doc View Source GetEnumerator() Returns an enumerator that iterates through the collection. Declaration public virtual IEnumerator<T> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator <T> An enumerator that can be used to iterate through the collection. | Improve this Doc View Source GetHashCode() Returns the hash code value for this list. The hash code determination takes into consideration any values in this collection and values of any nested collections, but does not take into consideration the data type. Therefore, the hash codes will be exactly the same for this EquatableSet<T> and another System.Collections.Generic.ISet<T> with the same values (in any order). Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code value for this list Overrides System.Object.GetHashCode() | Improve this Doc View Source IntersectWith(IEnumerable<T>) Modifies the current set so that it contains only elements that are also in a specified collection. Declaration public virtual void IntersectWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. | Improve this Doc View Source IsProperSubsetOf(IEnumerable<T>) Determines whether the current set is a proper (strict) subset of a specified collection. Declaration public virtual bool IsProperSubsetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is a proper subset of other; otherwise, false . | Improve this Doc View Source IsProperSupersetOf(IEnumerable<T>) Determines whether the current set is a proper (strict) superset of a specified collection. Declaration public virtual bool IsProperSupersetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is a proper superset of other; otherwise, false . | Improve this Doc View Source IsSubsetOf(IEnumerable<T>) Determines whether a set is a subset of a specified collection. Declaration public virtual bool IsSubsetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is a subset of other; otherwise, false . | Improve this Doc View Source IsSupersetOf(IEnumerable<T>) Determines whether the current set is a superset of a specified collection. Declaration public virtual bool IsSupersetOf(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is a superset of other; otherwise, false . | Improve this Doc View Source Overlaps(IEnumerable<T>) Determines whether the current set overlaps with the specified collection. Declaration public virtual bool Overlaps(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set and other share at least one common element; otherwise, false . | Improve this Doc View Source Remove(T) Removes the first occurrence of a specific object from the EquatableSet<T> . Declaration public virtual bool Remove(T item) Parameters Type Name Description T item The object to remove from the EquatableSet<T> . Returns Type Description System.Boolean true if item was successfully removed from the EquatableSet<T> ; otherwise, false . This method also returns false if item is not found in the original EquatableSet<T> . | Improve this Doc View Source SetEquals(IEnumerable<T>) Determines whether the current set and the specified collection contain the same elements. Declaration public virtual bool SetEquals(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. Returns Type Description System.Boolean true if the current set is equal to other; otherwise, false . | Improve this Doc View Source SymmetricExceptWith(IEnumerable<T>) Modifies the current set so that it contains only elements that are present either in the current set or in the specified collection, but not both. Declaration public virtual void SymmetricExceptWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. | Improve this Doc View Source ToString() Returns a string representation of this collection (and any nested collections). The string representation consists of a list of the collection's elements in the order they are returned by its enumerator, enclosed in square brackets (\"[]\"). Adjacent elements are separated by the characters \", \" (comma and space). Declaration public override string ToString() Returns Type Description System.String a string representation of this collection Overrides System.Object.ToString() | Improve this Doc View Source UnionWith(IEnumerable<T>) Modifies the current set so that it contains all elements that are present in the current set, in the specified collection, or in both. Declaration public virtual void UnionWith(IEnumerable<T> other) Parameters Type Name Description System.Collections.Generic.IEnumerable <T> other The collection to compare to the current set. Explicit Interface Implementations | Improve this Doc View Source ICollection<T>.Add(T) Declaration void ICollection<T>.Add(T item) Parameters Type Name Description T item | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.ISet<T> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable System.IEquatable<T> Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object) SetExtensions.RemoveAll<T>(ICollection<T>, IEnumerable<T>) SetExtensions.AddAll<T>(ICollection<T>, IEnumerable<T>)"
  },
  "api/Lucene.Net/Lucene.Net.Util.CharsRef.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.CharsRef.html",
    "title": "Class CharsRef | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CharsRef Represents char[] , as a slice (offset + Length) into an existing char[] . The Chars property should never be null ; use EMPTY_CHARS if necessary. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object CharsRef Implements System.IComparable < CharsRef > ICharSequence Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class CharsRef : IComparable<CharsRef>, ICharSequence Constructors | Improve this Doc View Source CharsRef() Creates a new CharsRef initialized an empty array zero-Length Declaration public CharsRef() | Improve this Doc View Source CharsRef(Char[], Int32, Int32) Creates a new CharsRef initialized with the given chars , offset and length . Declaration public CharsRef(char[] chars, int offset, int length) Parameters Type Name Description System.Char [] chars System.Int32 offset System.Int32 length | Improve this Doc View Source CharsRef(Int32) Creates a new CharsRef initialized with an array of the given capacity . Declaration public CharsRef(int capacity) Parameters Type Name Description System.Int32 capacity | Improve this Doc View Source CharsRef(String) Creates a new CharsRef initialized with the given System.String character array. Declaration public CharsRef(string string) Parameters Type Name Description System.String string Fields | Improve this Doc View Source EMPTY_CHARS An empty character array for convenience Declaration public static readonly char[] EMPTY_CHARS Field Value Type Description System.Char [] Properties | Improve this Doc View Source Chars The contents of the CharsRef . Should never be null . Declaration public char[] Chars { get; set; } Property Value Type Description System.Char [] | Improve this Doc View Source Item[Int32] Declaration public char this[int index] { get; } Parameters Type Name Description System.Int32 index Property Value Type Description System.Char | Improve this Doc View Source Length Length of used characters. Declaration public int Length { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Offset Offset of first valid character. Declaration public int Offset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source UTF16SortedAsUTF8Comparer Declaration [Obsolete(\"this comparer is only a transition mechanism\")] public static IComparer<CharsRef> UTF16SortedAsUTF8Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < CharsRef > Methods | Improve this Doc View Source Append(Char[], Int32, Int32) Appends the given array to this CharsRef . Declaration public void Append(char[] otherChars, int otherOffset, int otherLength) Parameters Type Name Description System.Char [] otherChars System.Int32 otherOffset System.Int32 otherLength | Improve this Doc View Source CharsEquals(CharsRef) Declaration public bool CharsEquals(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description System.Boolean | Improve this Doc View Source Clone() Returns a shallow clone of this instance (the underlying characters are not copied and will be shared by both the returned object and this object. Declaration public object Clone() Returns Type Description System.Object See Also DeepCopyOf(CharsRef) | Improve this Doc View Source CompareTo(CharsRef) Signed System.Int32 order comparison Declaration public int CompareTo(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description System.Int32 | Improve this Doc View Source CopyChars(CharsRef) Copies the given CharsRef referenced content into this instance. Declaration public void CopyChars(CharsRef other) Parameters Type Name Description CharsRef other The CharsRef to copy. | Improve this Doc View Source CopyChars(Char[], Int32, Int32) Copies the given array into this CharsRef . Declaration public void CopyChars(char[] otherChars, int otherOffset, int otherLength) Parameters Type Name Description System.Char [] otherChars System.Int32 otherOffset System.Int32 otherLength | Improve this Doc View Source DeepCopyOf(CharsRef) Creates a new CharsRef that points to a copy of the chars from other . The returned CharsRef will have a Length of other.Length and an offset of zero. Declaration public static CharsRef DeepCopyOf(CharsRef other) Parameters Type Name Description CharsRef other Returns Type Description CharsRef | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Grow(Int32) Used to grow the reference array. In general this should not be used as it does not take the offset into account. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public void Grow(int newLength) Parameters Type Name Description System.Int32 newLength | Improve this Doc View Source IsValid() Performs internal consistency checks. Always returns true (or throws System.InvalidOperationException ) Declaration public bool IsValid() Returns Type Description System.Boolean | Improve this Doc View Source SubSequence(Int32, Int32) Declaration public ICharSequence SubSequence(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Returns Type Description ICharSequence | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IComparable<T> ICharSequence Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.DisposableThreadLocal-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DisposableThreadLocal-1.html",
    "title": "Class DisposableThreadLocal<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisposableThreadLocal<T> Java's builtin ThreadLocal has a serious flaw: it can take an arbitrarily long amount of time to dereference the things you had stored in it, even once the ThreadLocal instance itself is no longer referenced. This is because there is single, master map stored for each thread, which all ThreadLocals share, and that master map only periodically purges \"stale\" entries. While not technically a memory leak, because eventually the memory will be reclaimed, it can take a long time and you can easily hit System.OutOfMemoryException because from the GC's standpoint the stale entries are not reclaimable. This class works around that, by only enrolling WeakReference values into the ThreadLocal, and separately holding a hard reference to each stored value. When you call Dispose() , these hard references are cleared and then GC is freely able to reclaim space by objects stored in it. You should not call Dispose() until all threads are done using the instance. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object DisposableThreadLocal<T> Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class DisposableThreadLocal<T> : IDisposable Type Parameters Name Description T Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Get() Declaration public virtual T Get() Returns Type Description T | Improve this Doc View Source InitialValue() Declaration protected virtual T InitialValue() Returns Type Description T | Improve this Doc View Source Set(T) Declaration public virtual void Set(T object) Parameters Type Name Description T object Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.DocIdBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.DocIdBitSet.html",
    "title": "Class DocIdBitSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocIdBitSet Simple DocIdSet and DocIdSetIterator backed by a System.Collections.BitArray Inheritance System.Object DocIdSet DocIdBitSet Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class DocIdBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source DocIdBitSet(BitArray) Declaration public DocIdBitSet(BitArray bitSet) Parameters Type Name Description System.Collections.BitArray bitSet Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source BitSet Returns the underlying System.Collections.BitArray . Declaration public virtual BitArray BitSet { get; } Property Value Type Description System.Collections.BitArray | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source Length Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Get(Int32) Declaration public bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() Implements IBits Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.MutableImpl.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.MutableImpl.html",
    "title": "Class PackedInt32s.MutableImpl | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.MutableImpl Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.Mutable PackedInt32s.MutableImpl Packed64 Inherited Members PackedInt32s.Mutable.Set(Int32, Int64) PackedInt32s.Mutable.Set(Int32, Int64[], Int32, Int32) PackedInt32s.Mutable.Fill(Int32, Int32, Int64) PackedInt32s.Mutable.Clear() PackedInt32s.Mutable.Save(DataOutput) PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) PackedInt32s.Reader.RamBytesUsed() PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray NumericDocValues.Get(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public abstract class MutableImpl : PackedInt32s.Mutable Constructors | Improve this Doc View Source MutableImpl(Int32, Int32) Declaration protected MutableImpl(int valueCount, int bitsPerValue) Parameters Type Name Description System.Int32 valueCount System.Int32 bitsPerValue Fields | Improve this Doc View Source m_bitsPerValue Declaration protected readonly int m_bitsPerValue Field Value Type Description System.Int32 | Improve this Doc View Source m_valueCount Declaration protected readonly int m_valueCount Field Value Type Description System.Int32 Properties | Improve this Doc View Source BitsPerValue Declaration public override sealed int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override sealed int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.NullReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.PackedInt32s.NullReader.html",
    "title": "Class PackedInt32s.NullReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PackedInt32s.NullReader A PackedInt32s.Reader which has all its values equal to 0 (bitsPerValue = 0). Inheritance System.Object NumericDocValues PackedInt32s.Reader PackedInt32s.NullReader Inherited Members PackedInt32s.Reader.GetArray() PackedInt32s.Reader.HasArray System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class NullReader : PackedInt32s.Reader Constructors | Improve this Doc View Source NullReader(Int32) Sole constructor. Declaration public NullReader(int valueCount) Parameters Type Name Description System.Int32 valueCount Properties | Improve this Doc View Source BitsPerValue Declaration public override int BitsPerValue { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.BitsPerValue | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides PackedInt32s.Reader.Count Methods | Improve this Doc View Source Get(Int32) Declaration public override long Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int64 Overrides NumericDocValues.Get(Int32) | Improve this Doc View Source Get(Int32, Int64[], Int32, Int32) Declaration public override int Get(int index, long[] arr, int off, int len) Parameters Type Name Description System.Int32 index System.Int64 [] arr System.Int32 off System.Int32 len Returns Type Description System.Int32 Overrides PackedInt32s.Reader.Get(Int32, Int64[], Int32, Int32) | Improve this Doc View Source RamBytesUsed() Declaration public override long RamBytesUsed() Returns Type Description System.Int64 Overrides PackedInt32s.Reader.RamBytesUsed() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinCollector.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinCollector.html",
    "title": "Class ToParentBlockJoinCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinCollector Collects parent document hits for a Query containing one more more BlockJoinQuery clauses, sorted by the specified parent Sort . Note that this cannot perform arbitrary joins; rather, it requires that all joined documents are indexed as a doc block (using AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) . Ie, the join is computed at index time. The parent Sort must only use fields from the parent documents; sorting by field in the child documents is not supported. You should only use this collector if one or more of the clauses in the query is a ToParentBlockJoinQuery . This collector will find those query clauses and record the matching child documents for the top scoring parent documents. Multiple joins (star join) and nested joins and a mix of the two are allowed, as long as in all cases the documents corresponding to a single row of each joined parent table were indexed as a doc block. For the simple star join you can retrieve the ITopGroups<TGroupValue> instance containing each ToParentBlockJoinQuery 's matching child documents for the top parent groups, using GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) . Ie, a single query, which will contain two or more ToParentBlockJoinQuery 's as clauses representing the star join, can then retrieve two or more ITopGroups<TGroupValue> instances. For nested joins, the query will run correctly (ie, match the right parent and child documents), however, because TopGroups<TGroupValue> is currently unable to support nesting (each group is not able to hold another TopGroups<TGroupValue> ), you are only able to retrieve the TopGroups<TGroupValue> of the first join. The TopGroups<TGroupValue> of the nested joins will not be correct. See http://lucene.apache.org/core/4_8_0/join/ for a code sample. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ToParentBlockJoinCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinCollector : ICollector Constructors | Improve this Doc View Source ToParentBlockJoinCollector(Sort, Int32, Boolean, Boolean) Creates a ToParentBlockJoinCollector . The provided sort must not be null. If you pass true trackScores , all ToParentBlockQuery instances must not use None . Declaration public ToParentBlockJoinCollector(Sort sort, int numParentHits, bool trackScores, bool trackMaxScore) Parameters Type Name Description Sort sort System.Int32 numParentHits System.Boolean trackScores System.Boolean trackMaxScore Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MaxScore Returns the highest score across all collected parent hits, as long as trackMaxScores=true was passed ToParentBlockJoinCollector(Sort, Int32, Boolean, Boolean) on construction. Else, this returns System.Single.NaN . Declaration public virtual float MaxScore { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int parentDoc) Parameters Type Name Description System.Int32 parentDoc | Improve this Doc View Source GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) Returns the ITopGroups<TGroupValue> for the specified BlockJoinQuery. The groupValue of each GroupDocs will be the parent docID for that group. The number of documents within each group is calculated as minimum of maxDocsPerGroup and number of matched child documents for that group. Returns null if no groups matched. Declaration public virtual ITopGroups<int> GetTopGroups(ToParentBlockJoinQuery query, Sort withinGroupSort, int offset, int maxDocsPerGroup, int withinGroupOffset, bool fillSortFields) Parameters Type Name Description ToParentBlockJoinQuery query Search query Sort withinGroupSort Sort criteria within groups System.Int32 offset Parent docs offset System.Int32 maxDocsPerGroup Upper bound of documents per group number System.Int32 withinGroupOffset Offset within each group of child docs System.Boolean fillSortFields Specifies whether to add sort fields or not Returns Type Description ITopGroups < System.Int32 > ITopGroups<TGroupValue> for specified query Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source GetTopGroupsWithAllChildDocs(ToParentBlockJoinQuery, Sort, Int32, Int32, Boolean) Returns the TopGroups<TGroupValue> for the specified BlockJoinQuery. The groupValue of each GroupDocs will be the parent docID for that group. The number of documents within each group equals to the total number of matched child documents for that group. Returns null if no groups matched. Declaration public virtual ITopGroups<int> GetTopGroupsWithAllChildDocs(ToParentBlockJoinQuery query, Sort withinGroupSort, int offset, int withinGroupOffset, bool fillSortFields) Parameters Type Name Description ToParentBlockJoinQuery query Search query Sort withinGroupSort Sort criteria within groups System.Int32 offset Parent docs offset System.Int32 withinGroupOffset Offset within each group of child docs System.Boolean fillSortFields Specifies whether to add sort fields or not Returns Type Description ITopGroups < System.Int32 > ITopGroups<TGroupValue> for specified query Exceptions Type Condition System.IO.IOException if there is a low-level I/O error | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Highest.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Highest.html",
    "title": "Class ToParentBlockJoinFieldComparer.Highest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer.Highest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the highest values in the child / nested docs first. Inheritance System.Object FieldComparer FieldComparer < System.Object > ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Highest Inherited Members ToParentBlockJoinFieldComparer.Compare(Int32, Int32) ToParentBlockJoinFieldComparer.SetBottom(Int32) ToParentBlockJoinFieldComparer.SetTopValue(Object) ToParentBlockJoinFieldComparer.SetNextReader(AtomicReaderContext) ToParentBlockJoinFieldComparer.Item[Int32] FieldComparer<Object>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class Highest : ToParentBlockJoinFieldComparer Constructors | Improve this Doc View Source Highest(FieldComparer, Filter, Filter, Int32) Create ToParentBlockJoinFieldComparer.Highest Declaration public Highest(FieldComparer wrappedComparer, Filter parentFilter, Filter childFilter, int spareSlot) Parameters Type Name Description FieldComparer wrappedComparer The FieldComparer on the child / nested level. Filter parentFilter Filter (must produce FixedBitSet per-segment) that identifies the parent documents. Filter childFilter Filter that defines which child / nested documents participates in sorting. System.Int32 spareSlot The extra slot inside the wrapped comparer that is used to compare which nested document inside the parent document scope is most competitive. Methods | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int parentDoc) Parameters Type Name Description System.Int32 slot System.Int32 parentDoc Overrides Lucene.Net.Search.FieldComparer<System.Object>.Copy(System.Int32, System.Int32)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Lowest.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.Lowest.html",
    "title": "Class ToParentBlockJoinFieldComparer.Lowest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer.Lowest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the lowest values in the child / nested docs first. Inheritance System.Object FieldComparer FieldComparer < System.Object > ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Lowest Inherited Members ToParentBlockJoinFieldComparer.Compare(Int32, Int32) ToParentBlockJoinFieldComparer.SetBottom(Int32) ToParentBlockJoinFieldComparer.SetTopValue(Object) ToParentBlockJoinFieldComparer.SetNextReader(AtomicReaderContext) ToParentBlockJoinFieldComparer.Item[Int32] FieldComparer<Object>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class Lowest : ToParentBlockJoinFieldComparer Constructors | Improve this Doc View Source Lowest(FieldComparer, Filter, Filter, Int32) Create ToParentBlockJoinFieldComparer.Lowest Declaration public Lowest(FieldComparer wrappedComparer, Filter parentFilter, Filter childFilter, int spareSlot) Parameters Type Name Description FieldComparer wrappedComparer The FieldComparer on the child / nested level. Filter parentFilter Filter (must produce FixedBitSet per-segment) that identifies the parent documents. Filter childFilter Filter that defines which child / nested documents participates in sorting. System.Int32 spareSlot The extra slot inside the wrapped comparer that is used to compare which nested document inside the parent document scope is most competitive. Methods | Improve this Doc View Source CompareBottom(Int32) Declaration public override int CompareBottom(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.CompareBottom(System.Int32) | Improve this Doc View Source CompareTop(Int32) Declaration public override int CompareTop(int parentDoc) Parameters Type Name Description System.Int32 parentDoc Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.CompareTop(System.Int32) | Improve this Doc View Source Copy(Int32, Int32) Declaration public override void Copy(int slot, int parentDoc) Parameters Type Name Description System.Int32 slot System.Int32 parentDoc Overrides Lucene.Net.Search.FieldComparer<System.Object>.Copy(System.Int32, System.Int32)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinFieldComparer.html",
    "title": "Class ToParentBlockJoinFieldComparer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinFieldComparer A field comparer that allows parent documents to be sorted by fields from the nested / child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FieldComparer FieldComparer < System.Object > ToParentBlockJoinFieldComparer ToParentBlockJoinFieldComparer.Highest ToParentBlockJoinFieldComparer.Lowest Inherited Members FieldComparer<Object>.CompareBottom(Int32) FieldComparer<Object>.CompareTop(Int32) FieldComparer<Object>.Copy(Int32, Int32) FieldComparer<Object>.CompareValues(Object, Object) FieldComparer.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public abstract class ToParentBlockJoinFieldComparer : FieldComparer<object> Properties | Improve this Doc View Source Item[Int32] Declaration public override IComparable this[int slot] { get; } Parameters Type Name Description System.Int32 slot Property Value Type Description System.IComparable Overrides FieldComparer.Item[Int32] Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int slot1, int slot2) Parameters Type Name Description System.Int32 slot1 System.Int32 slot2 Returns Type Description System.Int32 Overrides Lucene.Net.Search.FieldComparer<System.Object>.Compare(System.Int32, System.Int32) | Improve this Doc View Source SetBottom(Int32) Declaration public override void SetBottom(int slot) Parameters Type Name Description System.Int32 slot Overrides Lucene.Net.Search.FieldComparer<System.Object>.SetBottom(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override FieldComparer SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description FieldComparer Overrides Lucene.Net.Search.FieldComparer<System.Object>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) | Improve this Doc View Source SetTopValue(Object) Declaration public override void SetTopValue(object value) Parameters Type Name Description System.Object value Overrides Lucene.Net.Search.FieldComparer<System.Object>.SetTopValue(System.Object)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinQuery.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinQuery.html",
    "title": "Class ToParentBlockJoinQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinQuery This query requires that you index children and parent docs as a single block, using the AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. In each block, the child documents must appear first, ending with the parent document. At search time you provide a Filter identifying the parents, however this Filter must provide an FixedBitSet per sub-reader. Once the block index is built, use this query to wrap any sub-query matching only child docs and join matches in that child document space up to the parent document space. You can then use this Query as a clause with other queries in the parent document space. See ToChildBlockJoinQuery if you need to join in the reverse order. The child documents must be orthogonal to the parent documents: the wrapped child query must never return a parent document. If you'd like to retrieve ITopGroups<TGroupValue> for the resulting query, use the ToParentBlockJoinCollector . Note that this is not necessary, ie, if you simply want to collect the parent documents and don't need to see which child documents matched under that parent, then you can use any collector. NOTE : If the overall query contains parent-only matches, for example you OR a parent-only query with a joined child-only query, then the resulting collected documents will be correct, however the ITopGroups<TGroupValue> you get from ToParentBlockJoinCollector will not contain every child for parents that had matched. See http://lucene.apache.org/core/4_8_0/join/ for an overview. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Query ToParentBlockJoinQuery Inherited Members Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinQuery : Query Constructors | Improve this Doc View Source ToParentBlockJoinQuery(Query, Filter, ScoreMode) Create a ToParentBlockJoinQuery . Declaration public ToParentBlockJoinQuery(Query childQuery, Filter parentsFilter, ScoreMode scoreMode) Parameters Type Name Description Query childQuery Query matching child documents. Filter parentsFilter Filter (must produce FixedBitSet per-segment, like FixedBitSetCachingWrapperFilter ) identifying the parent documents. ScoreMode scoreMode How to aggregate multiple child scores into a single parent score. Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides Query.Rewrite(IndexReader) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinSortField.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ToParentBlockJoinSortField.html",
    "title": "Class ToParentBlockJoinSortField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ToParentBlockJoinSortField A special sort field that allows sorting parent docs based on nested / child level fields. Based on the sort order it either takes the document with the lowest or highest field value into account. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SortField ToParentBlockJoinSortField Inherited Members SortField.FIELD_SCORE SortField.FIELD_DOC SortField.MissingValue SortField.m_missingValue SortField.STRING_FIRST SortField.STRING_LAST SortField.Field SortField.Type SortField.Parser SortField.IsReverse SortField.ComparerSource SortField.ToString() SortField.Equals(Object) SortField.GetHashCode() SortField.BytesComparer SortField.Rewrite(IndexSearcher) SortField.NeedsScores System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public class ToParentBlockJoinSortField : SortField Constructors | Improve this Doc View Source ToParentBlockJoinSortField(String, SortFieldType, Boolean, Filter, Filter) Create ToParentBlockJoinSortField . The parent document ordering is based on child document ordering (reverse). Declaration public ToParentBlockJoinSortField(string field, SortFieldType type, bool reverse, Filter parentFilter, Filter childFilter) Parameters Type Name Description System.String field The sort field on the nested / child level. SortFieldType type The sort type on the nested / child level. System.Boolean reverse Whether natural order should be reversed on the nested / child level. Filter parentFilter Filter that identifies the parent documents. Filter childFilter Filter that defines which child documents participates in sorting. | Improve this Doc View Source ToParentBlockJoinSortField(String, SortFieldType, Boolean, Boolean, Filter, Filter) Create ToParentBlockJoinSortField . Declaration public ToParentBlockJoinSortField(string field, SortFieldType type, bool reverse, bool order, Filter parentFilter, Filter childFilter) Parameters Type Name Description System.String field The sort field on the nested / child level. SortFieldType type The sort type on the nested / child level. System.Boolean reverse Whether natural order should be reversed on the nested / child document level. System.Boolean order Whether natural order should be reversed on the parent level. Filter parentFilter Filter that identifies the parent documents. Filter childFilter Filter that defines which child documents participates in sorting. Methods | Improve this Doc View Source GetComparer(Int32, Int32) Declaration public override FieldComparer GetComparer(int numHits, int sortPos) Parameters Type Name Description System.Int32 numHits System.Int32 sortPos Returns Type Description FieldComparer Overrides SortField.GetComparer(Int32, Int32)"
  },
  "api/Lucene.Net.Queries/Lucene.Net.Queries.BooleanFilter.html": {
    "href": "api/Lucene.Net.Queries/Lucene.Net.Queries.BooleanFilter.html",
    "title": "Class BooleanFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanFilter A container Filter that allows Boolean composition of Filter s. Filter s are allocated into one of three logical constructs; SHOULD, MUST NOT, MUST The results Filter BitSet is constructed as follows: SHOULD Filters are OR'd together The resulting Filter is NOT'd with the NOT Filter s The resulting Filter is AND'd with the MUST Filter s Inheritance System.Object Filter BooleanFilter Implements System.Collections.Generic.IEnumerable < FilterClause > System.Collections.IEnumerable Inherited Members Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Queries Assembly : Lucene.Net.Queries.dll Syntax public class BooleanFilter : Filter, IEnumerable<FilterClause>, IEnumerable Properties | Improve this Doc View Source Clauses Gets the list of clauses Declaration public virtual IList<FilterClause> Clauses { get; } Property Value Type Description System.Collections.Generic.IList < FilterClause > Methods | Improve this Doc View Source Add(FilterClause) Adds a new FilterClause to the Boolean Filter container Declaration public virtual void Add(FilterClause filterClause) Parameters Type Name Description FilterClause filterClause A FilterClause object containing a Filter and an Occur parameter | Improve this Doc View Source Add(Filter, Occur) Declaration public void Add(Filter filter, Occur occur) Parameters Type Name Description Filter filter Occur occur | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetDocIdSet(AtomicReaderContext, IBits) Returns the a DocIdSetIterator representing the Boolean composition of the filters that have been added. Declaration public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description DocIdSet Overrides Filter.GetDocIdSet(AtomicReaderContext, IBits) | Improve this Doc View Source GetEnumerator() Returns an iterator on the clauses in this query. It implements the System.Collections.Generic.IEnumerable<T> interface to make it possible to do: for (FilterClause clause : booleanFilter) {} Declaration public IEnumerator<FilterClause> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < FilterClause > | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Prints a user-readable version of this Filter . Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AllowLeadingWildcardProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AllowLeadingWildcardProcessor.html",
    "title": "Class AllowLeadingWildcardProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AllowLeadingWildcardProcessor This processor verifies if ALLOW_LEADING_WILDCARD is defined in the QueryConfigHandler . If it is and leading wildcard is not allowed, it looks for every WildcardQueryNode contained in the query node tree and throws an exception if any of them has a leading wildcard ('*' or '?'). Inheritance System.Object QueryNodeProcessor AllowLeadingWildcardProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class AllowLeadingWildcardProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source AllowLeadingWildcardProcessor() Declaration public AllowLeadingWildcardProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ALLOW_LEADING_WILDCARD"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AnalyzerQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.AnalyzerQueryNodeProcessor.html",
    "title": "Class AnalyzerQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AnalyzerQueryNodeProcessor This processor verifies if ANALYZER is defined in the QueryConfigHandler . If it is and the analyzer is not null , it looks for every FieldQueryNode that is not WildcardQueryNode , FuzzyQueryNode or IRangeQueryNode contained in the query node tree, then it applies the analyzer to that FieldQueryNode object. If the analyzer return only one term, the returned term is set to the FieldQueryNode and it's returned. If the analyzer return more than one term, a TokenizedPhraseQueryNode or MultiPhraseQueryNode is created, whether there is one or more terms at the same position, and it's returned. If no term is returned by the analyzer a NoTokenFoundQueryNode object is returned. Inheritance System.Object QueryNodeProcessor AnalyzerQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class AnalyzerQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source AnalyzerQueryNodeProcessor() Declaration public AnalyzerQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source Process(IQueryNode) Declaration public override IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode Overrides QueryNodeProcessor.Process(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ANALYZER Analyzer TokenStream"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanQuery2ModifierNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanQuery2ModifierNodeProcessor.html",
    "title": "Class BooleanQuery2ModifierNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanQuery2ModifierNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. This is a variant of BooleanModifiersQueryNodeProcessor which ignores precedence. The StandardSyntaxParser knows the rules of precedence, but lucene does not. e.g. (A AND B OR C AND D) ist treated like (+A +B +C +D) . This processor walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For default BooleanQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Each BooleanQueryNode which direct parent is also a BooleanQueryNode is removed (to ignore the rules of precedence). Inheritance System.Object BooleanQuery2ModifierNodeProcessor Implements IQueryNodeProcessor Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanQuery2ModifierNodeProcessor : IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanQuery2ModifierNodeProcessor() Declaration public BooleanQuery2ModifierNodeProcessor() Methods | Improve this Doc View Source FillChildrenBufferAndApplyModifiery(IQueryNode) Declaration protected virtual void FillChildrenBufferAndApplyModifiery(IQueryNode parent) Parameters Type Name Description IQueryNode parent | Improve this Doc View Source GetQueryConfigHandler() Declaration public virtual QueryConfigHandler GetQueryConfigHandler() Returns Type Description QueryConfigHandler | Improve this Doc View Source IsDefaultBooleanQueryNode(IQueryNode) Declaration protected virtual bool IsDefaultBooleanQueryNode(IQueryNode toTest) Parameters Type Name Description IQueryNode toTest Returns Type Description System.Boolean | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected virtual IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected virtual IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode | Improve this Doc View Source Process(IQueryNode) Declaration public virtual IQueryNode Process(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree Returns Type Description IQueryNode | Improve this Doc View Source ProcessChildren(IQueryNode) Declaration protected virtual void ProcessChildren(IQueryNode queryTree) Parameters Type Name Description IQueryNode queryTree | Improve this Doc View Source SetQueryConfigHandler(QueryConfigHandler) Declaration public virtual void SetQueryConfigHandler(QueryConfigHandler queryConfigHandler) Parameters Type Name Description QueryConfigHandler queryConfigHandler | Improve this Doc View Source TagModifierButDoNotOverride(IQueryNode, Modifier) Declaration protected virtual void TagModifierButDoNotOverride(IQueryNode node, Modifier mod) Parameters Type Name Description IQueryNode node Modifier mod Implements IQueryNodeProcessor See Also DEFAULT_OPERATOR BooleanModifiersQueryNodeProcessor"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanSingleChildOptimizationQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BooleanSingleChildOptimizationQueryNodeProcessor.html",
    "title": "Class BooleanSingleChildOptimizationQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BooleanSingleChildOptimizationQueryNodeProcessor This processor removes every BooleanQueryNode that contains only one child and returns this child. If this child is ModifierQueryNode that was defined by the user. A modifier is not defined by the user when it's a BooleanModifierNode Inheritance System.Object QueryNodeProcessor BooleanSingleChildOptimizationQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BooleanSingleChildOptimizationQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source BooleanSingleChildOptimizationQueryNodeProcessor() Declaration public BooleanSingleChildOptimizationQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also ModifierQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BoostQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.BoostQueryNodeProcessor.html",
    "title": "Class BoostQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BoostQueryNodeProcessor This processor iterates the query node tree looking for every IFieldableNode that has BOOST in its config. If there is, the boost is applied to that IFieldableNode . Inheritance System.Object QueryNodeProcessor BoostQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class BoostQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor See Also BOOST QueryConfigHandler IFieldableNode"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.TaskSchedulerCompletionService-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.TaskSchedulerCompletionService-1.html",
    "title": "Class TaskSchedulerCompletionService<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TaskSchedulerCompletionService<T> Inheritance System.Object TaskSchedulerCompletionService<T> Implements ICompletionService <T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class TaskSchedulerCompletionService<T> : ICompletionService<T> Type Parameters Name Description T Constructors | Improve this Doc View Source TaskSchedulerCompletionService(TaskScheduler) Declaration public TaskSchedulerCompletionService(TaskScheduler scheduler) Parameters Type Name Description System.Threading.Tasks.TaskScheduler scheduler Methods | Improve this Doc View Source Submit(ICallable<T>) Declaration public Task<T> Submit(ICallable<T> task) Parameters Type Name Description ICallable <T> task Returns Type Description System.Threading.Tasks.Task <T> | Improve this Doc View Source Take() Declaration public Task<T> Take() Returns Type Description System.Threading.Tasks.Task <T> Implements ICompletionService<V> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.ThreadClass.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.ThreadClass.html",
    "title": "Class ThreadClass | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ThreadClass Support class used to handle threads that is inheritable just like the Thread type in Java. This class also ensures that when an error is thrown on a background thread, it will be properly re-thrown on the calling thread, which is the same behavior as we see in Lucene. Inheritance System.Object ThreadClass ControlledRealTimeReopenThread<T> TimeLimitingCollector.TimerThread Implements IThreadRunnable Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class ThreadClass : IThreadRunnable Constructors | Improve this Doc View Source ThreadClass() Initializes a new instance of the ThreadClass class Declaration public ThreadClass() | Improve this Doc View Source ThreadClass(String) Initializes a new instance of the Thread class. Declaration public ThreadClass(string name) Parameters Type Name Description System.String name The name of the thread | Improve this Doc View Source ThreadClass(ThreadStart) Initializes a new instance of the Thread class. Declaration public ThreadClass(ThreadStart start) Parameters Type Name Description System.Threading.ThreadStart start A ThreadStart delegate that references the methods to be invoked when this thread begins executing | Improve this Doc View Source ThreadClass(ThreadStart, String) Initializes a new instance of the Thread class. Declaration public ThreadClass(ThreadStart start, string name) Parameters Type Name Description System.Threading.ThreadStart start A ThreadStart delegate that references the methods to be invoked when this thread begins executing System.String name The name of the thread Properties | Improve this Doc View Source Instance Gets the current thread instance Declaration public Thread Instance { get; set; } Property Value Type Description System.Threading.Thread | Improve this Doc View Source IsAlive Gets a value indicating the execution status of the current thread Declaration public bool IsAlive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsBackground Gets or sets a value indicating whether or not a thread is a background thread. Declaration public bool IsBackground { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsDebug If true when Join() , Join(Int64) or Join(Int64, Int32) is called, any original exception and error message will be wrapped into a new System.Exception when thrown, so debugging tools will show the correct stack trace information. NOTE: This changes the original exception type to System.Exception , so this setting should not be used if control logic depends on the specific exception type being thrown. An alternative way to get the original System.Exception.ToString() message is to use exception.Data[\"OriginalMessage\"].ToString() . Declaration public bool IsDebug { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Name Gets or sets the name of the thread Declaration public string Name { get; set; } Property Value Type Description System.String | Improve this Doc View Source State Declaration public ThreadState State { get; } Property Value Type Description System.Threading.ThreadState Methods | Improve this Doc View Source Current() Gets the currently running thread Declaration public static ThreadClass Current() Returns Type Description ThreadClass The currently running thread | Improve this Doc View Source CurrentThread() Declaration public static ThreadClass CurrentThread() Returns Type Description ThreadClass | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Interrupt() Interrupts a thread that is in the WaitSleepJoin thread state Declaration public virtual void Interrupt() | Improve this Doc View Source Join() Blocks the calling thread until a thread terminates Declaration public void Join() | Improve this Doc View Source Join(Int64) Blocks the calling thread until a thread terminates or the specified time elapses Declaration public void Join(long milliSeconds) Parameters Type Name Description System.Int64 milliSeconds Time of wait in milliseconds | Improve this Doc View Source Join(Int64, Int32) Blocks the calling thread until a thread terminates or the specified time elapses Declaration public void Join(long milliSeconds, int nanoSeconds) Parameters Type Name Description System.Int64 milliSeconds Time of wait in milliseconds System.Int32 nanoSeconds Time of wait in nanoseconds | Improve this Doc View Source Resume() Resumes a thread that has been suspended Declaration public void Resume() | Improve this Doc View Source Run() This method has no functionality unless the method is overridden Declaration public virtual void Run() | Improve this Doc View Source SafeRun(ThreadStart) Safely starts the method passed to start and stores any exception that is thrown. The first exception will stop execution of the method passed to start and it will be re-thrown on the calling thread after it calls Join() , Join(Int64) , or Join(Int64, Int32) . Declaration protected virtual void SafeRun(ThreadStart start) Parameters Type Name Description System.Threading.ThreadStart start A System.Threading.ThreadStart delegate that references the methods to be invoked when this thread begins executing | Improve this Doc View Source SetDaemon(Boolean) Declaration public void SetDaemon(bool isDaemon) Parameters Type Name Description System.Boolean isDaemon | Improve this Doc View Source Sleep(Int64) Declaration public static void Sleep(long ms) Parameters Type Name Description System.Int64 ms | Improve this Doc View Source Start() Causes the operating system to change the state of the current thread instance to ThreadState.Running Declaration public virtual void Start() | Improve this Doc View Source Suspend() Suspends the thread, if the thread is already suspended it has no effect Declaration public void Suspend() | Improve this Doc View Source ToString() Obtain a String that represents the current object Declaration public override string ToString() Returns Type Description System.String A String that represents the current object Overrides System.Object.ToString() Operators | Improve this Doc View Source Equality(ThreadClass, Object) Declaration public static bool operator ==(ThreadClass t1, object t2) Parameters Type Name Description ThreadClass t1 System.Object t2 Returns Type Description System.Boolean | Improve this Doc View Source Inequality(ThreadClass, Object) Declaration public static bool operator !=(ThreadClass t1, object t2) Parameters Type Name Description ThreadClass t1 System.Object t2 Returns Type Description System.Boolean Implements IThreadRunnable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueStr.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.MutableValueStr.html",
    "title": "Class MutableValueStr | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MutableValueStr MutableValue implementation of type System.String . Inheritance System.Object MutableValue MutableValueStr Implements System.IComparable < MutableValue > System.IComparable Inherited Members MutableValue.Exists MutableValue.CompareTo(MutableValue) MutableValue.CompareTo(Object) MutableValue.Equals(Object) MutableValue.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util.Mutable Assembly : Lucene.Net.dll Syntax public class MutableValueStr : MutableValue, IComparable<MutableValue>, IComparable Constructors | Improve this Doc View Source MutableValueStr() Declaration public MutableValueStr() Properties | Improve this Doc View Source Value Declaration public BytesRef Value { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source CompareSameType(Object) Declaration public override int CompareSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Int32 Overrides MutableValue.CompareSameType(Object) | Improve this Doc View Source Copy(MutableValue) Declaration public override void Copy(MutableValue source) Parameters Type Name Description MutableValue source Overrides MutableValue.Copy(MutableValue) | Improve this Doc View Source Duplicate() Declaration public override MutableValue Duplicate() Returns Type Description MutableValue Overrides MutableValue.Duplicate() | Improve this Doc View Source EqualsSameType(Object) Declaration public override bool EqualsSameType(object other) Parameters Type Name Description System.Object other Returns Type Description System.Boolean Overrides MutableValue.EqualsSameType(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MutableValue.GetHashCode() | Improve this Doc View Source ToObject() Declaration public override object ToObject() Returns Type Description System.Object Overrides MutableValue.ToObject() Implements System.IComparable<T> System.IComparable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesReader.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesReader.html",
    "title": "Class OfflineSorter.ByteSequencesReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter.ByteSequencesReader Utility class to read length-prefixed byte[] entries from an input. Complementary to OfflineSorter.ByteSequencesWriter . Inheritance System.Object OfflineSorter.ByteSequencesReader Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class ByteSequencesReader : IDisposable Constructors | Improve this Doc View Source ByteSequencesReader(DataInput) Constructs a OfflineSorter.ByteSequencesReader from the provided DataInput . Declaration public ByteSequencesReader(DataInput inputStream) Parameters Type Name Description DataInput inputStream | Improve this Doc View Source ByteSequencesReader(FileInfo) Constructs a OfflineSorter.ByteSequencesReader from the provided System.IO.FileInfo . Declaration public ByteSequencesReader(FileInfo file) Parameters Type Name Description System.IO.FileInfo file Methods | Improve this Doc View Source Dispose() Disposes the provided DataInput if it is System.IDisposable . Declaration public void Dispose() | Improve this Doc View Source Read() Reads the next entry and returns it if successful. Declaration public virtual byte[] Read() Returns Type Description System.Byte [] Returns null if EOF occurred before the next entry could be read. Exceptions Type Condition System.IO.EndOfStreamException If the file ends before the full sequence is read. See Also Read(BytesRef) | Improve this Doc View Source Read(BytesRef) Reads the next entry into the provided BytesRef . The internal storage is resized if needed. Declaration public virtual bool Read(BytesRef ref) Parameters Type Name Description BytesRef ref Returns Type Description System.Boolean Returns false if EOF occurred when trying to read the header of the next sequence. Returns true otherwise. Exceptions Type Condition System.IO.EndOfStreamException If the file ends before the full sequence is read. Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesWriter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.ByteSequencesWriter.html",
    "title": "Class OfflineSorter.ByteSequencesWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter.ByteSequencesWriter Utility class to emit length-prefixed byte[] entries to an output stream for sorting. Complementary to OfflineSorter.ByteSequencesReader . Inheritance System.Object OfflineSorter.ByteSequencesWriter Implements System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class ByteSequencesWriter : IDisposable Constructors | Improve this Doc View Source ByteSequencesWriter(DataOutput) Constructs a OfflineSorter.ByteSequencesWriter to the provided DataOutput . Declaration public ByteSequencesWriter(DataOutput os) Parameters Type Name Description DataOutput os | Improve this Doc View Source ByteSequencesWriter(FileInfo) Constructs a OfflineSorter.ByteSequencesWriter to the provided System.IO.FileInfo . Declaration public ByteSequencesWriter(FileInfo file) Parameters Type Name Description System.IO.FileInfo file Methods | Improve this Doc View Source Dispose() Disposes the provided DataOutput if it is System.IDisposable . Declaration public void Dispose() | Improve this Doc View Source Write(BytesRef) Writes a BytesRef . Declaration public virtual void Write(BytesRef ref) Parameters Type Name Description BytesRef ref See Also Write(Byte[], Int32, Int32) | Improve this Doc View Source Write(Byte[]) Writes a byte array. Declaration public virtual void Write(byte[] bytes) Parameters Type Name Description System.Byte [] bytes See Also Write(Byte[], Int32, Int32) | Improve this Doc View Source Write(Byte[], Int32, Int32) Writes a byte array. The length is written as a System.Int16 , followed by the bytes. Declaration public virtual void Write(byte[] bytes, int off, int len) Parameters Type Name Description System.Byte [] bytes System.Int32 off System.Int32 len Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSet.html",
    "title": "Class OpenBitSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenBitSet An \"open\" BitSet implementation that allows direct access to the array of words storing the bits. NOTE: This can be used in .NET any place where a java.util.BitSet is used in Java. Unlike java.util.BitSet , the fact that bits are packed into an array of longs is part of the interface. This allows efficient implementation of other algorithms by someone other than the author. It also allows one to efficiently implement alternate serialization or interchange formats. OpenBitSet is faster than java.util.BitSet in most operations and much faster at calculating cardinality of sets and results of set operations. It can also handle sets of larger cardinality (up to 64 * 2**32-1) The goals of OpenBitSet are the fastest implementation possible, and maximum code reuse. Extra safety and encapsulation may always be built on top, but if that's built in, the cost can never be removed (and hence people re-implement their own version in order to get better performance). Performance Results Test system: Pentium 4, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 3.363.961.441.461.991.58 1% full 3.313.90 1.04 0.99 Test system: AMD Opteron, 64 bit linux, Sun Java 1.5_06 -server -Xbatch -Xmx64M BitSet size = 1,000,000 Results are java.util.BitSet time divided by OpenBitSet time. cardinalityIntersectionCountUnionNextSetBitGetGetIterator 50% full 2.503.501.001.031.121.25 1% full 2.513.49 1.00 1.02 Inheritance System.Object DocIdSet OpenBitSet OpenBitSetDISI Implements IBits Inherited Members DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSet : DocIdSet, IBits Constructors | Improve this Doc View Source OpenBitSet() Constructor: allocates enough space for 64 bits. Declaration public OpenBitSet() | Improve this Doc View Source OpenBitSet(Int64) Constructs an OpenBitSet large enough to hold numBits . Declaration public OpenBitSet(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source OpenBitSet(Int64[], Int32) Constructs an OpenBitSet from an existing long[] . The first 64 bits are in long[0], with bit index 0 at the least significant bit, and bit index 63 at the most significant. Given a bit index, the word containing it is long[index/64], and it is at bit number index%64 within that word. numWords are the number of elements in the array that contain set bits (non-zero longs). numWords should be <= bits.Length, and any existing words in the array at position >= numWords should be zero. Declaration public OpenBitSet(long[] bits, int numWords) Parameters Type Name Description System.Int64 [] bits System.Int32 numWords Fields | Improve this Doc View Source m_bits Declaration protected long[] m_bits Field Value Type Description System.Int64 [] | Improve this Doc View Source m_wlen Declaration protected int m_wlen Field Value Type Description System.Int32 Properties | Improve this Doc View Source Bits Declaration public override IBits Bits { get; } Property Value Type Description IBits Overrides DocIdSet.Bits | Improve this Doc View Source Capacity Returns the current capacity in bits (1 greater than the index of the last bit). Declaration public virtual long Capacity { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsCacheable This DocIdSet implementation is cacheable. Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable | Improve this Doc View Source IsEmpty Returns true if there are no set bits Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Length Returns the current capacity of this set. This is not equal to Cardinality() . NOTE: This is equivalent to size() or length() in Lucene. Declaration public virtual int Length { get; } Property Value Type Description System.Int32 | Improve this Doc View Source NumWords Expert: gets the number of System.Int64 s in the array that are in use. Declaration public virtual int NumWords { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source And(OpenBitSet) see Intersect(OpenBitSet) Declaration public virtual void And(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source AndNot(OpenBitSet) see AndNot(OpenBitSet) Declaration public virtual void AndNot(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source AndNotCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of \"a and not b\" or \"intersection(a, not(b))\". Neither set is modified. Declaration public static long AndNotCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Bits2words(Int64) Returns the number of 64 bit words it would take to hold numBits . Declaration public static int Bits2words(long numBits) Parameters Type Name Description System.Int64 numBits Returns Type Description System.Int32 | Improve this Doc View Source Cardinality() Get the number of set bits. Declaration public virtual long Cardinality() Returns Type Description System.Int64 The number of set bits. | Improve this Doc View Source Clear(Int32, Int32) Clears a range of bits. Clearing past the end does not change the size of the set. Declaration public virtual void Clear(int startIndex, int endIndex) Parameters Type Name Description System.Int32 startIndex Lower index System.Int32 endIndex One-past the last bit to clear | Improve this Doc View Source Clear(Int64) Clears a bit, allowing access beyond the current set size without changing the size. Declaration public virtual void Clear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Clear(Int64, Int64) Clears a range of bits. Clearing past the end does not change the size of the set. Declaration public virtual void Clear(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to clear | Improve this Doc View Source Clone() Declaration public object Clone() Returns Type Description System.Object | Improve this Doc View Source EnsureCapacity(Int64) Ensure that the long[] is big enough to hold numBits, expanding it if necessary. Declaration public virtual void EnsureCapacity(long numBits) Parameters Type Name Description System.Int64 numBits | Improve this Doc View Source EnsureCapacityWords(Int32) Expand the long[] with the size given as a number of words (64 bit longs). Declaration public virtual void EnsureCapacityWords(int numWords) Parameters Type Name Description System.Int32 numWords | Improve this Doc View Source Equals(Object) Returns true if both sets have the same bits set. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source ExpandingWordNum(Int64) Declaration protected virtual int ExpandingWordNum(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int32 | Improve this Doc View Source FastClear(Int32) Clears a bit. The index should be less than the Length . Declaration public virtual void FastClear(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastClear(Int64) Clears a bit. The index should be less than the Length . Declaration public virtual void FastClear(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source FastFlip(Int32) Flips a bit. The index should be less than the Length . Declaration public virtual void FastFlip(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastFlip(Int64) Flips a bit. The index should be less than the Length . Declaration public virtual void FastFlip(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source FastGet(Int32) Returns true or false for the specified bit index . The index should be less than the Length . Declaration public virtual bool FastGet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source FastGet(Int64) Returns true or false for the specified bit index . The index should be less than the Length . Declaration public virtual bool FastGet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source FastSet(Int32) Sets the bit at the specified index . The index should be less than the Length . Declaration public virtual void FastSet(int index) Parameters Type Name Description System.Int32 index | Improve this Doc View Source FastSet(Int64) Sets the bit at the specified index . The index should be less than the Length . Declaration public virtual void FastSet(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Flip(Int64) Flips a bit, expanding the set size if necessary. Declaration public virtual void Flip(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Flip(Int64, Int64) Flips a range of bits, expanding the set size if necessary. Declaration public virtual void Flip(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to flip | Improve this Doc View Source FlipAndGet(Int32) Flips a bit and returns the resulting bit value. The index should be less than the Length . Declaration public virtual bool FlipAndGet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source FlipAndGet(Int64) Flips a bit and returns the resulting bit value. The index should be less than the Length . Declaration public virtual bool FlipAndGet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source Get(Int32) Returns true or false for the specified bit index . Declaration public virtual bool Get(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source Get(Int64) Returns true or false for the specified bit index . Declaration public virtual bool Get(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int32) Sets a bit and returns the previous value. The index should be less than the Length . Declaration public virtual bool GetAndSet(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Boolean | Improve this Doc View Source GetAndSet(Int64) Sets a bit and returns the previous value. The index should be less than the Length . Declaration public virtual bool GetAndSet(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Boolean | Improve this Doc View Source GetBit(Int32) Returns 1 if the bit is set, 0 if not. The index should be less than the Length . Declaration public virtual int GetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source GetBits() Expert: returns the long[] storing the bits. Declaration public virtual long[] GetBits() Returns Type Description System.Int64 [] | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source Intersect(OpenBitSet) this = this AND other Declaration public virtual void Intersect(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source IntersectionCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the intersection of the two sets. Neither set is modified. Declaration public static long IntersectionCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Intersects(OpenBitSet) returns true if the sets have any elements in common. Declaration public virtual bool Intersects(OpenBitSet other) Parameters Type Name Description OpenBitSet other Returns Type Description System.Boolean | Improve this Doc View Source NextSetBit(Int32) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public virtual int NextSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source NextSetBit(Int64) Returns the index of the first set bit starting at the index specified. -1 is returned if there are no more set bits. Declaration public virtual long NextSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Or(OpenBitSet) see Union(OpenBitSet) Declaration public virtual void Or(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source PrevSetBit(Int32) Returns the index of the first set bit starting downwards at the index specified. -1 is returned if there are no more set bits. Declaration public virtual int PrevSetBit(int index) Parameters Type Name Description System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source PrevSetBit(Int64) Returns the index of the first set bit starting downwards at the index specified. -1 is returned if there are no more set bits. Declaration public virtual long PrevSetBit(long index) Parameters Type Name Description System.Int64 index Returns Type Description System.Int64 | Improve this Doc View Source Remove(OpenBitSet) Remove all elements set in other. this = this AND_NOT other. Declaration public virtual void Remove(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source Set(Int64) Sets a bit, expanding the set size if necessary. Declaration public virtual void Set(long index) Parameters Type Name Description System.Int64 index | Improve this Doc View Source Set(Int64, Int64) Sets a range of bits, expanding the set size if necessary. Declaration public virtual void Set(long startIndex, long endIndex) Parameters Type Name Description System.Int64 startIndex Lower index System.Int64 endIndex One-past the last bit to set | Improve this Doc View Source TrimTrailingZeros() Lowers numWords, the number of words in use, by checking for trailing zero words. Declaration public virtual void TrimTrailingZeros() | Improve this Doc View Source Union(OpenBitSet) this = this OR other Declaration public virtual void Union(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source UnionCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the union of the two sets. Neither set is modified. Declaration public static long UnionCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 | Improve this Doc View Source Xor(OpenBitSet) this = this XOR other Declaration public virtual void Xor(OpenBitSet other) Parameters Type Name Description OpenBitSet other | Improve this Doc View Source XorCount(OpenBitSet, OpenBitSet) Returns the popcount or cardinality of the exclusive-or of the two sets. Neither set is modified. Declaration public static long XorCount(OpenBitSet a, OpenBitSet b) Parameters Type Name Description OpenBitSet a OpenBitSet b Returns Type Description System.Int64 Implements IBits Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSetDISI.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSetDISI.html",
    "title": "Class OpenBitSetDISI | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenBitSetDISI OpenBitSet with added methods to bulk-update the bits from a DocIdSetIterator . (DISI stands for DocIdSetIterator ). Inheritance System.Object DocIdSet OpenBitSet OpenBitSetDISI Implements IBits Inherited Members OpenBitSet.m_bits OpenBitSet.m_wlen OpenBitSet.GetIterator() OpenBitSet.Bits OpenBitSet.IsCacheable OpenBitSet.Capacity OpenBitSet.Length OpenBitSet.IsEmpty OpenBitSet.GetBits() OpenBitSet.NumWords OpenBitSet.Get(Int32) OpenBitSet.FastGet(Int32) OpenBitSet.Get(Int64) OpenBitSet.FastGet(Int64) OpenBitSet.GetBit(Int32) OpenBitSet.Set(Int64) OpenBitSet.FastSet(Int32) OpenBitSet.FastSet(Int64) OpenBitSet.Set(Int64, Int64) OpenBitSet.ExpandingWordNum(Int64) OpenBitSet.FastClear(Int32) OpenBitSet.FastClear(Int64) OpenBitSet.Clear(Int64) OpenBitSet.Clear(Int32, Int32) OpenBitSet.Clear(Int64, Int64) OpenBitSet.GetAndSet(Int32) OpenBitSet.GetAndSet(Int64) OpenBitSet.FastFlip(Int32) OpenBitSet.FastFlip(Int64) OpenBitSet.Flip(Int64) OpenBitSet.FlipAndGet(Int32) OpenBitSet.FlipAndGet(Int64) OpenBitSet.Flip(Int64, Int64) OpenBitSet.Cardinality() OpenBitSet.IntersectionCount(OpenBitSet, OpenBitSet) OpenBitSet.UnionCount(OpenBitSet, OpenBitSet) OpenBitSet.AndNotCount(OpenBitSet, OpenBitSet) OpenBitSet.XorCount(OpenBitSet, OpenBitSet) OpenBitSet.NextSetBit(Int32) OpenBitSet.NextSetBit(Int64) OpenBitSet.PrevSetBit(Int32) OpenBitSet.PrevSetBit(Int64) OpenBitSet.Clone() OpenBitSet.Intersect(OpenBitSet) OpenBitSet.Union(OpenBitSet) OpenBitSet.Remove(OpenBitSet) OpenBitSet.Xor(OpenBitSet) OpenBitSet.And(OpenBitSet) OpenBitSet.Or(OpenBitSet) OpenBitSet.AndNot(OpenBitSet) OpenBitSet.Intersects(OpenBitSet) OpenBitSet.EnsureCapacityWords(Int32) OpenBitSet.EnsureCapacity(Int64) OpenBitSet.TrimTrailingZeros() OpenBitSet.Bits2words(Int64) OpenBitSet.Equals(Object) OpenBitSet.GetHashCode() DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSetDISI : OpenBitSet, IBits Constructors | Improve this Doc View Source OpenBitSetDISI(DocIdSetIterator, Int32) Construct an OpenBitSetDISI with its bits set from the doc ids of the given DocIdSetIterator . Also give a maximum size one larger than the largest doc id for which a bit may ever be set on this OpenBitSetDISI . Declaration public OpenBitSetDISI(DocIdSetIterator disi, int maxSize) Parameters Type Name Description DocIdSetIterator disi System.Int32 maxSize | Improve this Doc View Source OpenBitSetDISI(Int32) Construct an OpenBitSetDISI with no bits set, and a given maximum size one larger than the largest doc id for which a bit may ever be set on this OpenBitSetDISI . Declaration public OpenBitSetDISI(int maxSize) Parameters Type Name Description System.Int32 maxSize Methods | Improve this Doc View Source InPlaceAnd(DocIdSetIterator) Perform an inplace AND with the doc ids from a given DocIdSetIterator , leaving only the bits set for which the doc ids are in common. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceAnd(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceNot(DocIdSetIterator) Perform an inplace NOT with the doc ids from a given DocIdSetIterator , clearing all the bits for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceNot(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceOr(DocIdSetIterator) Perform an inplace OR with the doc ids from a given DocIdSetIterator , setting the bit for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceOr(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi | Improve this Doc View Source InPlaceXor(DocIdSetIterator) Perform an inplace XOR with the doc ids from a given DocIdSetIterator , flipping all the bits for each such doc id. These doc ids should be smaller than the maximum size passed to the constructor. Declaration public virtual void InPlaceXor(DocIdSetIterator disi) Parameters Type Name Description DocIdSetIterator disi Implements IBits Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OpenBitSetIterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OpenBitSetIterator.html",
    "title": "Class OpenBitSetIterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OpenBitSetIterator An iterator to iterate over set bits in an OpenBitSet . this is faster than NextSetBit(Int64) for iterating over the complete set of bits, especially when the density of the bits set is high. Inheritance System.Object DocIdSetIterator OpenBitSetIterator Inherited Members DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class OpenBitSetIterator : DocIdSetIterator Constructors | Improve this Doc View Source OpenBitSetIterator(OpenBitSet) Declaration public OpenBitSetIterator(OpenBitSet obs) Parameters Type Name Description OpenBitSet obs | Improve this Doc View Source OpenBitSetIterator(Int64[], Int32) Declaration public OpenBitSetIterator(long[] bits, int numWords) Parameters Type Name Description System.Int64 [] bits System.Int32 numWords Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.RandomSamplingFacetsCollector.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.RandomSamplingFacetsCollector.html",
    "title": "Class RandomSamplingFacetsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RandomSamplingFacetsCollector Collects hits for subsequent faceting, using sampling if needed. Once you've run a search and collect hits into this, instantiate one of the Facets subclasses to do the facet counting. Note that this collector does not collect the scores of matching docs (i.e. Scores ) is null . If you require the original set of hits, you can call GetOriginalMatchingDocs() . Also, since the counts of the top-facets is based on the sampled set, you can amortize the counts by calling AmortizeFacetCounts(FacetResult, FacetsConfig, IndexSearcher) . Inheritance System.Object FacetsCollector RandomSamplingFacetsCollector Implements ICollector Inherited Members FacetsCollector.CreateDocs(Int32) FacetsCollector.KeepScores FacetsCollector.AcceptsDocsOutOfOrder FacetsCollector.Collect(Int32) FacetsCollector.SetScorer(Scorer) FacetsCollector.SetNextReader(AtomicReaderContext) FacetsCollector.Search(IndexSearcher, Query, Int32, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, Sort, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Int32, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class RandomSamplingFacetsCollector : FacetsCollector, ICollector Constructors | Improve this Doc View Source RandomSamplingFacetsCollector(Int32) Constructor with the given sample size and default seed. Declaration public RandomSamplingFacetsCollector(int sampleSize) Parameters Type Name Description System.Int32 sampleSize See Also RandomSamplingFacetsCollector(Int32, Int64) | Improve this Doc View Source RandomSamplingFacetsCollector(Int32, Int64) Constructor with the given sample size and seed. Declaration public RandomSamplingFacetsCollector(int sampleSize, long seed) Parameters Type Name Description System.Int32 sampleSize The preferred sample size. If the number of hits is greater than the size, sampling will be done using a sample ratio of sampling size / totalN. For example: 1000 hits, sample size = 10 results in samplingRatio of 0.01. If the number of hits is lower, no sampling is done at all System.Int64 seed The random seed. If 0 then a seed will be chosen for you. Properties | Improve this Doc View Source SamplingRate Returns the sampling rate that was used. Declaration public virtual double SamplingRate { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source AmortizeFacetCounts(FacetResult, FacetsConfig, IndexSearcher) Note: if you use a counting Facets implementation, you can amortize the sampled counts by calling this method. Uses the FacetsConfig and the IndexSearcher to determine the upper bound for each facet value. Declaration public virtual FacetResult AmortizeFacetCounts(FacetResult res, FacetsConfig config, IndexSearcher searcher) Parameters Type Name Description FacetResult res FacetsConfig config IndexSearcher searcher Returns Type Description FacetResult | Improve this Doc View Source GetMatchingDocs() Returns the sampled list of the matching documents. Note that a FacetsCollector.MatchingDocs instance is returned per segment, even if no hits from that segment are included in the sampled set. Note: One or more of the FacetsCollector.MatchingDocs might be empty (not containing any hits) as result of sampling. Note: TotalHits is copied from the original FacetsCollector.MatchingDocs , scores is set to null Declaration public override IList<FacetsCollector.MatchingDocs> GetMatchingDocs() Returns Type Description System.Collections.Generic.IList < FacetsCollector.MatchingDocs > Overrides FacetsCollector.GetMatchingDocs() | Improve this Doc View Source GetOriginalMatchingDocs() Returns the original matching documents. Declaration public virtual IList<FacetsCollector.MatchingDocs> GetOriginalMatchingDocs() Returns Type Description System.Collections.Generic.IList < FacetsCollector.MatchingDocs > Implements ICollector"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRange.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRange.html",
    "title": "Class DoubleRange | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleRange Represents a range over double values. @lucene.experimental Inheritance System.Object Range DoubleRange Inherited Members Range.Label Range.GetFilter(ValueSource) Range.FailNoMatch() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public sealed class DoubleRange : Range Constructors | Improve this Doc View Source DoubleRange(String, Double, Boolean, Double, Boolean) Create a DoubleRange. Declaration public DoubleRange(string label, double minIn, bool minInclusive, double maxIn, bool maxInclusive) Parameters Type Name Description System.String label System.Double minIn System.Boolean minInclusive System.Double maxIn System.Boolean maxInclusive Properties | Improve this Doc View Source Max Maximum. Declaration public double Max { get; } Property Value Type Description System.Double | Improve this Doc View Source MaxInclusive True if the maximum value is inclusive. Declaration public bool MaxInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Min Minimum. Declaration public double Min { get; } Property Value Type Description System.Double | Improve this Doc View Source MinInclusive True if the minimum value is inclusive. Declaration public bool MinInclusive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept(Double) True if this range accepts the provided value. Declaration public bool Accept(double value) Parameters Type Name Description System.Double value Returns Type Description System.Boolean | Improve this Doc View Source GetFilter(Filter, ValueSource) Declaration public override Filter GetFilter(Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Filter fastMatchFilter ValueSource valueSource Returns Type Description Filter Overrides Range.GetFilter(Filter, ValueSource) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.DoubleRangeFacetCounts.html",
    "title": "Class DoubleRangeFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DoubleRangeFacetCounts Facets implementation that computes counts for dynamic double ranges from a provided ValueSource , using DoubleVal(Int32) or DoubleVal(Int32, Double[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). If you had indexed your field using SingleDocValuesField then pass SingleFieldSource as the ValueSource ; if you used DoubleDocValuesField then pass DoubleFieldSource (this is the default used when you pass just a the field name). @lucene.experimental Inheritance System.Object Facets RangeFacetCounts DoubleRangeFacetCounts Inherited Members RangeFacetCounts.m_ranges RangeFacetCounts.m_counts RangeFacetCounts.m_fastMatchFilter RangeFacetCounts.m_field RangeFacetCounts.m_totCount RangeFacetCounts.GetTopChildren(Int32, String, String[]) RangeFacetCounts.GetSpecificValue(String, String[]) RangeFacetCounts.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public class DoubleRangeFacetCounts : RangeFacetCounts Constructors | Improve this Doc View Source DoubleRangeFacetCounts(String, FacetsCollector, DoubleRange[]) Create RangeFacetCounts , using DoubleFieldSource from the specified field. Declaration public DoubleRangeFacetCounts(string field, FacetsCollector hits, params DoubleRange[] ranges) Parameters Type Name Description System.String field FacetsCollector hits DoubleRange [] ranges | Improve this Doc View Source DoubleRangeFacetCounts(String, ValueSource, FacetsCollector, DoubleRange[]) Create RangeFacetCounts , using the provided ValueSource . Declaration public DoubleRangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, params DoubleRange[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits DoubleRange [] ranges | Improve this Doc View Source DoubleRangeFacetCounts(String, ValueSource, FacetsCollector, Filter, DoubleRange[]) Create RangeFacetCounts , using the provided ValueSource , and using the provided Filter as a fastmatch: only documents passing the filter are checked for the matching ranges. The filter must be random access (implement Bits ). Declaration public DoubleRangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, Filter fastMatchFilter, params DoubleRange[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits Filter fastMatchFilter DoubleRange [] ranges"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64Range.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64Range.html",
    "title": "Class Int64Range | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64Range Represents a range over System.Int64 values. NOTE: This was LongRange in Lucene @lucene.experimental Inheritance System.Object Range Int64Range Inherited Members Range.Label Range.GetFilter(ValueSource) Range.FailNoMatch() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public sealed class Int64Range : Range Constructors | Improve this Doc View Source Int64Range(String, Int64, Boolean, Int64, Boolean) Create a Int64Range . Declaration public Int64Range(string label, long minIn, bool minInclusive, long maxIn, bool maxInclusive) Parameters Type Name Description System.String label System.Int64 minIn System.Boolean minInclusive System.Int64 maxIn System.Boolean maxInclusive Properties | Improve this Doc View Source Max Maximum. Declaration public long Max { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxInclusive True if the maximum value is inclusive. Declaration public bool MaxInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Min Minimum. Declaration public long Min { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MinInclusive True if the minimum value is inclusive. Declaration public bool MinInclusive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept(Int64) True if this range accepts the provided value. Declaration public bool Accept(long value) Parameters Type Name Description System.Int64 value Returns Type Description System.Boolean | Improve this Doc View Source GetFilter(Filter, ValueSource) Declaration public override Filter GetFilter(Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Filter fastMatchFilter ValueSource valueSource Returns Type Description Filter Overrides Range.GetFilter(Filter, ValueSource) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64RangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.Int64RangeFacetCounts.html",
    "title": "Class Int64RangeFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Int64RangeFacetCounts Facets implementation that computes counts for dynamic long ranges from a provided ValueSource , using Int64Val(Int32) or Int64Val(Int32, Int64[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). NOTE: This was LongRangeFacetCounts in Lucene @lucene.experimental Inheritance System.Object Facets RangeFacetCounts Int64RangeFacetCounts Inherited Members RangeFacetCounts.m_ranges RangeFacetCounts.m_counts RangeFacetCounts.m_fastMatchFilter RangeFacetCounts.m_field RangeFacetCounts.m_totCount RangeFacetCounts.GetTopChildren(Int32, String, String[]) RangeFacetCounts.GetSpecificValue(String, String[]) RangeFacetCounts.GetAllDims(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public class Int64RangeFacetCounts : RangeFacetCounts Constructors | Improve this Doc View Source Int64RangeFacetCounts(String, FacetsCollector, Int64Range[]) Create Int64RangeFacetCounts , using Int64FieldSource from the specified field. Declaration public Int64RangeFacetCounts(string field, FacetsCollector hits, params Int64Range[] ranges) Parameters Type Name Description System.String field FacetsCollector hits Int64Range [] ranges | Improve this Doc View Source Int64RangeFacetCounts(String, ValueSource, FacetsCollector, Int64Range[]) Create Int64RangeFacetCounts , using the provided ValueSource . Declaration public Int64RangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, params Int64Range[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits Int64Range [] ranges | Improve this Doc View Source Int64RangeFacetCounts(String, ValueSource, FacetsCollector, Filter, Int64Range[]) Create Int64RangeFacetCounts , using the provided ValueSource , and using the provided Filter as a fastmatch: only documents passing the filter are checked for the matching ranges. The filter must be random access (implement Bits ). Declaration public Int64RangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, Filter fastMatchFilter, params Int64Range[] ranges) Parameters Type Name Description System.String field ValueSource valueSource FacetsCollector hits Filter fastMatchFilter Int64Range [] ranges"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.RangeFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Range.RangeFacetCounts.html",
    "title": "Class RangeFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RangeFacetCounts Base class for range faceting. @lucene.experimental Inheritance System.Object Facets RangeFacetCounts DoubleRangeFacetCounts Int64RangeFacetCounts Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public abstract class RangeFacetCounts : Facets Constructors | Improve this Doc View Source RangeFacetCounts(String, Range[], Filter) Create RangeFacetCounts Declaration protected RangeFacetCounts(string field, Range[] ranges, Filter fastMatchFilter) Parameters Type Name Description System.String field Range [] ranges Filter fastMatchFilter Fields | Improve this Doc View Source m_counts Counts, initialized in by subclass. Declaration protected readonly int[] m_counts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_fastMatchFilter Optional: if specified, we first test this Filter to see whether the document should be checked for matching ranges. If this is null, all documents are checked. Declaration protected readonly Filter m_fastMatchFilter Field Value Type Description Filter | Improve this Doc View Source m_field Our field name. Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_ranges Ranges passed to constructor. Declaration protected readonly Range[] m_ranges Field Value Type Description Range [] | Improve this Doc View Source m_totCount Total number of hits. Declaration protected int m_totCount Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.DefaultSortedSetDocValuesReaderState.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.DefaultSortedSetDocValuesReaderState.html",
    "title": "Class DefaultSortedSetDocValuesReaderState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultSortedSetDocValuesReaderState Default implementation of SortedSetDocValuesFacetCounts Inheritance System.Object SortedSetDocValuesReaderState DefaultSortedSetDocValuesReaderState Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class DefaultSortedSetDocValuesReaderState : SortedSetDocValuesReaderState Constructors | Improve this Doc View Source DefaultSortedSetDocValuesReaderState(IndexReader, String) Creates this, pulling doc values from the specified field. Declaration public DefaultSortedSetDocValuesReaderState(IndexReader reader, string field = \"$facets\") Parameters Type Name Description IndexReader reader System.String field Properties | Improve this Doc View Source Count Number of unique labels. Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides SortedSetDocValuesReaderState.Count | Improve this Doc View Source Field Indexed field we are reading. Declaration public override string Field { get; } Property Value Type Description System.String Overrides SortedSetDocValuesReaderState.Field | Improve this Doc View Source OrigReader Declaration public override IndexReader OrigReader { get; } Property Value Type Description IndexReader Overrides SortedSetDocValuesReaderState.OrigReader | Improve this Doc View Source PrefixToOrdRange Returns mapping from prefix to SortedSetDocValuesReaderState.OrdRange . Declaration public override IDictionary<string, SortedSetDocValuesReaderState.OrdRange> PrefixToOrdRange { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , SortedSetDocValuesReaderState.OrdRange > Overrides SortedSetDocValuesReaderState.PrefixToOrdRange Methods | Improve this Doc View Source GetDocValues() Return top-level doc values. Declaration public override SortedSetDocValues GetDocValues() Returns Type Description SortedSetDocValues Overrides SortedSetDocValuesReaderState.GetDocValues() | Improve this Doc View Source GetOrdRange(String) Returns the SortedSetDocValuesReaderState.OrdRange for this dimension. Declaration public override SortedSetDocValuesReaderState.OrdRange GetOrdRange(string dim) Parameters Type Name Description System.String dim Returns Type Description SortedSetDocValuesReaderState.OrdRange Overrides SortedSetDocValuesReaderState.GetOrdRange(String)"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetCounts.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetCounts.html",
    "title": "Class SortedSetDocValuesFacetCounts | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesFacetCounts Compute facets counts from previously indexed SortedSetDocValuesFacetField , without require a separate taxonomy index. Faceting is a bit slower (~25%), and there is added cost on every IndexReader open to create a new SortedSetDocValuesReaderState . Furthermore, this does not support hierarchical facets; only flat (dimension + label) facets, but it uses quite a bit less RAM to do so. NOTE : this class should be instantiated and then used from a single thread, because it holds a thread-private instance of SortedSetDocValues . NOTE: : tie-break is by unicode sort order @lucene.experimental Inheritance System.Object Facets SortedSetDocValuesFacetCounts Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class SortedSetDocValuesFacetCounts : Facets Constructors | Improve this Doc View Source SortedSetDocValuesFacetCounts(SortedSetDocValuesReaderState, FacetsCollector) Sparse faceting: returns any dimension that had any hits, topCount labels per dimension. Declaration public SortedSetDocValuesFacetCounts(SortedSetDocValuesReaderState state, FacetsCollector hits) Parameters Type Name Description SortedSetDocValuesReaderState state FacetsCollector hits Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField.html",
    "title": "Class SortedSetDocValuesFacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedSetDocValuesFacetField Add an instance of this to your Document for every facet label to be indexed via SortedSetDocValues . Inheritance System.Object Field SortedSetDocValuesFacetField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class SortedSetDocValuesFacetField : Field, IIndexableField Constructors | Improve this Doc View Source SortedSetDocValuesFacetField(String, String) Sole constructor. Declaration public SortedSetDocValuesFacetField(string dim, string label) Parameters Type Name Description System.String dim System.String label Fields | Improve this Doc View Source TYPE Indexed FieldType . Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Properties | Improve this Doc View Source Dim Dimension. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Label Label. Declaration public string Label { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.ToString() Implements IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.AssociationFacetField.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.AssociationFacetField.html",
    "title": "Class AssociationFacetField | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AssociationFacetField Add an instance of this to your Document to add a facet label associated with an arbitrary byte[] . This will require a custom Facets implementation at search time; see Int32AssociationFacetField and SingleAssociationFacetField to use existing Facets implementations. @lucene.experimental Inheritance System.Object Field AssociationFacetField Int32AssociationFacetField SingleAssociationFacetField Implements IIndexableField Inherited Members Field.m_type Field.m_name Field.FieldsData Field.m_tokenStream Field.m_boost Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Field.GetReaderValue() Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Field.SetBytesValue(BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Field.SetTokenStream(TokenStream) Field.Name Field.Boost Field.GetNumericValue() Field.NumericType Field.GetByteValue() Field.GetInt16Value() Field.GetInt32Value() Field.GetInt64Value() Field.GetSingleValue() Field.GetDoubleValue() Field.GetBinaryValue() Field.FieldType Field.IndexableFieldType Field.GetTokenStream(Analyzer) Field.TranslateFieldType(Field.Store, Field.Index, Field.TermVector) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class AssociationFacetField : Field, IIndexableField Constructors | Improve this Doc View Source AssociationFacetField(BytesRef, String, String[]) Creates this from dim and path and an association Declaration public AssociationFacetField(BytesRef assoc, string dim, params string[] path) Parameters Type Name Description BytesRef assoc System.String dim System.String [] path Fields | Improve this Doc View Source TYPE Indexed FieldType . Declaration public static readonly FieldType TYPE Field Value Type Description FieldType Properties | Improve this Doc View Source Assoc Associated value. Declaration public BytesRef Assoc { get; } Property Value Type Description BytesRef | Improve this Doc View Source Dim Dimension for this field. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Path Facet path for this field. Declaration public string[] Path { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Field.ToString() Implements IIndexableField"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.CachedOrds.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.CachedOrds.html",
    "title": "Class CachedOrdinalsReader.CachedOrds | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachedOrdinalsReader.CachedOrds Holds the cached ordinals in two parallel int[] arrays. Inheritance System.Object CachedOrdinalsReader.CachedOrds Implements IAccountable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public sealed class CachedOrds : IAccountable Constructors | Improve this Doc View Source CachedOrds(OrdinalsReader.OrdinalsSegmentReader, Int32) Creates a new CachedOrdinalsReader.CachedOrds from the BinaryDocValues . Assumes that the BinaryDocValues is not null . Declaration public CachedOrds(OrdinalsReader.OrdinalsSegmentReader source, int maxDoc) Parameters Type Name Description OrdinalsReader.OrdinalsSegmentReader source System.Int32 maxDoc Properties | Improve this Doc View Source Offsets Index into Ordinals for each document. Declaration public int[] Offsets { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Ordinals Holds ords for all docs. Declaration public int[] Ordinals { get; } Property Value Type Description System.Int32 [] Methods | Improve this Doc View Source RamBytesUsed() Declaration public long RamBytesUsed() Returns Type Description System.Int64 Implements IAccountable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.html",
    "title": "Class CachedOrdinalsReader | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CachedOrdinalsReader A per-segment cache of documents' facet ordinals. Every CachedOrdinalsReader.CachedOrds holds the ordinals in a raw int[] , and therefore consumes as much RAM as the total number of ordinals found in the segment, but saves the CPU cost of decoding ordinals during facet counting. NOTE: every CachedOrdinalsReader.CachedOrds is limited to 2.1B total ordinals. If that is a limitation for you then consider limiting the segment size to fewer documents, or use an alternative cache which pages through the category ordinals. NOTE: when using this cache, it is advised to use a DocValuesFormat that does not cache the data in memory, at least for the category lists fields, or otherwise you'll be doing double-caching. NOTE: create one instance of this and re-use it for all facet implementations (the cache is per-instance, not static). Inheritance System.Object OrdinalsReader CachedOrdinalsReader Implements IAccountable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class CachedOrdinalsReader : OrdinalsReader, IAccountable Constructors | Improve this Doc View Source CachedOrdinalsReader(OrdinalsReader) Sole constructor. Declaration public CachedOrdinalsReader(OrdinalsReader source) Parameters Type Name Description OrdinalsReader source Properties | Improve this Doc View Source IndexFieldName Declaration public override string IndexFieldName { get; } Property Value Type Description System.String Overrides OrdinalsReader.IndexFieldName Methods | Improve this Doc View Source GetReader(AtomicReaderContext) Declaration public override OrdinalsReader.OrdinalsSegmentReader GetReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader Overrides OrdinalsReader.GetReader(AtomicReaderContext) | Improve this Doc View Source RamBytesUsed() Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 Implements IAccountable"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CategoryPath.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.Taxonomy.CategoryPath.html",
    "title": "Class CategoryPath | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CategoryPath Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CategoryPath Implements System.IComparable < CategoryPath > Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class CategoryPath : IComparable<CategoryPath> Constructors | Improve this Doc View Source CategoryPath(String, Char) Construct from a given path, separating path components with delimiter . Declaration public CategoryPath(string pathString, char delimiter) Parameters Type Name Description System.String pathString System.Char delimiter | Improve this Doc View Source CategoryPath(String[]) Construct from the given path components . Declaration public CategoryPath(params string[] components) Parameters Type Name Description System.String [] components Fields | Improve this Doc View Source EMPTY An empty CategoryPath Declaration public static readonly CategoryPath EMPTY Field Value Type Description CategoryPath Properties | Improve this Doc View Source Components The components of this CategoryPath . Note that this array may be shared with other CategoryPath instances, e.g. as a result of Subpath(Int32) , therefore you should traverse the array up to Length for this path's components. Declaration public string[] Components { get; } Property Value Type Description System.String [] | Improve this Doc View Source Length The number of components of this CategoryPath . Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(CategoryPath) Compares this path with another CategoryPath for lexicographic order. Declaration public virtual int CompareTo(CategoryPath other) Parameters Type Name Description CategoryPath other Returns Type Description System.Int32 | Improve this Doc View Source CopyFullPath(Char[], Int32, Char) Copies the path components to the given char[] , starting at index start . delimiter is copied between the path components. Returns the number of chars copied. NOTE: this method relies on the array being large enough to hold the components and separators - the amount of needed space can be calculated with FullPathLength() . Declaration public virtual int CopyFullPath(char[] buf, int start, char delimiter) Parameters Type Name Description System.Char [] buf System.Int32 start System.Char delimiter Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source FullPathLength() Returns the number of characters needed to represent the path, including delimiter characters, for using with CopyFullPath(Char[], Int32, Char) . Declaration public virtual int FullPathLength() Returns Type Description System.Int32 | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source Int64HashCode() Calculate a 64-bit hash function for this path. NOTE: This was longHashCode() in Lucene Declaration public virtual long Int64HashCode() Returns Type Description System.Int64 | Improve this Doc View Source Subpath(Int32) Returns a sub-path of this path up to length components. Declaration public virtual CategoryPath Subpath(int length) Parameters Type Name Description System.Int32 length Returns Type Description CategoryPath | Improve this Doc View Source ToString() Returns a string representation of the path, separating components with '/'. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also ToString(Char) | Improve this Doc View Source ToString(Char) Returns a string representation of the path, separating components with the given delimiter. Declaration public virtual string ToString(char delimiter) Parameters Type Name Description System.Char delimiter Returns Type Description System.String Implements System.IComparable<T>"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.TokenizedPhraseQueryNode.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Nodes.TokenizedPhraseQueryNode.html",
    "title": "Class TokenizedPhraseQueryNode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TokenizedPhraseQueryNode A TokenizedPhraseQueryNode represents a node created by a code that tokenizes/lemmatizes/analyzes. Inheritance System.Object QueryNode TokenizedPhraseQueryNode Implements IFieldableNode IQueryNode Inherited Members QueryNode.PLAINTEXT_FIELD_NAME QueryNode.Allocate() QueryNode.Add(IQueryNode) QueryNode.Add(IList<IQueryNode>) QueryNode.IsLeaf QueryNode.Set(IList<IQueryNode>) QueryNode.Clone() QueryNode.GetChildren() QueryNode.SetTag(String, Object) QueryNode.UnsetTag(String) QueryNode.ContainsTag(String) QueryNode.GetTag(String) QueryNode.Parent QueryNode.IsRoot QueryNode.m_toQueryStringIgnoreFields QueryNode.IsDefaultField(String) QueryNode.TagMap QueryNode.RemoveFromParent() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.QueryParsers.Flexible.Core.Nodes Assembly : Lucene.Net.QueryParser.dll Syntax public class TokenizedPhraseQueryNode : QueryNode, IFieldableNode, IQueryNode Constructors | Improve this Doc View Source TokenizedPhraseQueryNode() Declaration public TokenizedPhraseQueryNode() Properties | Improve this Doc View Source Field Declaration public virtual string Field { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source CloneTree() Declaration public override IQueryNode CloneTree() Returns Type Description IQueryNode Overrides QueryNode.CloneTree() | Improve this Doc View Source ToQueryString(IEscapeQuerySyntax) Declaration public override string ToQueryString(IEscapeQuerySyntax escapeSyntaxParser) Parameters Type Name Description IEscapeQuerySyntax escapeSyntaxParser Returns Type Description System.String Overrides QueryNode.ToQueryString(IEscapeQuerySyntax) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides QueryNode.ToString() Implements IFieldableNode IQueryNode"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.NoChildOptimizationQueryNodeProcessor.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Core.Processors.NoChildOptimizationQueryNodeProcessor.html",
    "title": "Class NoChildOptimizationQueryNodeProcessor | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NoChildOptimizationQueryNodeProcessor A NoChildOptimizationQueryNodeProcessor removes every BooleanQueryNode, BoostQueryNode, TokenizedPhraseQueryNode or ModifierQueryNode that do not have a valid children. Example: When the children of these nodes are removed for any reason then the nodes may become invalid. Inheritance System.Object QueryNodeProcessor NoChildOptimizationQueryNodeProcessor Implements IQueryNodeProcessor Inherited Members QueryNodeProcessor.Process(IQueryNode) QueryNodeProcessor.ProcessChildren(IQueryNode) QueryNodeProcessor.SetQueryConfigHandler(QueryConfigHandler) QueryNodeProcessor.GetQueryConfigHandler() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Core.Processors Assembly : Lucene.Net.QueryParser.dll Syntax public class NoChildOptimizationQueryNodeProcessor : QueryNodeProcessor, IQueryNodeProcessor Constructors | Improve this Doc View Source NoChildOptimizationQueryNodeProcessor() Declaration public NoChildOptimizationQueryNodeProcessor() Methods | Improve this Doc View Source PostProcessNode(IQueryNode) Declaration protected override IQueryNode PostProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PostProcessNode(IQueryNode) | Improve this Doc View Source PreProcessNode(IQueryNode) Declaration protected override IQueryNode PreProcessNode(IQueryNode node) Parameters Type Name Description IQueryNode node Returns Type Description IQueryNode Overrides QueryNodeProcessor.PreProcessNode(IQueryNode) | Improve this Doc View Source SetChildrenOrder(IList<IQueryNode>) Declaration protected override IList<IQueryNode> SetChildrenOrder(IList<IQueryNode> children) Parameters Type Name Description System.Collections.Generic.IList < IQueryNode > children Returns Type Description System.Collections.Generic.IList < IQueryNode > Overrides QueryNodeProcessor.SetChildrenOrder(IList<IQueryNode>) Implements IQueryNodeProcessor"
  },
  "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionLookup.html": {
    "href": "api/Lucene.Net.Suggest/Lucene.Net.Search.Suggest.Fst.FSTCompletionLookup.html",
    "title": "Class FSTCompletionLookup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FSTCompletionLookup An adapter from Lookup API to FSTCompletion . This adapter differs from FSTCompletion in that it attempts to discretize any \"weights\" as passed from in Weight to match the number of buckets. For the rationale for bucketing, see FSTCompletion . Note: Discretization requires an additional sorting pass. The range of weights for bucketing/ discretization is determined by sorting the input by weight and then dividing into equal ranges. Then, scores within each range are assigned to that bucket. Note that this means that even large differences in weights may be lost during automaton construction, but the overall distinction between \"classes\" of weights will be preserved regardless of the distribution of weights. For fine-grained control over which weights are assigned to which buckets, use FSTCompletion directly or TSTLookup , for example. Inheritance System.Object Lookup FSTCompletionLookup Inherited Members Lookup.CHARSEQUENCE_COMPARER Lookup.Build(IDictionary) Lookup.Load(Stream) Lookup.Store(Stream) Lookup.DoLookup(String, Boolean, Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Suggest.Fst Assembly : Lucene.Net.Suggest.dll Syntax public class FSTCompletionLookup : Lookup Constructors | Improve this Doc View Source FSTCompletionLookup() This constructor prepares for creating a suggested FST using the Build(IInputIterator) method. The number of weight discretization buckets is set to DEFAULT_BUCKETS and exact matches are promoted to the top of the suggestions list. Declaration public FSTCompletionLookup() | Improve this Doc View Source FSTCompletionLookup(FSTCompletion, Boolean) This constructor takes a pre-built automaton. Declaration public FSTCompletionLookup(FSTCompletion completion, bool exactMatchFirst) Parameters Type Name Description FSTCompletion completion An instance of FSTCompletion . System.Boolean exactMatchFirst If true exact matches are promoted to the top of the suggestions list. Otherwise they appear in the order of discretized weight and alphabetical within the bucket. | Improve this Doc View Source FSTCompletionLookup(Int32, Boolean) This constructor prepares for creating a suggested FST using the Build(IInputIterator) method. Declaration public FSTCompletionLookup(int buckets, bool exactMatchFirst) Parameters Type Name Description System.Int32 buckets The number of weight discretization buckets (see FSTCompletion for details). System.Boolean exactMatchFirst If true exact matches are promoted to the top of the suggestions list. Otherwise they appear in the order of discretized weight and alphabetical within the bucket. Properties | Improve this Doc View Source Count Declaration public override long Count { get; } Property Value Type Description System.Int64 Overrides Lookup.Count Methods | Improve this Doc View Source Build(IInputIterator) Declaration public override void Build(IInputIterator iterator) Parameters Type Name Description IInputIterator iterator Overrides Lookup.Build(IInputIterator) | Improve this Doc View Source DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) Declaration public override IList<Lookup.LookupResult> DoLookup(string key, IEnumerable<BytesRef> contexts, bool higherWeightsFirst, int num) Parameters Type Name Description System.String key System.Collections.Generic.IEnumerable < BytesRef > contexts System.Boolean higherWeightsFirst System.Int32 num Returns Type Description System.Collections.Generic.IList < Lookup.LookupResult > Overrides Lookup.DoLookup(String, IEnumerable<BytesRef>, Boolean, Int32) | Improve this Doc View Source Get(String) Returns the bucket (weight) as a Long for the provided key if it exists, otherwise null if it does not. Declaration public virtual object Get(string key) Parameters Type Name Description System.String key Returns Type Description System.Object | Improve this Doc View Source GetSizeInBytes() Declaration public override long GetSizeInBytes() Returns Type Description System.Int64 Overrides Lookup.GetSizeInBytes() | Improve this Doc View Source Load(DataInput) Declaration public override bool Load(DataInput input) Parameters Type Name Description DataInput input Returns Type Description System.Boolean Overrides Lookup.Load(DataInput) | Improve this Doc View Source Store(DataOutput) Declaration public override bool Store(DataOutput output) Parameters Type Name Description DataOutput output Returns Type Description System.Boolean Overrides Lookup.Store(DataOutput) See Also FSTCompletion"
  },
  "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PForDeltaDocIdSet.html",
    "title": "Class PForDeltaDocIdSet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PForDeltaDocIdSet DocIdSet implementation based on pfor-delta encoding. This implementation is inspired from LinkedIn's Kamikaze ( http://data.linkedin.com/opensource/kamikaze ) and Daniel Lemire's JavaFastPFOR ( https://github.com/lemire/JavaFastPFOR ). On the contrary to the original PFOR paper, exceptions are encoded with FOR instead of Simple16. Inheritance System.Object DocIdSet PForDeltaDocIdSet Inherited Members DocIdSet.Bits DocIdSet.NewAnonymous(Func<DocIdSetIterator>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<Boolean>) DocIdSet.NewAnonymous(Func<DocIdSetIterator>, Func<IBits>, Func<Boolean>) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class PForDeltaDocIdSet : DocIdSet Properties | Improve this Doc View Source IsCacheable Declaration public override bool IsCacheable { get; } Property Value Type Description System.Boolean Overrides DocIdSet.IsCacheable Methods | Improve this Doc View Source Cardinality() Return the number of documents in this DocIdSet in constant time. Declaration public int Cardinality() Returns Type Description System.Int32 | Improve this Doc View Source GetIterator() Declaration public override DocIdSetIterator GetIterator() Returns Type Description DocIdSetIterator Overrides DocIdSet.GetIterator() | Improve this Doc View Source RamBytesUsed() Return the memory usage of this instance. Declaration public long RamBytesUsed() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.PrintStreamInfoStream.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.PrintStreamInfoStream.html",
    "title": "Class PrintStreamInfoStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrintStreamInfoStream LUCENENET specific stub to assist with migration to TextWriterInfoStream . Inheritance System.Object InfoStream TextWriterInfoStream PrintStreamInfoStream Implements System.IDisposable Inherited Members TextWriterInfoStream.m_messageID TextWriterInfoStream.m_stream TextWriterInfoStream.Message(String, String) TextWriterInfoStream.IsEnabled(String) TextWriterInfoStream.Dispose(Boolean) TextWriterInfoStream.IsSystemStream InfoStream.NO_OUTPUT InfoStream.Default InfoStream.Dispose() InfoStream.Clone() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax [Obsolete(\"Use TextWriterInfoStream in .NET. This class is provided only to assist with the transition.\")] public class PrintStreamInfoStream : TextWriterInfoStream, IDisposable Constructors | Improve this Doc View Source PrintStreamInfoStream(TextWriter) Declaration public PrintStreamInfoStream(TextWriter stream) Parameters Type Name Description System.IO.TextWriter stream | Improve this Doc View Source PrintStreamInfoStream(TextWriter, Int32) Declaration public PrintStreamInfoStream(TextWriter stream, int messageID) Parameters Type Name Description System.IO.TextWriter stream System.Int32 messageID Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ar.ArabicStemFilterFactory.html",
    "title": "Class ArabicStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArabicStemFilterFactory Factory for ArabicStemFilter . <fieldType name=\"text_arstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.ArabicNormalizationFilterFactory\"/> <filter class=\"solr.ArabicStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory ArabicStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ar Assembly : Lucene.Net.Analysis.Common.dll Syntax public class ArabicStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source ArabicStemFilterFactory(IDictionary<String, String>) Creates a new ArabicStemFilterFactory Declaration public ArabicStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.BulgarianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.BulgarianAnalyzer.html",
    "title": "Class BulgarianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BulgarianAnalyzer Analyzer for Bulgarian. This analyzer implements light-stemming as specified by: Searching Strategies for the Bulgarian Language http://members.unine.ch/jacques.savoy/Papers/BUIR.pdf Inheritance System.Object Analyzer StopwordAnalyzerBase BulgarianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BulgarianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public BulgarianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public BulgarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords | Improve this Doc View Source BulgarianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words and a stem exclusion set. If a stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before BulgarianStemFilter . Declaration public BulgarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion CharArraySet stopwords CharArraySet stemExclusionSet Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Bulgarian stopwords. Default stopword list is from http://members.unine.ch/jacques.savoy/clef/index.html The stopword list is BSD-Licensed. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and BulgarianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.BulgarianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.BulgarianStemFilter.html",
    "title": "Class BulgarianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BulgarianStemFilter A TokenFilter that applies BulgarianStemmer to stem Bulgarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter BulgarianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class BulgarianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source BulgarianStemFilter(TokenStream) Declaration public BulgarianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.BulgarianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Bg.BulgarianStemFilterFactory.html",
    "title": "Class BulgarianStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BulgarianStemFilterFactory Factory for BulgarianStemFilter . <fieldType name=\"text_bgstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.BulgarianStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory BulgarianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Bg Assembly : Lucene.Net.Analysis.Common.dll Syntax public class BulgarianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source BulgarianStemFilterFactory(IDictionary<String, String>) Creates a new BulgarianStemFilterFactory Declaration public BulgarianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilter.html",
    "title": "Class CommonGramsQueryFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommonGramsQueryFilter Wrap a CommonGramsFilter optimizing phrase queries by only returning single words when they are not a member of a bigram. Example: query input to CommonGramsFilter: \"the rain in spain falls mainly\" output of CommomGramsFilter/input to CommonGramsQueryFilter: |\"the, \"the-rain\"|\"rain\" \"rain-in\"|\"in, \"in-spain\"|\"spain\"|\"falls\"|\"mainly\" output of CommonGramsQueryFilter:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" Inheritance System.Object AttributeSource TokenStream TokenFilter CommonGramsQueryFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class CommonGramsQueryFilter : TokenFilter, IDisposable Remarks See: http://hudson.zones.apache.org/hudson/job/Lucene-trunk/javadoc//all/org/apache/lucene/analysis/TokenStream.html and http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/analysis/package.html?revision=718798 Constructors | Improve this Doc View Source CommonGramsQueryFilter(CommonGramsFilter) Constructs a new CommonGramsQueryFilter based on the provided CommomGramsFilter Declaration public CommonGramsQueryFilter(CommonGramsFilter input) Parameters Type Name Description CommonGramsFilter input CommonGramsFilter the QueryFilter will use Properties | Improve this Doc View Source IsGramType Convenience method to check if the current type is a gram type Declaration public bool IsGramType { get; } Property Value Type Description System.Boolean true if the current type is a gram type, false otherwise Methods | Improve this Doc View Source IncrementToken() Output bigrams whenever possible to optimize queries. Only output unigrams when they are not a member of a bigram. Example: input: \"the rain in spain falls mainly\" output:\"the-rain\", \"rain-in\" ,\"in-spain\", \"falls\", \"mainly\" Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilterFactory.html",
    "title": "Class CommonGramsQueryFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CommonGramsQueryFilterFactory Construct CommonGramsQueryFilter . <fieldType name=\"text_cmmngrmsqry\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.CommonGramsQueryFilterFactory\" words=\"commongramsquerystopwords.txt\" ignoreCase=\"false\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory CommonGramsFilterFactory CommonGramsQueryFilterFactory Implements IResourceLoaderAware Inherited Members CommonGramsFilterFactory.Inform(IResourceLoader) CommonGramsFilterFactory.IgnoreCase CommonGramsFilterFactory.CommonWords TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.CommonGrams Assembly : Lucene.Net.Analysis.Common.dll Syntax public class CommonGramsQueryFilterFactory : CommonGramsFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source CommonGramsQueryFilterFactory(IDictionary<String, String>) Creates a new CommonGramsQueryFilterFactory Declaration public CommonGramsQueryFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Create a CommonGramsFilter and wrap it with a CommonGramsQueryFilter Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides CommonGramsFilterFactory.Create(TokenStream) Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.html",
    "title": "Class CompoundWordTokenFilterBase | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CompoundWordTokenFilterBase Base class for decomposition token filters. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. As of 4.4, CompoundWordTokenFilterBase doesn't update offsets. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase DictionaryCompoundWordTokenFilter HyphenationCompoundWordTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public abstract class CompoundWordTokenFilterBase : TokenFilter, IDisposable Constructors | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet, Boolean) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary System.Boolean onlyLongestMatch | Improve this Doc View Source CompoundWordTokenFilterBase(LuceneVersion, TokenStream, CharArraySet, Int32, Int32, Int32, Boolean) Declaration protected CompoundWordTokenFilterBase(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion TokenStream input CharArraySet dictionary System.Int32 minWordSize System.Int32 minSubwordSize System.Int32 maxSubwordSize System.Boolean onlyLongestMatch Fields | Improve this Doc View Source DEFAULT_MAX_SUBWORD_SIZE The default for maximal length of subwords that get propagated to the output of this filter Declaration public const int DEFAULT_MAX_SUBWORD_SIZE = 15 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_SUBWORD_SIZE The default for minimal length of subwords that get propagated to the output of this filter Declaration public const int DEFAULT_MIN_SUBWORD_SIZE = 2 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT_MIN_WORD_SIZE The default for minimal word length that gets decomposed Declaration public const int DEFAULT_MIN_WORD_SIZE = 5 Field Value Type Description System.Int32 | Improve this Doc View Source m_dictionary Declaration protected readonly CharArraySet m_dictionary Field Value Type Description CharArraySet | Improve this Doc View Source m_matchVersion Declaration protected readonly LuceneVersion m_matchVersion Field Value Type Description LuceneVersion | Improve this Doc View Source m_maxSubwordSize Declaration protected readonly int m_maxSubwordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minSubwordSize Declaration protected readonly int m_minSubwordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_minWordSize Declaration protected readonly int m_minWordSize Field Value Type Description System.Int32 | Improve this Doc View Source m_offsetAtt Declaration protected readonly IOffsetAttribute m_offsetAtt Field Value Type Description IOffsetAttribute | Improve this Doc View Source m_onlyLongestMatch Declaration protected readonly bool m_onlyLongestMatch Field Value Type Description System.Boolean | Improve this Doc View Source m_termAtt Declaration protected readonly ICharTermAttribute m_termAtt Field Value Type Description ICharTermAttribute | Improve this Doc View Source m_tokens Declaration protected readonly LinkedList<CompoundWordTokenFilterBase.CompoundToken> m_tokens Field Value Type Description System.Collections.Generic.LinkedList < CompoundWordTokenFilterBase.CompoundToken > Methods | Improve this Doc View Source Decompose() Decomposes the current m_termAtt and places CompoundWordTokenFilterBase.CompoundToken instances in the m_tokens list. The original token may not be placed in the list, as it is automatically passed through this filter. Declaration protected abstract void Decompose() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilter.html",
    "title": "Class DictionaryCompoundWordTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryCompoundWordTokenFilter A TokenFilter that decomposes compound words found in many Germanic languages. \"Donaudampfschiff\" becomes Donau, dampf, schiff so that you can find \"Donaudampfschiff\" even when you only enter \"schiff\". It uses a brute-force algorithm to achieve this. You must specify the required LuceneVersion compatibility when creating CompoundWordTokenFilterBase : As of 3.1, CompoundWordTokenFilterBase correctly handles Unicode 4.0 supplementary characters in strings and char arrays provided as compound word dictionaries. Inheritance System.Object AttributeSource TokenStream TokenFilter CompoundWordTokenFilterBase DictionaryCompoundWordTokenFilter Implements System.IDisposable Inherited Members CompoundWordTokenFilterBase.DEFAULT_MIN_WORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MIN_SUBWORD_SIZE CompoundWordTokenFilterBase.DEFAULT_MAX_SUBWORD_SIZE CompoundWordTokenFilterBase.m_matchVersion CompoundWordTokenFilterBase.m_dictionary CompoundWordTokenFilterBase.m_tokens CompoundWordTokenFilterBase.m_minWordSize CompoundWordTokenFilterBase.m_minSubwordSize CompoundWordTokenFilterBase.m_maxSubwordSize CompoundWordTokenFilterBase.m_onlyLongestMatch CompoundWordTokenFilterBase.m_termAtt CompoundWordTokenFilterBase.m_offsetAtt CompoundWordTokenFilterBase.IncrementToken() CompoundWordTokenFilterBase.Reset() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DictionaryCompoundWordTokenFilter : CompoundWordTokenFilterBase, IDisposable Constructors | Improve this Doc View Source DictionaryCompoundWordTokenFilter(LuceneVersion, TokenStream, CharArraySet) Creates a new DictionaryCompoundWordTokenFilter Declaration public DictionaryCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process CharArraySet dictionary the word dictionary to match against. | Improve this Doc View Source DictionaryCompoundWordTokenFilter(LuceneVersion, TokenStream, CharArraySet, Int32, Int32, Int32, Boolean) Creates a new DictionaryCompoundWordTokenFilter Declaration public DictionaryCompoundWordTokenFilter(LuceneVersion matchVersion, TokenStream input, CharArraySet dictionary, int minWordSize, int minSubwordSize, int maxSubwordSize, bool onlyLongestMatch) Parameters Type Name Description LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. TokenStream input the TokenStream to process CharArraySet dictionary the word dictionary to match against. System.Int32 minWordSize only words longer than this get processed System.Int32 minSubwordSize only subwords longer than this get to the output stream System.Int32 maxSubwordSize only subwords shorter than this get to the output stream System.Boolean onlyLongestMatch Add only the longest matching subword to the stream Methods | Improve this Doc View Source Decompose() Declaration protected override void Decompose() Overrides CompoundWordTokenFilterBase.Decompose() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilterFactory.html",
    "title": "Class DictionaryCompoundWordTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DictionaryCompoundWordTokenFilterFactory Factory for DictionaryCompoundWordTokenFilter . <fieldType name=\"text_dictcomp\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.DictionaryCompoundWordTokenFilterFactory\" dictionary=\"dictionary.txt\" minWordSize=\"5\" minSubwordSize=\"2\" maxSubwordSize=\"15\" onlyLongestMatch=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory DictionaryCompoundWordTokenFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound Assembly : Lucene.Net.Analysis.Common.dll Syntax public class DictionaryCompoundWordTokenFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source DictionaryCompoundWordTokenFilterFactory(IDictionary<String, String>) Creates a new DictionaryCompoundWordTokenFilterFactory Declaration public DictionaryCompoundWordTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.HyphenationTree.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.HyphenationTree.html",
    "title": "Class HyphenationTree | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HyphenationTree This tree structure stores the hyphenation patterns in an efficient way for fast lookup. It provides the provides the method to hyphenate a word. This class has been taken from the Apache FOP project ( http://xmlgraphics.apache.org/fop/ ). They have been slightly modified. Inheritance System.Object TernaryTree HyphenationTree Implements IPatternConsumer Inherited Members TernaryTree.m_lo TernaryTree.m_hi TernaryTree.m_eq TernaryTree.m_sc TernaryTree.m_kv TernaryTree.m_root TernaryTree.m_freenode TernaryTree.m_length TernaryTree.BLOCK_SIZE TernaryTree.Init() TernaryTree.Insert(String, Char) TernaryTree.Insert(Char[], Int32, Char) TernaryTree.StrCmp(Char[], Int32, Char[], Int32) TernaryTree.StrCmp(String, Char[], Int32) TernaryTree.StrCpy(Char[], Int32, Char[], Int32) TernaryTree.StrLen(Char[], Int32) TernaryTree.StrLen(Char[]) TernaryTree.Find(String) TernaryTree.Find(Char[], Int32) TernaryTree.Knows(String) TernaryTree.Length TernaryTree.Clone() TernaryTree.InsertBalanced(String[], Char[], Int32, Int32) TernaryTree.Balance() TernaryTree.TrimToSize() TernaryTree.Keys() TernaryTree.PrintStats(TextWriter) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HyphenationTree : TernaryTree, IPatternConsumer Constructors | Improve this Doc View Source HyphenationTree() Declaration public HyphenationTree() Fields | Improve this Doc View Source m_classmap This map stores the character classes Declaration protected TernaryTree m_classmap Field Value Type Description TernaryTree | Improve this Doc View Source m_stoplist This map stores hyphenation exceptions Declaration protected IDictionary<string, IList<object>> m_stoplist Field Value Type Description System.Collections.Generic.IDictionary < System.String , System.Collections.Generic.IList < System.Object >> | Improve this Doc View Source m_vspace value space: stores the interletter values Declaration protected ByteVector m_vspace Field Value Type Description ByteVector Methods | Improve this Doc View Source AddClass(String) Add a character class to the tree. It is used by PatternParser as callback to add character classes. Character classes define the valid word characters for hyphenation. If a word contains a character not defined in any of the classes, it is not hyphenated. It also defines a way to normalize the characters in order to compare them with the stored patterns. Usually pattern files use only lower case characters, in this case a class for letter 'a', for example, should be defined as \"aA\", the first character being the normalization char. Declaration public virtual void AddClass(string chargroup) Parameters Type Name Description System.String chargroup | Improve this Doc View Source AddException(String, IList<Object>) Add an exception to the tree. It is used by PatternParser class as callback to store the hyphenation exceptions. Declaration public virtual void AddException(string word, IList<object> hyphenatedword) Parameters Type Name Description System.String word normalized word System.Collections.Generic.IList < System.Object > hyphenatedword a vector of alternating strings and Hyphen objects. | Improve this Doc View Source AddPattern(String, String) Add a pattern to the tree. Mainly, to be used by PatternParser class as callback to add a pattern to the tree. Declaration public virtual void AddPattern(string pattern, string ivalue) Parameters Type Name Description System.String pattern the hyphenation pattern System.String ivalue interletter weight values indicating the desirability and priority of hyphenating at a given point within the pattern. It should contain only digit characters. (i.e. '0' to '9'). | Improve this Doc View Source FindPattern(String) Declaration public virtual string FindPattern(string pat) Parameters Type Name Description System.String pat Returns Type Description System.String | Improve this Doc View Source GetValues(Int32) Declaration protected virtual byte[] GetValues(int k) Parameters Type Name Description System.Int32 k Returns Type Description System.Byte [] | Improve this Doc View Source HStrCmp(Char[], Int32, Char[], Int32) String compare, returns 0 if equal or t is a substring of s Declaration protected virtual int HStrCmp(char[] s, int si, char[] t, int ti) Parameters Type Name Description System.Char [] s System.Int32 si System.Char [] t System.Int32 ti Returns Type Description System.Int32 | Improve this Doc View Source Hyphenate(Char[], Int32, Int32, Int32, Int32) Hyphenate word and return an array of hyphenation points. Declaration public virtual Hyphenation Hyphenate(char[] w, int offset, int len, int remainCharCount, int pushCharCount) Parameters Type Name Description System.Char [] w char array that contains the word System.Int32 offset Offset to first character in word System.Int32 len Length of word System.Int32 remainCharCount Minimum number of characters allowed before the hyphenation point. System.Int32 pushCharCount Minimum number of characters allowed after the hyphenation point. Returns Type Description Hyphenation a Hyphenation object representing the hyphenated word or null if word is not hyphenated. Remarks w = \"* nnllllllnnn \", where n is a non-letter, l is a letter, all n may be absent, the first n is at offset, the first l is at offset + iIgnoreAtBeginning; word = \".llllll.'\\0' *\", where all l in w are copied into word. In the first part of the routine len = w.length, in the second part of the routine len = word.length. Three indices are used: index(w), the index in w, index(word), the index in word, letterindex(word), the index in the letter part of word. The following relations exist: index(w) = offset + i - 1 index(word) = i - iIgnoreAtBeginning letterindex(word) = index(word) - 1 (see first loop). It follows that: index(w) - index(word) = offset - 1 + iIgnoreAtBeginning index(w) = letterindex(word) + offset + iIgnoreAtBeginning | Improve this Doc View Source Hyphenate(String, Int32, Int32) Hyphenate word and return a Hyphenation object. Declaration public virtual Hyphenation Hyphenate(string word, int remainCharCount, int pushCharCount) Parameters Type Name Description System.String word the word to be hyphenated System.Int32 remainCharCount Minimum number of characters allowed before the hyphenation point. System.Int32 pushCharCount Minimum number of characters allowed after the hyphenation point. Returns Type Description Hyphenation a Hyphenation object representing the hyphenated word or null if word is not hyphenated. | Improve this Doc View Source LoadPatterns(FileInfo) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(FileInfo f) Parameters Type Name Description System.IO.FileInfo f a System.IO.FileInfo object representing the file Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(FileInfo, Encoding) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(FileInfo f, Encoding encoding) Parameters Type Name Description System.IO.FileInfo f a System.IO.FileInfo object representing the file System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(Stream) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(Stream source) Parameters Type Name Description System.IO.Stream source System.IO.Stream input source for the file Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(Stream, Encoding) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(Stream source, Encoding encoding) Parameters Type Name Description System.IO.Stream source System.IO.Stream input source for the file System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(String) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(string filename) Parameters Type Name Description System.String filename the filename Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(String, Encoding) Read hyphenation patterns from an XML file. Declaration public virtual void LoadPatterns(string filename, Encoding encoding) Parameters Type Name Description System.String filename the filename System.Text.Encoding encoding The character encoding to use Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source LoadPatterns(XmlReader) Read hyphenation patterns from an System.Xml.XmlReader . Declaration public virtual void LoadPatterns(XmlReader source) Parameters Type Name Description System.Xml.XmlReader source System.Xml.XmlReader input source for the file Exceptions Type Condition System.IO.IOException In case the parsing fails | Improve this Doc View Source PackValues(String) Packs the values by storing them in 4 bits, two values into a byte Values range is from 0 to 9. We use zero as terminator, so we'll add 1 to the value. Declaration protected virtual int PackValues(string values) Parameters Type Name Description System.String values a string of digits from '0' to '9' representing the interletter values. Returns Type Description System.Int32 the index into the vspace array where the packed values are stored. | Improve this Doc View Source SearchPatterns(Char[], Int32, Byte[]) Search for all possible partial matches of word starting at index an update interletter values. In other words, it does something like: for (i=0; i<patterns.Length; i++) { if (word.Substring(index).StartsWith(patterns[i], StringComparison.Ordinal)) update_interletter_values(patterns[i]); } But it is done in an efficient way since the patterns are stored in a ternary tree. In fact, this is the whole purpose of having the tree: doing this search without having to test every single pattern. The number of patterns for languages such as English range from 4000 to 10000. Thus, doing thousands of string comparisons for each word to hyphenate would be really slow without the tree. The tradeoff is memory, but using a ternary tree instead of a trie, almost halves the the memory used by Lout or TeX. It's also faster than using a hash table Declaration protected virtual void SearchPatterns(char[] word, int index, byte[] il) Parameters Type Name Description System.Char [] word null terminated word to match System.Int32 index start index from word System.Byte [] il interletter values array to update | Improve this Doc View Source UnpackValues(Int32) Declaration protected virtual string UnpackValues(int k) Parameters Type Name Description System.Int32 k Returns Type Description System.String Implements IPatternConsumer"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.Iterator.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.Iterator.html",
    "title": "Class TernaryTree.Iterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TernaryTree.Iterator Enumerator for TernaryTree LUCENENET NOTE: This differs a bit from its Java counterpart to adhere to .NET IEnumerator semantics. In Java, when the TernaryTree.Iterator is instantiated, it is already positioned at the first element. However, to act like a .NET IEnumerator, the initial state is undefined and considered to be before the first element until MoveNext() is called, and if a move took place it will return true ; Inheritance System.Object TernaryTree.Iterator Implements System.Collections.Generic.IEnumerator < System.String > System.Collections.IEnumerator System.IDisposable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Compound.Hyphenation Assembly : Lucene.Net.Analysis.Common.dll Syntax public class Iterator : IEnumerator<string>, IEnumerator, IDisposable Constructors | Improve this Doc View Source Iterator(TernaryTree) Declaration public Iterator(TernaryTree outerInstance) Parameters Type Name Description TernaryTree outerInstance Properties | Improve this Doc View Source Current Declaration public string Current { get; } Property Value Type Description System.String | Improve this Doc View Source Value Declaration public virtual char Value { get; } Property Value Type Description System.Char Methods | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source MoveNext() Declaration public bool MoveNext() Returns Type Description System.Boolean | Improve this Doc View Source Reset() Declaration public void Reset() | Improve this Doc View Source Rewind() Declaration public virtual void Rewind() Explicit Interface Implementations | Improve this Doc View Source IEnumerator.Current Declaration object IEnumerator.Current { get; } Returns Type Description System.Object Implements System.Collections.Generic.IEnumerator<T> System.Collections.IEnumerator System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.HungarianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.HungarianAnalyzer.html",
    "title": "Class HungarianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HungarianAnalyzer Analyzer for Hungarian. Inheritance System.Object Analyzer StopwordAnalyzerBase HungarianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HungarianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source HungarianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public HungarianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source HungarianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public HungarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source HungarianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public HungarianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Hungarian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"hungarian_stop.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.HungarianLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.HungarianLightStemFilter.html",
    "title": "Class HungarianLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HungarianLightStemFilter A TokenFilter that applies HungarianLightStemmer to stem Hungarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter HungarianLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HungarianLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HungarianLightStemFilter(TokenStream) Declaration public HungarianLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.HungarianLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hu.HungarianLightStemFilterFactory.html",
    "title": "Class HungarianLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HungarianLightStemFilterFactory Factory for HungarianLightStemFilter . <fieldType name=\"text_hulgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.HungarianLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HungarianLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hu Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HungarianLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source HungarianLightStemFilterFactory(IDictionary<String, String>) Creates a new HungarianLightStemFilterFactory Declaration public HungarianLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hunspell.HunspellStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hunspell.HunspellStemFilter.html",
    "title": "Class HunspellStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HunspellStemFilter TokenFilter that uses hunspell affix rules and words to stem tokens. Since hunspell supports a word having multiple stems, this filter can emit multiple tokens for each consumed token Note: This filter is aware of the KeywordAttribute . To prevent certain terms from being passed to the stemmer IsKeyword should be set to true in a previous TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AttributeSource TokenStream TokenFilter HunspellStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Hunspell Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class HunspellStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary) Create a HunspellStemFilter outputting all possible stems. Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary) Parameters Type Name Description TokenStream input Dictionary dictionary See Also HunspellStemFilter(TokenStream, Dictionary, Boolean) | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary, Boolean) Create a HunspellStemFilter outputting all possible stems. Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary, bool dedup) Parameters Type Name Description TokenStream input Dictionary dictionary System.Boolean dedup See Also HunspellStemFilter(TokenStream, Dictionary, Boolean, Boolean) | Improve this Doc View Source HunspellStemFilter(TokenStream, Dictionary, Boolean, Boolean) Creates a new HunspellStemFilter that will stem tokens from the given TokenStream using affix rules in the provided Dictionary Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary, bool dedup, bool longestOnly) Parameters Type Name Description TokenStream input TokenStream whose tokens will be stemmed Dictionary dictionary Hunspell Dictionary containing the affix rules and words that will be used to stem the tokens System.Boolean dedup remove duplicates System.Boolean longestOnly true if only the longest term should be output. Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hunspell.HunspellStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hunspell.HunspellStemFilterFactory.html",
    "title": "Class HunspellStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class HunspellStemFilterFactory TokenFilterFactory that creates instances of HunspellStemFilter . Example config for British English: <filter class=\"solr.HunspellStemFilterFactory\" dictionary=\"en_GB.dic,my_custom.dic\" affix=\"en_GB.aff\" ignoreCase=\"false\" longestOnly=\"false\" /> Both parameters dictionary and affix are mandatory. Dictionaries for many languages are available through the OpenOffice project. See http://wiki.apache.org/solr/Hunspell This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory HunspellStemFilterFactory Implements IResourceLoaderAware Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hunspell Assembly : Lucene.Net.Analysis.Common.dll Syntax public class HunspellStemFilterFactory : TokenFilterFactory, IResourceLoaderAware Constructors | Improve this Doc View Source HunspellStemFilterFactory(IDictionary<String, String>) Creates a new HunspellStemFilterFactory Declaration public HunspellStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream tokenStream) Parameters Type Name Description TokenStream tokenStream Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source Inform(IResourceLoader) Declaration public virtual void Inform(IResourceLoader loader) Parameters Type Name Description IResourceLoader loader Implements IResourceLoaderAware"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hy.ArmenianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Hy.ArmenianAnalyzer.html",
    "title": "Class ArmenianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ArmenianAnalyzer Analyzer for Armenian. Inheritance System.Object Analyzer StopwordAnalyzerBase ArmenianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Hy Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ArmenianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public ArmenianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words. Declaration public ArmenianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source ArmenianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop words. If a non-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before stemming. Declaration public ArmenianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Armenian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet default stop words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a TokenStreamComponents which tokenizes all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents A TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and SnowballFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.IndonesianAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.IndonesianAnalyzer.html",
    "title": "Class IndonesianAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndonesianAnalyzer Analyzer for Indonesian (Bahasa) Inheritance System.Object Analyzer StopwordAnalyzerBase IndonesianAnalyzer Implements System.IDisposable Inherited Members StopwordAnalyzerBase.m_stopwords StopwordAnalyzerBase.m_matchVersion StopwordAnalyzerBase.StopwordSet StopwordAnalyzerBase.LoadStopwordSet(Boolean, Type, String, String) StopwordAnalyzerBase.LoadStopwordSet(FileInfo, LuceneVersion) StopwordAnalyzerBase.LoadStopwordSet(TextReader, LuceneVersion) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndonesianAnalyzer : StopwordAnalyzerBase, IDisposable Constructors | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion) Builds an analyzer with the default stop words: DEFAULT_STOPWORD_FILE . Declaration public IndonesianAnalyzer(LuceneVersion matchVersion) Parameters Type Name Description LuceneVersion matchVersion | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion, CharArraySet) Builds an analyzer with the given stop words Declaration public IndonesianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set | Improve this Doc View Source IndonesianAnalyzer(LuceneVersion, CharArraySet, CharArraySet) Builds an analyzer with the given stop word. If a none-empty stem exclusion set is provided this analyzer will add a SetKeywordMarkerFilter before IndonesianStemFilter . Declaration public IndonesianAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords, CharArraySet stemExclusionSet) Parameters Type Name Description LuceneVersion matchVersion lucene compatibility version CharArraySet stopwords a stopword set CharArraySet stemExclusionSet a set of terms not to be stemmed Fields | Improve this Doc View Source DEFAULT_STOPWORD_FILE File containing default Indonesian stopwords. Declaration public const string DEFAULT_STOPWORD_FILE = \"stopwords.txt\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultStopSet Returns an unmodifiable instance of the default stop-words set. Declaration public static CharArraySet DefaultStopSet { get; } Property Value Type Description CharArraySet an unmodifiable instance of the default stop-words set. Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates TokenStreamComponents used to tokenize all the text in the provided System.IO.TextReader . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName System.IO.TextReader reader Returns Type Description TokenStreamComponents TokenStreamComponents built from an StandardTokenizer filtered with StandardFilter , LowerCaseFilter , StopFilter , SetKeywordMarkerFilter if a stem exclusion set is provided and IndonesianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.IndonesianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.IndonesianStemFilter.html",
    "title": "Class IndonesianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndonesianStemFilter A TokenFilter that applies IndonesianStemmer to stem Indonesian words. Inheritance System.Object AttributeSource TokenStream TokenFilter IndonesianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class IndonesianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source IndonesianStemFilter(TokenStream) Calls IndonesianStemFilter(TokenStream, Boolean) Declaration public IndonesianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source IndonesianStemFilter(TokenStream, Boolean) Create a new IndonesianStemFilter . If stemDerivational is false, only inflectional suffixes (particles and possessive pronouns) are stemmed. Declaration public IndonesianStemFilter(TokenStream input, bool stemDerivational) Parameters Type Name Description TokenStream input System.Boolean stemDerivational Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.IndonesianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Id.IndonesianStemFilterFactory.html",
    "title": "Class IndonesianStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndonesianStemFilterFactory Factory for IndonesianStemFilter . <fieldType name=\"text_idstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.IndonesianStemFilterFactory\" stemDerivational=\"true\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory IndonesianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Id Assembly : Lucene.Net.Analysis.Common.dll Syntax public class IndonesianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source IndonesianStemFilterFactory(IDictionary<String, String>) Creates a new IndonesianStemFilterFactory Declaration public IndonesianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.Lucene47WordDelimiterFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.Lucene47WordDelimiterFilter.html",
    "title": "Class Lucene47WordDelimiterFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene47WordDelimiterFilter Old Broken version of WordDelimiterFilter Inheritance System.Object AttributeSource TokenStream TokenFilter Lucene47WordDelimiterFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete] public sealed class Lucene47WordDelimiterFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source Lucene47WordDelimiterFilter(TokenStream, WordDelimiterFlags, CharArraySet) Creates a new Lucene47WordDelimiterFilter using DEFAULT_WORD_DELIM_TABLE as its charTypeTable Declaration public Lucene47WordDelimiterFilter(TokenStream in, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description TokenStream in TokenStream to be filtered WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited | Improve this Doc View Source Lucene47WordDelimiterFilter(TokenStream, Byte[], WordDelimiterFlags, CharArraySet) Creates a new Lucene47WordDelimiterFilter Declaration public Lucene47WordDelimiterFilter(TokenStream in, byte[] charTypeTable, WordDelimiterFlags configurationFlags, CharArraySet protWords) Parameters Type Name Description TokenStream in TokenStream to be filtered System.Byte [] charTypeTable table containing character types WordDelimiterFlags configurationFlags Flags configuring the filter CharArraySet protWords If not null is the set of tokens to protect from being delimited Fields | Improve this Doc View Source ALPHA Declaration public const int ALPHA = 3 Field Value Type Description System.Int32 | Improve this Doc View Source ALPHANUM Declaration public const int ALPHANUM = 7 Field Value Type Description System.Int32 | Improve this Doc View Source DIGIT Declaration public const int DIGIT = 4 Field Value Type Description System.Int32 | Improve this Doc View Source LOWER Declaration public const int LOWER = 1 Field Value Type Description System.Int32 | Improve this Doc View Source SUBWORD_DELIM Declaration public const int SUBWORD_DELIM = 8 Field Value Type Description System.Int32 | Improve this Doc View Source UPPER Declaration public const int UPPER = 2 Field Value Type Description System.Int32 Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PatternAnalyzer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PatternAnalyzer.html",
    "title": "Class PatternAnalyzer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternAnalyzer Efficient Lucene analyzer/tokenizer that preferably operates on a System.String rather than a System.IO.TextReader , that can flexibly separate text into terms via a regular expression System.Text.RegularExpressions.Regex (with behaviour similar to System.Text.RegularExpressions.Regex.Split(System.String) ), and that combines the functionality of LetterTokenizer , LowerCaseTokenizer , WhitespaceTokenizer , StopFilter into a single efficient multi-purpose class. If you are unsure how exactly a regular expression should look like, consider prototyping by simply trying various expressions on some test texts via System.Text.RegularExpressions.Regex.Split(System.String) . Once you are satisfied, give that regex to PatternAnalyzer . Also see Regular Expression Tutorial . This class can be considerably faster than the \"normal\" Lucene tokenizers. It can also serve as a building block in a compound Lucene TokenFilter chain. For example as in this stemming example: PatternAnalyzer pat = ... TokenStream tokenStream = new SnowballFilter( pat.GetTokenStream(\"content\", \"James is running round in the woods\"), \"English\")); Inheritance System.Object Analyzer PatternAnalyzer Implements System.IDisposable Inherited Members Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.InitReader(String, TextReader) Analyzer.GetPositionIncrementGap(String) Analyzer.GetOffsetGap(String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax [Obsolete(\"(4.0) use the pattern-based analysis in the analysis/pattern package instead.\")] public sealed class PatternAnalyzer : Analyzer, IDisposable Constructors | Improve this Doc View Source PatternAnalyzer(LuceneVersion, Regex, Boolean, CharArraySet) Constructs a new instance with the given parameters. Declaration public PatternAnalyzer(LuceneVersion matchVersion, Regex pattern, bool toLowerCase, CharArraySet stopWords) Parameters Type Name Description LuceneVersion matchVersion currently does nothing System.Text.RegularExpressions.Regex pattern a regular expression delimiting tokens System.Boolean toLowerCase if true returns tokens after applying String.toLowerCase() CharArraySet stopWords if non-null, ignores all tokens that are contained in the given stop set (after previously having applied toLowerCase() if applicable). For example, created via MakeStopSet(LuceneVersion, String[]) and/or WordlistLoader as in WordlistLoader.getWordSet(new File(\"samples/fulltext/stopwords.txt\") or other stop words lists . Fields | Improve this Doc View Source DEFAULT_ANALYZER A lower-casing word analyzer with English stop words (can be shared freely across threads without harm); global per class loader. Declaration public static readonly PatternAnalyzer DEFAULT_ANALYZER Field Value Type Description PatternAnalyzer | Improve this Doc View Source EXTENDED_ANALYZER A lower-casing word analyzer with extended English stop words (can be shared freely across threads without harm); global per class loader. The stop words are borrowed from http://thomas.loc.gov/home/stopwords.html , see http://thomas.loc.gov/home/all.about.inquery.html Declaration public static readonly PatternAnalyzer EXTENDED_ANALYZER Field Value Type Description PatternAnalyzer | Improve this Doc View Source NON_WORD_PATTERN \"\\W+\" ; Divides text at non-letters (NOT Character.isLetter(c)) Declaration public static readonly Regex NON_WORD_PATTERN Field Value Type Description System.Text.RegularExpressions.Regex | Improve this Doc View Source WHITESPACE_PATTERN \"\\s+\" ; Divides text at whitespaces (Character.isWhitespace(c)) Declaration public static readonly Regex WHITESPACE_PATTERN Field Value Type Description System.Text.RegularExpressions.Regex Methods | Improve this Doc View Source CreateComponents(String, TextReader) Creates a token stream that tokenizes all the text in the given SetReader; This implementation forwards to GetTokenStream(String, TextReader) and is less efficient than GetTokenStream(String, TextReader) . Declaration protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader) Parameters Type Name Description System.String fieldName the name of the field to tokenize (currently ignored). System.IO.TextReader reader the reader delivering the text Returns Type Description TokenStreamComponents a new token stream Overrides Analyzer.CreateComponents(String, TextReader) | Improve this Doc View Source CreateComponents(String, TextReader, String) Creates a token stream that tokenizes the given string into token terms (aka words). Declaration public TokenStreamComponents CreateComponents(string fieldName, TextReader reader, string text) Parameters Type Name Description System.String fieldName the name of the field to tokenize (currently ignored). System.IO.TextReader reader reader (e.g. charfilter) of the original text. can be null. System.String text the string to tokenize Returns Type Description TokenStreamComponents a new token stream | Improve this Doc View Source Equals(Object) Indicates whether some other object is \"equal to\" this one. Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other the reference object with which to compare. Returns Type Description System.Boolean true if equal, false otherwise Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for the object. Declaration public override int GetHashCode() Returns Type Description System.Int32 the hash code. Overrides System.Object.GetHashCode() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PatternKeywordMarkerFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PatternKeywordMarkerFilter.html",
    "title": "Class PatternKeywordMarkerFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PatternKeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Each token that matches the provided pattern is marked as a keyword by setting IsKeyword to true . Inheritance System.Object AttributeSource TokenStream TokenFilter KeywordMarkerFilter PatternKeywordMarkerFilter Implements System.IDisposable Inherited Members KeywordMarkerFilter.IncrementToken() TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PatternKeywordMarkerFilter : KeywordMarkerFilter, IDisposable Constructors | Improve this Doc View Source PatternKeywordMarkerFilter(TokenStream, Regex) Create a new PatternKeywordMarkerFilter , that marks the current token as a keyword if the tokens term buffer matches the provided System.Text.RegularExpressions.Regex via the KeywordAttribute . Declaration public PatternKeywordMarkerFilter(TokenStream in, Regex pattern) Parameters Type Name Description TokenStream in TokenStream to filter System.Text.RegularExpressions.Regex pattern the pattern to apply to the incoming term buffer Methods | Improve this Doc View Source IsKeyword() Declaration protected override bool IsKeyword() Returns Type Description System.Boolean Overrides KeywordMarkerFilter.IsKeyword() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper.html",
    "title": "Class PerFieldAnalyzerWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PerFieldAnalyzerWrapper This analyzer is used to facilitate scenarios where different fields Require different analysis techniques. Use the Map argument in PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) to add non-default analyzers for fields. Example usage: IDictionary<string, Analyzer> analyzerPerField = new Dictionary<string, Analyzer>(); analyzerPerField[\"firstname\"] = new KeywordAnalyzer(); analyzerPerField[\"lastname\"] = new KeywordAnalyzer(); PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(version), analyzerPerField); In this example, StandardAnalyzer will be used for all fields except \"firstname\" and \"lastname\", for which KeywordAnalyzer will be used. A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing. Inheritance System.Object Analyzer AnalyzerWrapper PerFieldAnalyzerWrapper Implements System.IDisposable Inherited Members AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) AnalyzerWrapper.WrapReader(String, TextReader) AnalyzerWrapper.CreateComponents(String, TextReader) AnalyzerWrapper.GetPositionIncrementGap(String) AnalyzerWrapper.GetOffsetGap(String) AnalyzerWrapper.InitReader(String, TextReader) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, ReuseStrategy) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>) Analyzer.NewAnonymous(Func<String, TextReader, TokenStreamComponents>, Func<String, TextReader, TextReader>, ReuseStrategy) Analyzer.GetTokenStream(String, TextReader) Analyzer.GetTokenStream(String, String) Analyzer.Strategy Analyzer.Dispose() Analyzer.Dispose(Boolean) Analyzer.GLOBAL_REUSE_STRATEGY Analyzer.PER_FIELD_REUSE_STRATEGY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PerFieldAnalyzerWrapper : AnalyzerWrapper, IDisposable Constructors | Improve this Doc View Source PerFieldAnalyzerWrapper(Analyzer) Constructs with default analyzer. Declaration public PerFieldAnalyzerWrapper(Analyzer defaultAnalyzer) Parameters Type Name Description Analyzer defaultAnalyzer Any fields not specifically defined to use a different analyzer will use the one provided here. | Improve this Doc View Source PerFieldAnalyzerWrapper(Analyzer, IDictionary<String, Analyzer>) Constructs with default analyzer and a map of analyzers to use for specific fields. Declaration public PerFieldAnalyzerWrapper(Analyzer defaultAnalyzer, IDictionary<string, Analyzer> fieldAnalyzers) Parameters Type Name Description Analyzer defaultAnalyzer Any fields not specifically defined to use a different analyzer will use the one provided here. System.Collections.Generic.IDictionary < System.String , Analyzer > fieldAnalyzers a System.Collections.Generic.IDictionary<TKey, TValue> (String field name to the Analyzer) to be used for those fields Methods | Improve this Doc View Source GetWrappedAnalyzer(String) Declaration protected override Analyzer GetWrappedAnalyzer(string fieldName) Parameters Type Name Description System.String fieldName Returns Type Description Analyzer Overrides AnalyzerWrapper.GetWrappedAnalyzer(String) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PrefixAndSuffixAwareTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PrefixAndSuffixAwareTokenFilter.html",
    "title": "Class PrefixAndSuffixAwareTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixAndSuffixAwareTokenFilter Links two PrefixAwareTokenFilter . NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. Inheritance System.Object AttributeSource TokenStream PrefixAndSuffixAwareTokenFilter Implements System.IDisposable Inherited Members TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PrefixAndSuffixAwareTokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source PrefixAndSuffixAwareTokenFilter(TokenStream, TokenStream, TokenStream) Declaration public PrefixAndSuffixAwareTokenFilter(TokenStream prefix, TokenStream input, TokenStream suffix) Parameters Type Name Description TokenStream prefix TokenStream input TokenStream suffix Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source UpdateInputToken(Token, Token) Declaration public virtual Token UpdateInputToken(Token inputToken, Token lastPrefixToken) Parameters Type Name Description Token inputToken Token lastPrefixToken Returns Type Description Token | Improve this Doc View Source UpdateSuffixToken(Token, Token) Declaration public virtual Token UpdateSuffixToken(Token suffixToken, Token lastInputToken) Parameters Type Name Description Token suffixToken Token lastInputToken Returns Type Description Token Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PrefixAwareTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.PrefixAwareTokenFilter.html",
    "title": "Class PrefixAwareTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PrefixAwareTokenFilter Joins two token streams and leaves the last token of the first stream available to be used when updating the token values in the second stream based on that token. The default implementation adds last prefix token end offset to the suffix token start and end offsets. NOTE: This filter might not behave correctly if used with custom IAttribute s, i.e. IAttribute s other than the ones located in Lucene.Net.Analysis.TokenAttributes. Inheritance System.Object AttributeSource TokenStream PrefixAwareTokenFilter Implements System.IDisposable Inherited Members TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PrefixAwareTokenFilter : TokenStream, IDisposable Constructors | Improve this Doc View Source PrefixAwareTokenFilter(TokenStream, TokenStream) Declaration public PrefixAwareTokenFilter(TokenStream prefix, TokenStream suffix) Parameters Type Name Description TokenStream prefix TokenStream suffix Properties | Improve this Doc View Source Prefix Declaration public virtual TokenStream Prefix { get; set; } Property Value Type Description TokenStream | Improve this Doc View Source Suffix Declaration public virtual TokenStream Suffix { get; set; } Property Value Type Description TokenStream Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TokenStream.Dispose(Boolean) | Improve this Doc View Source End() Declaration public override void End() Overrides TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenStream.Reset() | Improve this Doc View Source UpdateSuffixToken(Token, Token) The default implementation adds last prefix token end offset to the suffix token start and end offsets. Declaration public virtual Token UpdateSuffixToken(Token suffixToken, Token lastPrefixToken) Parameters Type Name Description Token suffixToken a token from the suffix stream Token lastPrefixToken the last token from the prefix stream Returns Type Description Token consumer token Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilter.html",
    "title": "Class RemoveDuplicatesTokenFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RemoveDuplicatesTokenFilter A TokenFilter which filters out Token s at the same position and Term text as the previous token in the stream. Inheritance System.Object AttributeSource TokenStream TokenFilter RemoveDuplicatesTokenFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class RemoveDuplicatesTokenFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source RemoveDuplicatesTokenFilter(TokenStream) Creates a new RemoveDuplicatesTokenFilter Declaration public RemoveDuplicatesTokenFilter(TokenStream in) Parameters Type Name Description TokenStream in TokenStream that will be filtered Methods | Improve this Doc View Source IncrementToken() Consumers (i.e., IndexWriter ) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate IAttribute s with the attributes of the next token. The producer must make no assumptions about the attributes after the method has been returned: the caller may arbitrarily change it. If the producer needs to preserve the state for subsequent calls, it can use CaptureState() to create a copy of the current attribute state. this method is called for every token of a document, so an efficient implementation is crucial for good performance. To avoid calls to AddAttribute<T>() and GetAttribute<T>() , references to all IAttribute s that this stream uses should be retrieved during instantiation. To ensure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean false for end of stream; true otherwise Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() This method is called by a consumer before it begins consumption using IncrementToken() . Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh. If you override this method, always call base.Reset() , otherwise some internal state will not be correctly reset (e.g., Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilterFactory.html",
    "title": "Class RemoveDuplicatesTokenFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class RemoveDuplicatesTokenFilterFactory Factory for RemoveDuplicatesTokenFilter . <fieldType name=\"text_rmdup\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.WhitespaceTokenizerFactory\"/> <filter class=\"solr.RemoveDuplicatesTokenFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory RemoveDuplicatesTokenFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public class RemoveDuplicatesTokenFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source RemoveDuplicatesTokenFilterFactory(IDictionary<String, String>) Creates a new RemoveDuplicatesTokenFilterFactory Declaration public RemoveDuplicatesTokenFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.EventTypeEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.EventTypeEnum.html",
    "title": "Enum EventTypeEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum EventTypeEnum Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax [Flags] public enum EventTypeEnum Fields Name Description Added All Basic Changed Cleared Inserted None Removed RemovedAt Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.EqualityComparer-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.EqualityComparer-1.html",
    "title": "Class EqualityComparer<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EqualityComparer<T> Utility class for building default generic equality comparers. Inheritance System.Object EqualityComparer<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public static class EqualityComparer<T> Type Parameters Name Description T Properties | Improve this Doc View Source Default A default generic equality comparer for type T. The procedure is as follows: Declaration public static IEqualityComparer<T> Default { get; } Property Value Type Description System.Collections.Generic.IEqualityComparer <T> The comparer"
  },
  "api/Lucene.Net/Lucene.Net.Store.MergeInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.MergeInfo.html",
    "title": "Class MergeInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MergeInfo A MergeInfo provides information required for a MERGE context. It is used as part of an IOContext in case of MERGE context. Inheritance System.Object MergeInfo Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class MergeInfo Constructors | Improve this Doc View Source MergeInfo(Int32, Int64, Boolean, Int32) Creates a new MergeInfo instance from the values required for a MERGE IOContext context. These values are only estimates and are not the actual values. Declaration public MergeInfo(int totalDocCount, long estimatedMergeBytes, bool isExternal, int mergeMaxNumSegments) Parameters Type Name Description System.Int32 totalDocCount System.Int64 estimatedMergeBytes System.Boolean isExternal System.Int32 mergeMaxNumSegments Properties | Improve this Doc View Source EstimatedMergeBytes Declaration public long EstimatedMergeBytes { get; } Property Value Type Description System.Int64 | Improve this Doc View Source IsExternal Declaration public bool IsExternal { get; } Property Value Type Description System.Boolean | Improve this Doc View Source MergeMaxNumSegments Declaration public int MergeMaxNumSegments { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalDocCount Declaration public int TotalDocCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockVerifyServer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockVerifyServer.html",
    "title": "Class LockVerifyServer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockVerifyServer Simple standalone server that must be running when you use VerifyingLockFactory . This server simply verifies at most one process holds the lock at a time. Run without any args to see usage. Inheritance System.Object LockVerifyServer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockVerifyServer Methods | Improve this Doc View Source Main(String[]) Declaration [STAThread] public static void Main(string[] args) Parameters Type Name Description System.String [] args Extension Methods Number.IsNumber(Object) See Also VerifyingLockFactory LockStressTest"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockStressTest.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockStressTest.html",
    "title": "Class LockStressTest | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockStressTest Simple standalone tool that forever acquires & releases a lock using a specific LockFactory . Run without any args to see usage. Inheritance System.Object LockStressTest Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public class LockStressTest Methods | Improve this Doc View Source Main(String[]) Declaration [STAThread] public static void Main(string[] args) Parameters Type Name Description System.String [] args Extension Methods Number.IsNumber(Object) See Also VerifyingLockFactory LockVerifyServer"
  },
  "api/Lucene.Net/Lucene.Net.Store.LockFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.LockFactory.html",
    "title": "Class LockFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LockFactory Base class for Locking implementation. Directory uses instances of this class to implement locking. Lucene uses NativeFSLockFactory by default for FSDirectory -based index directories. Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together! If you suspect that some LockFactory implementation is not working properly in your environment, you can easily test it by using VerifyingLockFactory , LockVerifyServer and LockStressTest . Inheritance System.Object LockFactory FSLockFactory NoLockFactory SingleInstanceLockFactory VerifyingLockFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class LockFactory Fields | Improve this Doc View Source m_lockPrefix Declaration protected string m_lockPrefix Field Value Type Description System.String Properties | Improve this Doc View Source LockPrefix Gets or Sets the prefix in use for all locks created in this LockFactory . This is normally called once, when a Directory gets this LockFactory instance. However, you can also call this (after this instance is assigned to a Directory ) to override the prefix in use. This is helpful if you're running Lucene on machines that have different mount points for the same shared directory. Declaration public virtual string LockPrefix { get; set; } Property Value Type Description System.String Methods | Improve this Doc View Source ClearLock(String) Attempt to clear (forcefully unlock and remove) the specified lock. Only call this at a time when you are certain this lock is no longer in use. Declaration public abstract void ClearLock(string lockName) Parameters Type Name Description System.String lockName name of the lock to be cleared. | Improve this Doc View Source MakeLock(String) Return a new Lock instance identified by lockName . Declaration public abstract Lock MakeLock(string lockName) Parameters Type Name Description System.String lockName name of the lock to be created. Returns Type Description Lock Extension Methods Number.IsNumber(Object) See Also LockVerifyServer LockStressTest VerifyingLockFactory"
  },
  "api/Lucene.Net/Lucene.Net.Search.TopDocs.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TopDocs.html",
    "title": "Class TopDocs | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TopDocs Represents hits returned by Search(Query, Filter, Int32) and Search(Query, Int32) . Inheritance System.Object TopDocs TopFieldDocs Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TopDocs Constructors | Improve this Doc View Source TopDocs(Int32, ScoreDoc[], Single) Declaration public TopDocs(int totalHits, ScoreDoc[] scoreDocs, float maxScore) Parameters Type Name Description System.Int32 totalHits ScoreDoc [] scoreDocs System.Single maxScore Properties | Improve this Doc View Source MaxScore Returns the maximum score value encountered. Note that in case scores are not tracked, this returns System.Single.NaN . Declaration public virtual float MaxScore { get; set; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs The top hits for the query. Declaration public ScoreDoc[] ScoreDocs { get; set; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits The total number of hits for the query. Declaration public int TotalHits { get; set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Merge(Sort, Int32, TopDocs[]) Returns a new TopDocs , containing topN results across the provided TopDocs , sorting by the specified Sort . Each of the TopDocs must have been sorted by the same Sort , and sort field values must have been filled (ie, fillFields=true must be passed to Create(Sort, Int32, Boolean, Boolean, Boolean, Boolean) . Pass sort =null to merge sort by score descending. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public static TopDocs Merge(Sort sort, int topN, TopDocs[] shardHits) Parameters Type Name Description Sort sort System.Int32 topN TopDocs [] shardHits Returns Type Description TopDocs | Improve this Doc View Source Merge(Sort, Int32, Int32, TopDocs[]) Same as Merge(Sort, Int32, TopDocs[]) but also slices the result at the same time based on the provided start and size. The return TopDocs will always have a scoreDocs with length of at most Count . Declaration public static TopDocs Merge(Sort sort, int start, int size, TopDocs[] shardHits) Parameters Type Name Description Sort sort System.Int32 start System.Int32 size TopDocs [] shardHits Returns Type Description TopDocs Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermStatistics.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermStatistics.html",
    "title": "Class TermStatistics | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermStatistics Contains statistics for a specific term This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TermStatistics Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermStatistics Constructors | Improve this Doc View Source TermStatistics(BytesRef, Int64, Int64) Sole constructor. Declaration public TermStatistics(BytesRef term, long docFreq, long totalTermFreq) Parameters Type Name Description BytesRef term System.Int64 docFreq System.Int64 totalTermFreq Properties | Improve this Doc View Source DocFreq Returns the number of documents this term occurs in Declaration public long DocFreq { get; } Property Value Type Description System.Int64 See Also DocFreq | Improve this Doc View Source Term Returns the term text Declaration public BytesRef Term { get; } Property Value Type Description BytesRef | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term Declaration public long TotalTermFreq { get; } Property Value Type Description System.Int64 See Also TotalTermFreq Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.html",
    "title": "Class Normalization | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Normalization This class acts as the base class for the implementations of the term frequency normalization methods in the DFR framework. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization Normalization.NoNormalization NormalizationH1 NormalizationH2 NormalizationH3 NormalizationZ Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class Normalization Constructors | Improve this Doc View Source Normalization() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration public Normalization() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Returns an explanation for the normalized term frequency. The default normalization methods use the field length of the document and the average field length to compute the normalized term frequency. This method provides a generic explanation for such methods. Subclasses that use other statistics must override this method. Declaration public virtual Explanation Explain(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description Explanation | Improve this Doc View Source Tfn(BasicStats, Single, Single) Returns the normalized term frequency. Declaration public abstract float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len the field length. Returns Type Description System.Single | Improve this Doc View Source ToString() Subclasses must override this method to return the code of the normalization formula. Refer to the original paper for the list. Declaration public abstract override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object) See Also DFRSimilarity"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.ICollectionModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.ICollectionModel.html",
    "title": "Interface LMSimilarity.ICollectionModel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface LMSimilarity.ICollectionModel A strategy for computing the collection language model. Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public interface ICollectionModel Methods | Improve this Doc View Source ComputeProbability(BasicStats) Computes the probability p(w|C) according to the language model strategy for the current term. Declaration float ComputeProbability(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source GetName() The name of the collection model strategy. Declaration string GetName() Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Rescorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Rescorer.html",
    "title": "Class Rescorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Rescorer Re-scores the topN results ( TopDocs ) from an original query. See QueryRescorer for an actual implementation. Typically, you run a low-cost first-pass query across the entire index, collecting the top few hundred hits perhaps, and then use this class to mix in a more costly second pass scoring. See Rescore(IndexSearcher, TopDocs, Query, Double, Int32) for a simple static method to call to rescore using a 2nd pass Query . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Rescorer QueryRescorer SortRescorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class Rescorer Methods | Improve this Doc View Source Explain(IndexSearcher, Explanation, Int32) Explains how the score for the specified document was computed. Declaration public abstract Explanation Explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) Parameters Type Name Description IndexSearcher searcher Explanation firstPassExplanation System.Int32 docID Returns Type Description Explanation | Improve this Doc View Source Rescore(IndexSearcher, TopDocs, Int32) Rescore an initial first-pass TopDocs . Declaration public abstract TopDocs Rescore(IndexSearcher searcher, TopDocs firstPassTopDocs, int topN) Parameters Type Name Description IndexSearcher searcher IndexSearcher used to produce the first pass topDocs TopDocs firstPassTopDocs Hits from the first pass search. It's very important that these hits were produced by the provided searcher; otherwise the doc IDs will not match! System.Int32 topN How many re-scored hits to return Returns Type Description TopDocs Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.html",
    "title": "Class ReferenceManager | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReferenceManager LUCENENET specific class used to provide static access to ReferenceManager.IRefreshListener without having to specifiy the generic closing type of ReferenceManager<G> . Inheritance System.Object ReferenceManager Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class ReferenceManager"
  },
  "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.IRefreshListener.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ReferenceManager.IRefreshListener.html",
    "title": "Interface ReferenceManager.IRefreshListener | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ReferenceManager.IRefreshListener Use to receive notification when a refresh has finished. See AddListener(ReferenceManager.IRefreshListener) . Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public interface IRefreshListener Methods | Improve this Doc View Source AfterRefresh(Boolean) Called after the attempted refresh; if the refresh did open a new reference then didRefresh will be true and Acquire() is guaranteed to return the new reference. Declaration void AfterRefresh(bool didRefresh) Parameters Type Name Description System.Boolean didRefresh | Improve this Doc View Source BeforeRefresh() Called right before a refresh attempt starts. Declaration void BeforeRefresh() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Collector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Collector.html",
    "title": "Class Collector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Collector LUCENENET specific class used to hold the NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) static method. Inheritance System.Object Collector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public static class Collector Methods | Improve this Doc View Source NewAnonymous(Action<Scorer>, Action<Int32>, Action<AtomicReaderContext>, Func<Boolean>) Creates a new instance with the ability to specify the body of the SetScorer(Scorer) method through the setScorer parameter, the body of the Collect(Int32) method through the collect parameter, the body of the SetNextReader(AtomicReaderContext) method through the setNextReader parameter, and the body of the AcceptsDocsOutOfOrder property through the acceptsDocsOutOfOrder parameter. Simple example: IndexSearcher searcher = new IndexSearcher(indexReader); OpenBitSet bits = new OpenBitSet(indexReader.MaxDoc); int docBase; searcher.Search(query, Collector.NewAnonymous(setScorer: (scorer) => { // ignore scorer }, collect: (doc) => { bits.Set(doc + docBase); }, setNextReader: (context) => { docBase = context.DocBase; }, acceptsDocsOutOfOrder: () => { return true; }) ); Declaration public static ICollector NewAnonymous(Action<Scorer> setScorer, Action<int> collect, Action<AtomicReaderContext> setNextReader, Func<bool> acceptsDocsOutOfOrder) Parameters Type Name Description System.Action < Scorer > setScorer A delegate method that represents (is called by) the SetScorer(Scorer) method. It accepts a Scorer scorer and has no return value. System.Action < System.Int32 > collect A delegate method that represents (is called by) the Collect(Int32) method. It accepts an System.Int32 doc and has no return value. System.Action < AtomicReaderContext > setNextReader A delegate method that represents (is called by) the SetNextReader(AtomicReaderContext) method. It accepts a AtomicReaderContext context and has no return value. System.Func < System.Boolean > acceptsDocsOutOfOrder A delegate method that represents (is called by) the AcceptsDocsOutOfOrder property. It returns a System.Boolean value. Returns Type Description ICollector A new Lucene.Net.Search.Collector.AnonymousCollector instance."
  },
  "api/Lucene.Net/Lucene.Net.Misc.TermStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Misc.TermStats.html",
    "title": "Class TermStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermStats Holder for a term along with its statistics ( DocFreq and TotalTermFreq ). Inheritance System.Object TermStats Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public sealed class TermStats Properties | Improve this Doc View Source DocFreq Declaration public int DocFreq { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Declaration public string Field { get; set; } Property Value Type Description System.String | Improve this Doc View Source TotalTermFreq Declaration public long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Misc.IndexMergeTool.html": {
    "href": "api/Lucene.Net/Lucene.Net.Misc.IndexMergeTool.html",
    "title": "Class IndexMergeTool | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexMergeTool Merges indices specified on the command line into the index specified as the first command line argument. Inheritance System.Object IndexMergeTool Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Misc Assembly : Lucene.Net.Misc.dll Syntax public class IndexMergeTool Methods | Improve this Doc View Source Main(String[]) Declaration public static void Main(string[] args) Parameters Type Name Description System.String [] args Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentWriteState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentWriteState.html",
    "title": "Class SegmentWriteState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentWriteState Holder class for common parameters used during write. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentWriteState Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentWriteState Constructors | Improve this Doc View Source SegmentWriteState(SegmentWriteState, String) Create a shallow copy of SegmentWriteState with a new segment suffix. Declaration public SegmentWriteState(SegmentWriteState state, string segmentSuffix) Parameters Type Name Description SegmentWriteState state System.String segmentSuffix | Improve this Doc View Source SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext) Sole constructor. Declaration public SegmentWriteState(InfoStream infoStream, Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, int termIndexInterval, BufferedUpdates segUpdates, IOContext context) Parameters Type Name Description InfoStream infoStream Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos System.Int32 termIndexInterval BufferedUpdates segUpdates IOContext context | Improve this Doc View Source SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext, String) Constructor which takes segment suffix. Declaration public SegmentWriteState(InfoStream infoStream, Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, int termIndexInterval, BufferedUpdates segUpdates, IOContext context, string segmentSuffix) Parameters Type Name Description InfoStream infoStream Directory directory SegmentInfo segmentInfo FieldInfos fieldInfos System.Int32 termIndexInterval BufferedUpdates segUpdates IOContext context System.String segmentSuffix See Also SegmentWriteState(InfoStream, Directory, SegmentInfo, FieldInfos, Int32, BufferedUpdates, IOContext) Properties | Improve this Doc View Source Context IOContext for all writes; you should pass this to CreateOutput(String, IOContext) . Declaration public IOContext Context { get; } Property Value Type Description IOContext | Improve this Doc View Source DelCountOnFlush Number of deleted documents set while flushing the segment. Declaration public int DelCountOnFlush { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Directory Directory where this segment will be written to. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos FieldInfos describing all fields in this segment. Declaration public FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source InfoStream InfoStream used for debugging messages. Declaration public InfoStream InfoStream { get; } Property Value Type Description InfoStream | Improve this Doc View Source LiveDocs IMutableBits recording live documents; this is only set if there is one or more deleted documents. Declaration public IMutableBits LiveDocs { get; set; } Property Value Type Description IMutableBits | Improve this Doc View Source SegmentInfo SegmentInfo describing this segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source SegmentSuffix Unique suffix for any postings files written for this segment. PerFieldPostingsFormat sets this for each of the postings formats it wraps. If you create a new PostingsFormat then any files you write/read must be derived using this suffix (use SegmentFileName(String, String, String) ). Declaration public string SegmentSuffix { get; } Property Value Type Description System.String | Improve this Doc View Source SegUpdates Deletes and updates to apply while we are flushing the segment. A Term is enrolled in here if it was deleted/updated at one point, and it's mapped to the docIDUpto, meaning any docID < docIDUpto containing this term should be deleted/updated. Declaration public BufferedUpdates SegUpdates { get; } Property Value Type Description BufferedUpdates | Improve this Doc View Source TermIndexInterval Expert: The fraction of terms in the \"dictionary\" which should be stored in RAM. Smaller values use more memory, but make searching slightly faster, while larger values use less memory and make searching slightly slower. Searching is typically not dominated by dictionary lookup, so tweaking this is rarely useful. Declaration public int TermIndexInterval { get; set; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SegmentReadState.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SegmentReadState.html",
    "title": "Class SegmentReadState | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SegmentReadState Holder class for common parameters used during read. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SegmentReadState Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class SegmentReadState Constructors | Improve this Doc View Source SegmentReadState(SegmentReadState, String) Create a SegmentReadState . Declaration public SegmentReadState(SegmentReadState other, string newSegmentSuffix) Parameters Type Name Description SegmentReadState other System.String newSegmentSuffix | Improve this Doc View Source SegmentReadState(Directory, SegmentInfo, FieldInfos, IOContext, Int32) Create a SegmentReadState . Declaration public SegmentReadState(Directory dir, SegmentInfo info, FieldInfos fieldInfos, IOContext context, int termsIndexDivisor) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fieldInfos IOContext context System.Int32 termsIndexDivisor | Improve this Doc View Source SegmentReadState(Directory, SegmentInfo, FieldInfos, IOContext, Int32, String) Create a SegmentReadState . Declaration public SegmentReadState(Directory dir, SegmentInfo info, FieldInfos fieldInfos, IOContext context, int termsIndexDivisor, string segmentSuffix) Parameters Type Name Description Directory dir SegmentInfo info FieldInfos fieldInfos IOContext context System.Int32 termsIndexDivisor System.String segmentSuffix Properties | Improve this Doc View Source Context IOContext to pass to OpenInput(String, IOContext) . Declaration public IOContext Context { get; } Property Value Type Description IOContext | Improve this Doc View Source Directory Directory where this segment is read from. Declaration public Directory Directory { get; } Property Value Type Description Directory | Improve this Doc View Source FieldInfos FieldInfos describing all fields in this segment. Declaration public FieldInfos FieldInfos { get; } Property Value Type Description FieldInfos | Improve this Doc View Source SegmentInfo SegmentInfo describing this segment. Declaration public SegmentInfo SegmentInfo { get; } Property Value Type Description SegmentInfo | Improve this Doc View Source SegmentSuffix Unique suffix for any postings files read for this segment. PerFieldPostingsFormat sets this for each of the postings formats it wraps. If you create a new PostingsFormat then any files you write/read must be derived using this suffix (use SegmentFileName(String, String, String) ). Declaration public string SegmentSuffix { get; } Property Value Type Description System.String | Improve this Doc View Source TermsIndexDivisor The termInfosIndexDivisor to use, if appropriate (not all PostingsFormat s support it; in particular the current default does not). NOTE: if this is < 0, that means \"defer terms index load until needed\". But if the codec must load the terms index on init (preflex is the only once currently that must do so), then it should negate this value to get the app's terms divisor Declaration public int TermsIndexDivisor { get; set; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumWithSlice.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumWithSlice.html",
    "title": "Class MultiTermsEnum.TermsEnumWithSlice | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermsEnum.TermsEnumWithSlice Inheritance System.Object MultiTermsEnum.TermsEnumWithSlice Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class TermsEnumWithSlice Constructors | Improve this Doc View Source TermsEnumWithSlice(Int32, ReaderSlice) Declaration public TermsEnumWithSlice(int index, ReaderSlice subSlice) Parameters Type Name Description System.Int32 index ReaderSlice subSlice Properties | Improve this Doc View Source Current Declaration public BytesRef Current { get; set; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Reset(TermsEnum, BytesRef) Declaration public void Reset(TermsEnum terms, BytesRef term) Parameters Type Name Description TermsEnum terms BytesRef term | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumIndex.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.MultiTermsEnum.TermsEnumIndex.html",
    "title": "Class MultiTermsEnum.TermsEnumIndex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiTermsEnum.TermsEnumIndex Inheritance System.Object MultiTermsEnum.TermsEnumIndex Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class TermsEnumIndex Constructors | Improve this Doc View Source TermsEnumIndex(TermsEnum, Int32) Declaration public TermsEnumIndex(TermsEnum termsEnum, int subIndex) Parameters Type Name Description TermsEnum termsEnum System.Int32 subIndex Fields | Improve this Doc View Source EMPTY_ARRAY Declaration public static readonly MultiTermsEnum.TermsEnumIndex[] EMPTY_ARRAY Field Value Type Description MultiTermsEnum.TermsEnumIndex [] Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.LiveIndexWriterConfig.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.LiveIndexWriterConfig.html",
    "title": "Class LiveIndexWriterConfig | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LiveIndexWriterConfig Holds all the configuration used by IndexWriter with few setters for settings that can be changed on an IndexWriter instance \"live\". @since 4.0 Inheritance System.Object LiveIndexWriterConfig IndexWriterConfig Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class LiveIndexWriterConfig Properties | Improve this Doc View Source Analyzer Gets the default analyzer to use for indexing documents. Declaration public virtual Analyzer Analyzer { get; } Property Value Type Description Analyzer | Improve this Doc View Source CheckIntegrityAtMerge Gets or sets if IndexWriter should call CheckIntegrity() on existing segments before merging them into a new one. Use true to enable this safety check, which can help reduce the risk of propagating index corruption from older segments into new ones, at the expense of slower merging. Declaration public virtual bool CheckIntegrityAtMerge { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source Codec Returns the current Codec . Declaration public virtual Codec Codec { get; } Property Value Type Description Codec | Improve this Doc View Source IndexCommit Gets the IndexCommit as specified in IndexCommit setter or the default, null which specifies to open the latest index commit point. Declaration public virtual IndexCommit IndexCommit { get; } Property Value Type Description IndexCommit | Improve this Doc View Source IndexDeletionPolicy Gets the IndexDeletionPolicy specified in IndexDeletionPolicy setter or the default KeepOnlyLastCommitDeletionPolicy Declaration public virtual IndexDeletionPolicy IndexDeletionPolicy { get; } Property Value Type Description IndexDeletionPolicy | Improve this Doc View Source InfoStream Returns InfoStream used for debugging. Declaration public virtual InfoStream InfoStream { get; } Property Value Type Description InfoStream See Also SetInfoStream(InfoStream) | Improve this Doc View Source MaxBufferedDeleteTerms Gets or sets a value that determines the maximum number of delete-by-term operations that will be buffered before both the buffered in-memory delete terms and queries are applied and flushed. Disabled by default (writer flushes by RAM usage). NOTE: this setting won't trigger a segment flush. Takes effect immediately, but only the next time a document is added, updated or deleted. Also, if you only delete-by-query, this setting has no effect, i.e. delete queries are buffered until the next segment is flushed. Declaration public virtual int MaxBufferedDeleteTerms { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if maxBufferedDeleteTerms is enabled but smaller than 1 See Also RAMBufferSizeMB | Improve this Doc View Source MaxBufferedDocs Gets or sets a value that determines the minimal number of documents required before the buffered in-memory documents are flushed as a new Segment. Large values generally give faster indexing. When this is set, the writer will flush every maxBufferedDocs added documents. Pass in DISABLE_AUTO_FLUSH to prevent triggering a flush due to number of buffered documents. Note that if flushing by RAM usage is also enabled, then the flush will be triggered by whichever comes first. Disabled by default (writer flushes by RAM usage). Takes effect immediately, but only the next time a document is added, updated or deleted. Declaration public virtual int MaxBufferedDocs { get; set; } Property Value Type Description System.Int32 Exceptions Type Condition System.ArgumentException if maxBufferedDocs is enabled but smaller than 2, or it disables maxBufferedDocs when ramBufferSizeMB is already disabled See Also RAMBufferSizeMB | Improve this Doc View Source MaxThreadStates Returns the max number of simultaneous threads that may be indexing documents at once in IndexWriter . Declaration public virtual int MaxThreadStates { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MergedSegmentWarmer Gets or sets the merged segment warmer. See IndexWriter.IndexReaderWarmer . Takes effect on the next merge. Declaration public virtual IndexWriter.IndexReaderWarmer MergedSegmentWarmer { get; set; } Property Value Type Description IndexWriter.IndexReaderWarmer | Improve this Doc View Source MergePolicy Returns the current MergePolicy in use by this writer. Declaration public virtual MergePolicy MergePolicy { get; } Property Value Type Description MergePolicy See Also MergePolicy | Improve this Doc View Source MergeScheduler Returns the IMergeScheduler that was set by MergeScheduler setter. Declaration public virtual IMergeScheduler MergeScheduler { get; } Property Value Type Description IMergeScheduler | Improve this Doc View Source OpenMode Gets the OpenMode set by OpenMode setter. Declaration public virtual OpenMode OpenMode { get; } Property Value Type Description OpenMode | Improve this Doc View Source RAMBufferSizeMB Gets or sets a value that determines the amount of RAM that may be used for buffering added documents and deletions before they are flushed to the Directory . Generally for faster indexing performance it's best to flush by RAM usage instead of document count and use as large a RAM buffer as you can. When this is set, the writer will flush whenever buffered documents and deletions use this much RAM. Pass in DISABLE_AUTO_FLUSH to prevent triggering a flush due to RAM usage. Note that if flushing by document count is also enabled, then the flush will be triggered by whichever comes first. The maximum RAM limit is inherently determined by the runtime's available memory. Yet, an IndexWriter session can consume a significantly larger amount of memory than the given RAM limit since this limit is just an indicator when to flush memory resident documents to the Directory . Flushes are likely happen concurrently while other threads adding documents to the writer. For application stability the available memory in the runtime should be significantly larger than the RAM buffer used for indexing. NOTE : the account of RAM usage for pending deletions is only approximate. Specifically, if you delete by Query , Lucene currently has no way to measure the RAM usage of individual Queries so the accounting will under-estimate and you should compensate by either calling Commit() periodically yourself, or by setting MaxBufferedDeleteTerms to flush and apply buffered deletes by count instead of RAM usage (for each buffered delete Query a constant number of bytes is used to estimate RAM usage). Note that enabling MaxBufferedDeleteTerms will not trigger any segment flushes. NOTE : It's not guaranteed that all memory resident documents are flushed once this limit is exceeded. Depending on the configured Lucene.Net.Index.LiveIndexWriterConfig.FlushPolicy only a subset of the buffered documents are flushed and therefore only parts of the RAM buffer is released. The default value is DEFAULT_RAM_BUFFER_SIZE_MB . Takes effect immediately, but only the next time a document is added, updated or deleted. Declaration public virtual double RAMBufferSizeMB { get; set; } Property Value Type Description System.Double Exceptions Type Condition System.ArgumentException if ramBufferSizeMB is enabled but non-positive, or it disables ramBufferSizeMB when maxBufferedDocs is already disabled See Also RAMPerThreadHardLimitMB | Improve this Doc View Source RAMPerThreadHardLimitMB Returns the max amount of memory each Lucene.Net.Index.DocumentsWriterPerThread can consume until forcefully flushed. Declaration public virtual int RAMPerThreadHardLimitMB { get; } Property Value Type Description System.Int32 See Also RAMPerThreadHardLimitMB | Improve this Doc View Source ReaderTermsIndexDivisor Gets or sets the termsIndexDivisor passed to any readers that IndexWriter opens, for example when applying deletes or creating a near-real-time reader in Open(IndexWriter, Boolean) . If you pass -1, the terms index won't be loaded by the readers. This is only useful in advanced situations when you will only .Next() through all terms; attempts to seek will hit an exception. Takes effect immediately, but only applies to readers opened after this call NOTE: divisor settings > 1 do not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for terms indexes that can efficiently re-sample terms at load time. Declaration public virtual int ReaderTermsIndexDivisor { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Similarity Expert: returns the Similarity implementation used by this IndexWriter . Declaration public virtual Similarity Similarity { get; } Property Value Type Description Similarity | Improve this Doc View Source TermIndexInterval Expert: Gets or sets the interval between indexed terms. Large values cause less memory to be used by IndexReader , but slow random-access to terms. Small values cause more memory to be used by an IndexReader , and speed random-access to terms. This parameter determines the amount of computation required per query term, regardless of the number of documents that contain that term. In particular, it is the maximum number of other terms that must be scanned before a term is located and its frequency and position information may be processed. In a large index with user-entered query terms, query processing time is likely to be dominated not by term lookup but rather by the processing of frequency and positional data. In a small index or when many uncommon query terms are generated (e.g., by wildcard queries) term lookup may become a dominant cost. In particular, numUniqueTerms/interval terms are read into memory by an IndexReader , and, on average, interval/2 terms must be scanned for each random term access. Takes effect immediately, but only applies to newly flushed/merged segments. NOTE: this parameter does not apply to all PostingsFormat implementations, including the default one in this release. It only makes sense for term indexes that are implemented as a fixed gap between terms. For example, Lucene41PostingsFormat implements the term index instead based upon how terms share prefixes. To configure its parameters (the minimum and maximum size for a block), you would instead use Lucene41PostingsFormat(Int32, Int32) . which can also be configured on a per-field basis: public class MyLucene45Codec : Lucene45Codec { //customize Lucene41PostingsFormat, passing minBlockSize=50, maxBlockSize=100 private readonly PostingsFormat tweakedPostings = new Lucene41PostingsFormat(50, 100); public override PostingsFormat GetPostingsFormatForField(string field) { if (field.Equals(\"fieldWithTonsOfTerms\", StringComparison.Ordinal)) return tweakedPostings; else return base.GetPostingsFormatForField(field); } } ... iwc.Codec = new MyLucene45Codec(); Note that other implementations may have their own parameters, or no parameters at all. Declaration public virtual int TermIndexInterval { get; set; } Property Value Type Description System.Int32 See Also DEFAULT_TERM_INDEX_INTERVAL | Improve this Doc View Source UseCompoundFile Gets or sets if the IndexWriter should pack newly written segments in a compound file. Default is true . Use false for batch indexing with very large RAM buffer settings. Note: To control compound file usage during segment merges see NoCFSRatio and MaxCFSSegmentSizeMB . This setting only applies to newly created segments. Declaration public virtual bool UseCompoundFile { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source UseReaderPooling Returns true if IndexWriter should pool readers even if Open(IndexWriter, Boolean) has not been called. Declaration public virtual bool UseReaderPooling { get; } Property Value Type Description System.Boolean | Improve this Doc View Source WriteLockTimeout Returns allowed timeout when acquiring the write lock. Declaration public virtual long WriteLockTimeout { get; } Property Value Type Description System.Int64 See Also WriteLockTimeout Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods IndexWriterConfigExtensions.SetTermIndexInterval(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) IndexWriterConfigExtensions.SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) IndexWriterConfigExtensions.SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) IndexWriterConfigExtensions.SetUseCompoundFile(LiveIndexWriterConfig, Boolean) IndexWriterConfigExtensions.SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.SubReaderWrapper.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.FilterDirectoryReader.SubReaderWrapper.html",
    "title": "Class FilterDirectoryReader.SubReaderWrapper | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class FilterDirectoryReader.SubReaderWrapper Factory class passed to FilterDirectoryReader constructor that allows subclasses to wrap the filtered DirectoryReader 's subreaders. You can use this to, e.g., wrap the subreaders with specialized FilterAtomicReader implementations. Inheritance System.Object FilterDirectoryReader.SubReaderWrapper FilterDirectoryReader.StandardReaderWrapper Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class SubReaderWrapper Constructors | Improve this Doc View Source SubReaderWrapper() Constructor Declaration public SubReaderWrapper() Methods | Improve this Doc View Source Wrap(AtomicReader) Wrap one of the parent DirectoryReader 's subreaders Declaration public abstract AtomicReader Wrap(AtomicReader reader) Parameters Type Name Description AtomicReader reader the subreader to wrap Returns Type Description AtomicReader a wrapped/filtered AtomicReader Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesType.html",
    "title": "Enum DocValuesType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DocValuesType DocValues types. Note that DocValues is strongly typed, so a field cannot have different types across different documents. Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum DocValuesType Fields Name Description BINARY A per-document byte[] . Values may be larger than 32766 bytes, but different codecs may enforce their own limits. NONE No doc values type will be used. NOTE: This is the same as setting to null in Lucene NUMERIC A per-document numeric type SORTED A pre-sorted byte[] . Fields with this type only store distinct byte values and store an additional offset pointer per document to dereference the shared byte[]. The stored byte[] is presorted and allows access via document id, ordinal and by-value. Values must be <= 32766 bytes. SORTED_SET A pre-sorted ISet<byte[]>. Fields with this type only store distinct byte values and store additional offset pointers per document to dereference the shared byte[] s. The stored byte[] is presorted and allows access via document id, ordinal and by-value. Values must be <= 32766 bytes. Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValuesFieldUpdatesType.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValuesFieldUpdatesType.html",
    "title": "Enum DocValuesFieldUpdatesType | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum DocValuesFieldUpdatesType Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public enum DocValuesFieldUpdatesType Fields Name Description BINARY NUMERIC Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocValues.html",
    "title": "Class DocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocValues This class contains utility methods and constants for DocValues Inheritance System.Object DocValues Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public sealed class DocValues Fields | Improve this Doc View Source EMPTY_BINARY An empty BinaryDocValues which returns EMPTY_BYTES for every document Declaration public static readonly BinaryDocValues EMPTY_BINARY Field Value Type Description BinaryDocValues | Improve this Doc View Source EMPTY_NUMERIC An empty NumericDocValues which returns zero for every document Declaration public static readonly NumericDocValues EMPTY_NUMERIC Field Value Type Description NumericDocValues | Improve this Doc View Source EMPTY_SORTED An empty SortedDocValues which returns EMPTY_BYTES for every document Declaration public static readonly SortedDocValues EMPTY_SORTED Field Value Type Description SortedDocValues | Improve this Doc View Source EMPTY_SORTED_SET An empty SortedDocValues which returns NO_MORE_ORDS for every document Declaration public static readonly SortedSetDocValues EMPTY_SORTED_SET Field Value Type Description SortedSetDocValues Methods | Improve this Doc View Source DocsWithValue(SortedDocValues, Int32) Returns a IBits representing all documents from dv that have a value. Declaration public static IBits DocsWithValue(SortedDocValues dv, int maxDoc) Parameters Type Name Description SortedDocValues dv System.Int32 maxDoc Returns Type Description IBits | Improve this Doc View Source DocsWithValue(SortedSetDocValues, Int32) Returns a IBits representing all documents from dv that have a value. Declaration public static IBits DocsWithValue(SortedSetDocValues dv, int maxDoc) Parameters Type Name Description SortedSetDocValues dv System.Int32 maxDoc Returns Type Description IBits | Improve this Doc View Source Singleton(SortedDocValues) Returns a multi-valued view over the provided SortedDocValues Declaration public static SortedSetDocValues Singleton(SortedDocValues dv) Parameters Type Name Description SortedDocValues dv Returns Type Description SortedSetDocValues | Improve this Doc View Source UnwrapSingleton(SortedSetDocValues) Returns a single-valued view of the SortedSetDocValues , if it was previously wrapped with Singleton(SortedDocValues) , or null . Declaration public static SortedDocValues UnwrapSingleton(SortedSetDocValues dv) Parameters Type Name Description SortedSetDocValues dv Returns Type Description SortedDocValues Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.DocTermOrds.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.DocTermOrds.html",
    "title": "Class DocTermOrds | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocTermOrds This class enables fast access to multiple term ords for a specified field across all docIDs. Like IFieldCache , it uninverts the index and holds a packed data structure in RAM to enable fast access. Unlike IFieldCache , it can handle multi-valued fields, and, it does not hold the term bytes in RAM. Rather, you must obtain a TermsEnum from the GetOrdTermsEnum(AtomicReader) method, and then seek-by-ord to get the term's bytes. While normally term ords are type System.Int64 , in this API they are System.Int32 as the internal representation here cannot address more than MAX_INT32 unique terms. Also, typically this class is used on fields with relatively few unique terms vs the number of documents. In addition, there is an internal limit (16 MB) on how many bytes each chunk of documents may consume. If you trip this limit you'll hit an System.InvalidOperationException . Deleted documents are skipped during uninversion, and if you look them up you'll get 0 ords. The returned per-document ords do not retain their original order in the document. Instead they are returned in sorted (by ord, ie term's BytesRef comparer) order. They are also de-dup'd (ie if doc has same term more than once in this field, you'll only get that ord back once). This class tests whether the provided reader is able to retrieve terms by ord (ie, it's single segment, and it uses an ord-capable terms index). If not, this class will create its own term index internally, allowing to create a wrapped TermsEnum that can handle ord. The GetOrdTermsEnum(AtomicReader) method then provides this wrapped enum, if necessary. The RAM consumption of this class can be high! This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DocTermOrds Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class DocTermOrds Remarks Final form of the un-inverted field: Each document points to a list of term numbers that are contained in that document. Term numbers are in sorted order, and are encoded as variable-length deltas from the previous term number. Real term numbers start at 2 since 0 and 1 are reserved. A term number of 0 signals the end of the termNumber list. There is a single int[maxDoc()] which either contains a pointer into a byte[] for the termNumber lists, or directly contains the termNumber list if it fits in the 4 bytes of an integer. If the first byte in the integer is 1, the next 3 bytes are a pointer into a byte[] where the termNumber list starts. There are actually 256 byte arrays, to compensate for the fact that the pointers into the byte arrays are only 3 bytes long. The correct byte array for a document is a function of it's id. To save space and speed up faceting, any term that matches enough documents will not be un-inverted... it will be skipped while building the un-inverted field structure, and will use a set intersection method during faceting. To further save memory, the terms (the actual string values) are not all stored in memory, but a TermIndex is used to convert term numbers to term values only for the terms needed after faceting has completed. Only every 128th term value is stored, along with it's corresponding term number, and this is used as an index to find the closest term and iterate until the desired number is hit (very much like Lucene's own internal term index). Constructors | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String) Inverts all terms Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef) Inverts only terms starting w/ prefix Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef, Int32) Inverts only terms starting w/ prefix, and only terms whose docFreq (not taking deletions into account) is <= maxTermDocFreq Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix, int maxTermDocFreq) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix System.Int32 maxTermDocFreq | Improve this Doc View Source DocTermOrds(AtomicReader, IBits, String, BytesRef, Int32, Int32) Inverts only terms starting w/ prefix, and only terms whose docFreq (not taking deletions into account) is <= maxTermDocFreq , with a custom indexing interval (default is every 128nd term). Declaration public DocTermOrds(AtomicReader reader, IBits liveDocs, string field, BytesRef termPrefix, int maxTermDocFreq, int indexIntervalBits) Parameters Type Name Description AtomicReader reader IBits liveDocs System.String field BytesRef termPrefix System.Int32 maxTermDocFreq System.Int32 indexIntervalBits | Improve this Doc View Source DocTermOrds(String, Int32, Int32) Subclass inits w/ this, but be sure you then call uninvert, only once Declaration protected DocTermOrds(string field, int maxTermDocFreq, int indexIntervalBits) Parameters Type Name Description System.String field System.Int32 maxTermDocFreq System.Int32 indexIntervalBits Fields | Improve this Doc View Source DEFAULT_INDEX_INTERVAL_BITS Every 128th term is indexed, by default. Declaration public static readonly int DEFAULT_INDEX_INTERVAL_BITS Field Value Type Description System.Int32 | Improve this Doc View Source m_docsEnum Used while uninverting. Declaration protected DocsEnum m_docsEnum Field Value Type Description DocsEnum | Improve this Doc View Source m_field Field we are uninverting. Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_index Holds the per-document ords or a pointer to the ords. Declaration protected int[] m_index Field Value Type Description System.Int32 [] | Improve this Doc View Source m_indexedTermsArray Holds the indexed (by default every 128th) terms. Declaration protected BytesRef[] m_indexedTermsArray Field Value Type Description BytesRef [] | Improve this Doc View Source m_maxTermDocFreq Don't uninvert terms that exceed this count. Declaration protected readonly int m_maxTermDocFreq Field Value Type Description System.Int32 | Improve this Doc View Source m_numTermsInField Number of terms in the field. Declaration protected int m_numTermsInField Field Value Type Description System.Int32 | Improve this Doc View Source m_ordBase Ordinal of the first term in the field, or 0 if the PostingsFormat does not implement Ord . Declaration protected int m_ordBase Field Value Type Description System.Int32 | Improve this Doc View Source m_phase1_time Time for phase1 of the uninvert process. Declaration protected int m_phase1_time Field Value Type Description System.Int32 | Improve this Doc View Source m_prefix If non-null, only terms matching this prefix were indexed. Declaration protected BytesRef m_prefix Field Value Type Description BytesRef | Improve this Doc View Source m_sizeOfIndexedStrings Total bytes (sum of term lengths) for all indexed terms. Declaration protected long m_sizeOfIndexedStrings Field Value Type Description System.Int64 | Improve this Doc View Source m_termInstances Total number of references to term numbers. Declaration protected long m_termInstances Field Value Type Description System.Int64 | Improve this Doc View Source m_tnums Holds term ords for documents. Declaration [CLSCompliant(false)] protected sbyte[][] m_tnums Field Value Type Description System.SByte [][] | Improve this Doc View Source m_total_time Total time to uninvert the field. Declaration protected int m_total_time Field Value Type Description System.Int32 Properties | Improve this Doc View Source IsEmpty Returns true if no terms were indexed. Declaration public virtual bool IsEmpty { get; } Property Value Type Description System.Boolean | Improve this Doc View Source NumTerms Returns the number of terms in this field Declaration public virtual int NumTerms { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source GetIterator(AtomicReader) Returns a SortedSetDocValues view of this instance Declaration public virtual SortedSetDocValues GetIterator(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description SortedSetDocValues | Improve this Doc View Source GetOrdTermsEnum(AtomicReader) Returns a TermsEnum that implements Ord . If the provided reader supports Ord , we just return its TermsEnum ; if it does not, we build a \"private\" terms index internally (WARNING: consumes RAM) and use that index to implement Ord . This also enables Ord on top of a composite reader. The returned TermsEnum is unpositioned. This returns null if there are no terms. NOTE : you must pass the same reader that was used when creating this class Declaration public virtual TermsEnum GetOrdTermsEnum(AtomicReader reader) Parameters Type Name Description AtomicReader reader Returns Type Description TermsEnum | Improve this Doc View Source LookupTerm(TermsEnum, Int32) Returns the term ( BytesRef ) corresponding to the provided ordinal. Declaration public virtual BytesRef LookupTerm(TermsEnum termsEnum, int ord) Parameters Type Name Description TermsEnum termsEnum System.Int32 ord Returns Type Description BytesRef | Improve this Doc View Source RamUsedInBytes() Returns total bytes used. Declaration public virtual long RamUsedInBytes() Returns Type Description System.Int64 | Improve this Doc View Source SetActualDocFreq(Int32, Int32) Invoked during Uninvert(AtomicReader, IBits, BytesRef) to record the document frequency for each uninverted term. Declaration protected virtual void SetActualDocFreq(int termNum, int df) Parameters Type Name Description System.Int32 termNum System.Int32 df | Improve this Doc View Source Uninvert(AtomicReader, IBits, BytesRef) Call this only once (if you subclass!) Declaration protected virtual void Uninvert(AtomicReader reader, IBits liveDocs, BytesRef termPrefix) Parameters Type Name Description AtomicReader reader IBits liveDocs BytesRef termPrefix | Improve this Doc View Source VisitTerm(TermsEnum, Int32) Subclass can override this Declaration protected virtual void VisitTerm(TermsEnum te, int termNum) Parameters Type Name Description TermsEnum te System.Int32 termNum Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.BufferedUpdates.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BufferedUpdates.html",
    "title": "Class BufferedUpdates | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedUpdates Holds buffered deletes and updates, by docID, term or query for a single segment. this is used to hold buffered pending deletes and updates against the to-be-flushed segment. Once the deletes and updates are pushed (on flush in Lucene.Net.Index.DocumentsWriter ), they are converted to a FrozenDeletes instance. NOTE: instances of this class are accessed either via a private instance on Lucene.Net.Index.DocumentsWriterPerThread , or via sync'd code by Lucene.Net.Index.DocumentsWriterDeleteQueue Inheritance System.Object BufferedUpdates Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public class BufferedUpdates Fields | Improve this Doc View Source MAX_INT32 NOTE: This was MAX_INT in Lucene Declaration public static readonly int MAX_INT32 Field Value Type Description System.Int32 Methods | Improve this Doc View Source AddBinaryUpdate(DocValuesUpdate.BinaryDocValuesUpdate, Int32) Declaration public virtual void AddBinaryUpdate(DocValuesUpdate.BinaryDocValuesUpdate update, int docIDUpto) Parameters Type Name Description DocValuesUpdate.BinaryDocValuesUpdate update System.Int32 docIDUpto | Improve this Doc View Source AddDocID(Int32) Declaration public virtual void AddDocID(int docID) Parameters Type Name Description System.Int32 docID | Improve this Doc View Source AddNumericUpdate(DocValuesUpdate.NumericDocValuesUpdate, Int32) Declaration public virtual void AddNumericUpdate(DocValuesUpdate.NumericDocValuesUpdate update, int docIDUpto) Parameters Type Name Description DocValuesUpdate.NumericDocValuesUpdate update System.Int32 docIDUpto | Improve this Doc View Source AddQuery(Query, Int32) Declaration public virtual void AddQuery(Query query, int docIDUpto) Parameters Type Name Description Query query System.Int32 docIDUpto | Improve this Doc View Source AddTerm(Term, Int32) Declaration public virtual void AddTerm(Term term, int docIDUpto) Parameters Type Name Description Term term System.Int32 docIDUpto | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.BinaryDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.BinaryDocValues.html",
    "title": "Class BinaryDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BinaryDocValues A per-document byte[] Inheritance System.Object BinaryDocValues SortedDocValues Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class BinaryDocValues Constructors | Improve this Doc View Source BinaryDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected BinaryDocValues() Methods | Improve this Doc View Source Get(Int32, BytesRef) Lookup the value for document. Declaration public abstract void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.IPostingsFormatFactory.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.IPostingsFormatFactory.html",
    "title": "Interface IPostingsFormatFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IPostingsFormatFactory LUCENENET specific contract for extending the functionality of PostingsFormat implementations so they can be injected with dependencies. To set the IPostingsFormatFactory , call SetPostingsFormatFactory(IPostingsFormatFactory) . Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public interface IPostingsFormatFactory Methods | Improve this Doc View Source GetPostingsFormat(String) Gets the PostingsFormat instance from the provided name . Declaration PostingsFormat GetPostingsFormat(string name) Parameters Type Name Description System.String name The name of the PostingsFormat instance to retrieve. Returns Type Description PostingsFormat The PostingsFormat instance. Extension Methods Number.IsNumber(Object) See Also DefaultPostingsFormatFactory"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HCHashTable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Compressing.LZ4.HCHashTable.html",
    "title": "Class LZ4.HCHashTable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LZ4.HCHashTable Inheritance System.Object LZ4.HCHashTable Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Compressing Assembly : Lucene.Net.dll Syntax public sealed class HCHashTable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.CodecUtil.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.CodecUtil.html",
    "title": "Class CodecUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class CodecUtil Utility class for reading and writing versioned headers. Writing codec headers is useful to ensure that a file is in the format you think it is. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CodecUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs Assembly : Lucene.Net.dll Syntax public sealed class CodecUtil Fields | Improve this Doc View Source CODEC_MAGIC Constant to identify the start of a codec header. Declaration public static readonly int CODEC_MAGIC Field Value Type Description System.Int32 | Improve this Doc View Source FOOTER_MAGIC Constant to identify the start of a codec footer. Declaration public static readonly int FOOTER_MAGIC Field Value Type Description System.Int32 Methods | Improve this Doc View Source CheckEOF(IndexInput) Checks that the stream is positioned at the end, and throws exception if it is not. Declaration [Obsolete(\"Use CheckFooter(ChecksumIndexInput) instead, this should only used for files without checksums.\")] public static void CheckEOF(IndexInput in) Parameters Type Name Description IndexInput in | Improve this Doc View Source CheckFooter(ChecksumIndexInput) Validates the codec footer previously written by WriteFooter(IndexOutput) . Declaration public static long CheckFooter(ChecksumIndexInput in) Parameters Type Name Description ChecksumIndexInput in Returns Type Description System.Int64 Actual checksum value. Exceptions Type Condition System.IO.IOException If the footer is invalid, if the checksum does not match, or if in is not properly positioned before the footer at the end of the stream. | Improve this Doc View Source CheckHeader(DataInput, String, Int32, Int32) Reads and validates a header previously written with WriteHeader(DataOutput, String, Int32) . When reading a file, supply the expected codec and an expected version range ( minVersion to maxVersion ). Declaration public static int CheckHeader(DataInput in, string codec, int minVersion, int maxVersion) Parameters Type Name Description DataInput in Input stream, positioned at the point where the header was previously written. Typically this is located at the beginning of the file. System.String codec The expected codec name. System.Int32 minVersion The minimum supported expected version number. System.Int32 maxVersion The maximum supported expected version number. Returns Type Description System.Int32 The actual version found, when a valid header is found that matches codec , with an actual version where minVersion <= actual <= maxVersion . Otherwise an exception is thrown. Exceptions Type Condition CorruptIndexException If the first four bytes are not CODEC_MAGIC , or if the actual codec found is not codec . IndexFormatTooOldException If the actual version is less than minVersion . IndexFormatTooNewException If the actual version is greater than maxVersion . System.IO.IOException If there is an I/O error reading from the underlying medium. See Also WriteHeader(DataOutput, String, Int32) | Improve this Doc View Source CheckHeaderNoMagic(DataInput, String, Int32, Int32) Like CheckHeader(DataInput, String, Int32, Int32) except this version assumes the first System.Int32 has already been read and validated from the input. Declaration public static int CheckHeaderNoMagic(DataInput in, string codec, int minVersion, int maxVersion) Parameters Type Name Description DataInput in System.String codec System.Int32 minVersion System.Int32 maxVersion Returns Type Description System.Int32 | Improve this Doc View Source ChecksumEntireFile(IndexInput) Clones the provided input, reads all bytes from the file, and calls CheckFooter(ChecksumIndexInput) Note that this method may be slow, as it must process the entire file. If you just need to extract the checksum value, call RetrieveChecksum(IndexInput) . Declaration public static long ChecksumEntireFile(IndexInput input) Parameters Type Name Description IndexInput input Returns Type Description System.Int64 | Improve this Doc View Source FooterLength() Computes the length of a codec footer. Declaration public static int FooterLength() Returns Type Description System.Int32 Length of the entire codec footer. See Also WriteFooter(IndexOutput) | Improve this Doc View Source HeaderLength(String) Computes the length of a codec header. Declaration public static int HeaderLength(string codec) Parameters Type Name Description System.String codec Codec name. Returns Type Description System.Int32 Length of the entire codec header. See Also WriteHeader(DataOutput, String, Int32) | Improve this Doc View Source RetrieveChecksum(IndexInput) Returns (but does not validate) the checksum previously written by CheckFooter(ChecksumIndexInput) . Declaration public static long RetrieveChecksum(IndexInput in) Parameters Type Name Description IndexInput in Returns Type Description System.Int64 actual checksum value Exceptions Type Condition System.IO.IOException If the footer is invalid. | Improve this Doc View Source WriteFooter(IndexOutput) Writes a codec footer, which records both a checksum algorithm ID and a checksum. This footer can be parsed and validated with CheckFooter(ChecksumIndexInput) . CodecFooter --> Magic,AlgorithmID,Checksum Magic --> Uint32 ( WriteInt32(Int32) ). this identifies the start of the footer. It is always FOOTER_MAGIC . AlgorithmID --> Uint32 ( WriteInt32(Int32) ). this indicates the checksum algorithm used. Currently this is always 0, for zlib-crc32. Checksum --> Uint32 ( WriteInt64(Int64) ). The actual checksum value for all previous bytes in the stream, including the bytes from Magic and AlgorithmID. Declaration public static void WriteFooter(IndexOutput out) Parameters Type Name Description IndexOutput out Output stream Exceptions Type Condition System.IO.IOException If there is an I/O error writing to the underlying medium. | Improve this Doc View Source WriteHeader(DataOutput, String, Int32) Writes a codec header, which records both a string to identify the file and a version number. This header can be parsed and validated with CheckHeader(DataInput, String, Int32, Int32) . CodecHeader --> Magic,CodecName,Version Magic --> Uint32 ( WriteInt32(Int32) ). this identifies the start of the header. It is always CODEC_MAGIC . CodecName --> String ( WriteString(String) ). this is a string to identify this file. Version --> Uint32 ( WriteInt32(Int32) ). Records the version of the file. Note that the length of a codec header depends only upon the name of the codec, so this length can be computed at any time with HeaderLength(String) . Declaration public static void WriteHeader(DataOutput out, string codec, int version) Parameters Type Name Description DataOutput out Output stream System.String codec String to identify this file. It should be simple ASCII, less than 128 characters in length. System.Int32 version Version number Exceptions Type Condition System.IO.IOException If there is an I/O error writing to the underlying medium. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.LexicalToken.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.LexicalToken.html",
    "title": "Class LexicalToken | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LexicalToken Inheritance System.Object LexicalToken Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public static class LexicalToken Fields | Improve this Doc View Source Boost Lexical state. Declaration public const int Boost = 0 Field Value Type Description System.Int32 | Improve this Doc View Source DEFAULT Lexical state. Declaration public const int DEFAULT = 2 Field Value Type Description System.Int32"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ICharStream.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Surround.Parser.ICharStream.html",
    "title": "Interface ICharStream | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation. Namespace : Lucene.Net.QueryParsers.Surround.Parser Assembly : Lucene.Net.QueryParser.dll Syntax public interface ICharStream Properties | Improve this Doc View Source BeginColumn Returns the column number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source BeginLine Returns the line number of the first character for current token (being matched after the last call to BeginTOken). Declaration int BeginLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Column Returns the column position of the character last read. Declaration [Obsolete] int Column { get; } Property Value Type Description System.Int32 See Also EndColumn | Improve this Doc View Source EndColumn Returns the column number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndColumn { get; } Property Value Type Description System.Int32 | Improve this Doc View Source EndLine Returns the line number of the last character for current token (being matched after the last call to BeginTOken). Declaration int EndLine { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Image Returns a string made up of characters from the marked token beginning to the current buffer position. Implementations have the choice of returning anything that they want to. For example, for efficiency, one might decide to just return null, which is a valid implementation. Declaration string Image { get; } Property Value Type Description System.String | Improve this Doc View Source Line Returns the line number of the character last read. Declaration [Obsolete] int Line { get; } Property Value Type Description System.Int32 See Also EndLine Methods | Improve this Doc View Source BackUp(Int32) Backs up the input stream by amount steps. Lexer calls this method if it had already read some characters, but could not use them to match a (longer) token. So, they will be used again as the prefix of the next token and it is the implemetation's responsibility to do this right. Declaration void BackUp(int amount) Parameters Type Name Description System.Int32 amount | Improve this Doc View Source BeginToken() Returns the next character that marks the beginning of the next token. All characters must remain in the buffer between two successive calls to this method to implement BackUp(Int32) correctly. Declaration char BeginToken() Returns Type Description System.Char | Improve this Doc View Source Done() The lexer calls this function to indicate that it is done with the stream and hence implementations can free any resources held by this class. Again, the body of this function can be just empty and it will not affect the lexer's operation. Declaration void Done() | Improve this Doc View Source GetSuffix(Int32) Returns an array of characters that make up the suffix of length 'len' for the currently matched token. This is used to build up the matched string for use in actions in the case of MORE. A simple and inefficient implementation of this is as follows : { string t = Image; return t.Substring(t.Length - len, len).ToCharArray(); } Declaration char[] GetSuffix(int len) Parameters Type Name Description System.Int32 len Returns Type Description System.Char [] | Improve this Doc View Source ReadChar() Returns the next character from the selected input. The method of selecting the input is the responsibility of the class implementing this interface. Can throw any System.IO.IOException . Declaration char ReadChar() Returns Type Description System.Char"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.html",
    "title": "Namespace Lucene.Net.QueryParsers.Simple | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Simple Classes SimpleQueryParser SimpleQueryParser is used to parse human readable query syntax. The main idea behind this parser is that a person should be able to type whatever they want to represent a query, and this parser will do its best to interpret what to search for no matter how poorly composed the request may be. Tokens are considered to be any of a term, phrase, or subquery for the operations described below. Whitespace including ' ' '\\n' '\\r' and '\\t' and certain operators may be used to delimit tokens ( ) + | \" . Any errors in query syntax will be ignored and the parser will attempt to decipher what it can; however, this may mean odd or unexpected results. Query Operators ' + ' specifies AND operation: token1+token2 ' | ' specifies OR operation: token1|token2 ' - ' negates a single token: -token0 ' \" ' creates phrases of terms: \"term1 term2 ...\" ' ' at the end of terms specifies prefix query: term ' ~ N' at the end of terms specifies fuzzy query: term~1 ' ~ N' at the end of phrases specifies near query: \"term1 term2\"~5 ' ( ' and ' ) ' specifies precedence: token1 + (token2 | token3) The default operator is OR if no other operator is specified. For example, the following will OR token1 and token2 together: token1 token2 Normal operator precedence will be simple order from right to left. For example, the following will evaluate token1 OR token2 first, then AND with token3 : token1 | token2 + token3 Escaping An individual term may contain any possible character with certain characters requiring escaping using a ' </code>'. The following characters will need to be escaped in terms and phrases: + | \" ( ) ' </code> The ' - ' operator is a special case. On individual terms (not phrases) the first character of a term that is - must be escaped; however, any ' - ' characters beyond the first character do not need to be escaped. For example: -term1 -- Specifies NOT operation against term1 -term1 -- Searches for the term -term1 . term-1 -- Searches for the term term-1 . term-1 -- Searches for the term term-1 . The ' ' operator is a special case. On individual terms (not phrases) the last character of a term that is ' ' must be escaped; however, any ' ' characters before the last character do not need to be escaped: term1 -- Searches for the prefix term1 term1* -- Searches for the term term1 term1 -- Searches for the term term 1 term*1 -- Searches for the term term1 Note that above examples consider the terms before text processing. Enums Operator"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.Operator.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Simple.Operator.html",
    "title": "Enum Operator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Operator Namespace : Lucene.Net.QueryParsers.Simple Assembly : Lucene.Net.QueryParser.dll Syntax [Flags] public enum Operator Fields Name Description AND_OPERATOR Enables AND operator (+) ESCAPE_OPERATOR Enables ESCAPE operator () FUZZY_OPERATOR Enables FUZZY operators: (~) on single terms NEAR_OPERATOR Enables NEAR operators: (~) on phrases NOT_OPERATOR Enables NOT operator (-) OR_OPERATOR Enables OR operator (|) PHRASE_OPERATOR Enables PHRASE operator (\") PRECEDENCE_OPERATORS Enables PRECEDENCE operators: ( and ) PREFIX_OPERATOR Enables PREFIX operator (*) WHITESPACE_OPERATOR Enables WHITESPACE operators: ' ' '\\n' '\\r' '\\t'"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard Classes QueryParserUtil This class defines utility methods to (help) parse query strings into Query objects. StandardQueryParser This class is a helper that enables users to easily use the Lucene query parser. To construct a Query object from a query string, use the Parse(String, String) method: StandardQueryParser queryParserHelper = new StandardQueryParser(); Query query = queryParserHelper.Parse(\"a AND b\", \"defaultField\"); To change any configuration before parsing the query string do, for example: // the query config handler returned by StandardQueryParser is a // StandardQueryConfigHandler queryParserHelper.QueryConfigHandler.Analyzer = new WhitespaceAnalyzer(); The syntax for query strings is as follows (copied from the old QueryParser javadoc): A Query is a series of clauses. A clause may be prefixed by: a plus ( + ) or a minus ( - ) sign, indicating that the clause is required or prohibited respectively; or a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields. A clause may be either: a term, indicating all the documents that contain this term; or a nested query, enclosed in parentheses. Note that this may be used with a + / - prefix to require any of a set of terms. Thus, in BNF, the query grammar is: Query ::= ( Clause )* Clause ::= [\"+\", \"-\"] [<TERM> \":\"] ( <TERM> | \"(\" Query \")\" ) Examples of appropriately formatted queries can be found in the query syntax documentation. The text parser used by this helper is a StandardSyntaxParser . The query node processor used by this helper is a StandardQueryNodeProcessorPipeline . The builder used by this helper is a StandardQueryTreeBuilder . Interfaces ICommonQueryParserConfiguration Configuration options common across queryparser implementations."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.QueryParserUtil.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.QueryParserUtil.html",
    "title": "Class QueryParserUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class QueryParserUtil This class defines utility methods to (help) parse query strings into Query objects. Inheritance System.Object QueryParserUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.QueryParsers.Flexible.Standard Assembly : Lucene.Net.QueryParser.dll Syntax public sealed class QueryParserUtil Methods | Improve this Doc View Source Escape(String) Returns a string where those characters that TextParser expects to be escaped are escaped by a preceding </code>. Declaration public static string Escape(string s) Parameters Type Name Description System.String s Returns Type Description System.String | Improve this Doc View Source Parse(String, String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(\"query\", fields, flags, analyzer); The code above would construct a query: (filename:query) +(contents:query) -(description:query) Declaration public static Query Parse(string query, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description System.String query Query string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition System.ArgumentException if the length of the fields array differs from the length of the flags array | Improve this Doc View Source Parse(String[], String[], Analyzer) Parses a query which searches on the fields specified. If x fields are specified, this effectively constructs: (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx) Declaration public static Query Parse(string[] queries, string[] fields, Analyzer analyzer) Parameters Type Name Description System.String [] queries Queries strings to parse System.String [] fields Fields to search on Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition System.ArgumentException if the length of the queries array differs from the length of the fields array | Improve this Doc View Source Parse(String[], String[], Occur[], Analyzer) Parses a query, searching on the fields specified. Use this if you need to specify certain fields as required, and others as prohibited. Usage: string[] query = {\"query1\", \"query2\", \"query3\"}; string[] fields = {\"filename\", \"contents\", \"description\"}; Occur[] flags = {Occur.SHOULD, Occur.MUST, Occur.MUST_NOT}; MultiFieldQueryParser.Parse(query, fields, flags, analyzer); The code above would construct a query: (filename:query1) +(contents:query2) -(description:query3) Declaration public static Query Parse(string[] queries, string[] fields, Occur[] flags, Analyzer analyzer) Parameters Type Name Description System.String [] queries Queries string to parse System.String [] fields Fields to search on Occur [] flags Flags describing the fields Analyzer analyzer Analyzer to use Returns Type Description Query Exceptions Type Condition System.ArgumentException if the length of the queries, fields, and flags array differ"
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Processors.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Processors | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Processors Classes AllowLeadingWildcardProcessor This processor verifies if ALLOW_LEADING_WILDCARD is defined in the QueryConfigHandler . If it is and leading wildcard is not allowed, it looks for every WildcardQueryNode contained in the query node tree and throws an exception if any of them has a leading wildcard ('*' or '?'). AnalyzerQueryNodeProcessor This processor verifies if ANALYZER is defined in the QueryConfigHandler . If it is and the analyzer is not null , it looks for every FieldQueryNode that is not WildcardQueryNode , FuzzyQueryNode or IRangeQueryNode contained in the query node tree, then it applies the analyzer to that FieldQueryNode object. If the analyzer return only one term, the returned term is set to the FieldQueryNode and it's returned. If the analyzer return more than one term, a TokenizedPhraseQueryNode or MultiPhraseQueryNode is created, whether there is one or more terms at the same position, and it's returned. If no term is returned by the analyzer a NoTokenFoundQueryNode object is returned. BooleanQuery2ModifierNodeProcessor This processor is used to apply the correct ModifierQueryNode to BooleanQueryNode s children. This is a variant of BooleanModifiersQueryNodeProcessor which ignores precedence. The StandardSyntaxParser knows the rules of precedence, but lucene does not. e.g. (A AND B OR C AND D) ist treated like (+A +B +C +D) . This processor walks through the query node tree looking for BooleanQueryNode s. If an AndQueryNode is found, every child, which is not a ModifierQueryNode or the ModifierQueryNode is MOD_NONE , becomes a MOD_REQ . For default BooleanQueryNode , it checks the default operator is AND , if it is, the same operation when an AndQueryNode is found is applied to it. Each BooleanQueryNode which direct parent is also a BooleanQueryNode is removed (to ignore the rules of precedence). BooleanSingleChildOptimizationQueryNodeProcessor This processor removes every BooleanQueryNode that contains only one child and returns this child. If this child is ModifierQueryNode that was defined by the user. A modifier is not defined by the user when it's a BooleanModifierNode BoostQueryNodeProcessor This processor iterates the query node tree looking for every IFieldableNode that has BOOST in its config. If there is, the boost is applied to that IFieldableNode . DefaultPhraseSlopQueryNodeProcessor This processor verifies if PHRASE_SLOP is defined in the QueryConfigHandler . If it is, it looks for every TokenizedPhraseQueryNode and MultiPhraseQueryNode that does not have any SlopQueryNode applied to it and creates an SlopQueryNode and apply to it. The new SlopQueryNode has the same slop value defined in the configuration. FuzzyQueryNodeProcessor This processor iterates the query node tree looking for every FuzzyQueryNode , when this kind of node is found, it checks on the query configuration for FUZZY_CONFIG , gets the fuzzy prefix length and default similarity from it and set to the fuzzy node. For more information about fuzzy prefix length check: FuzzyQuery . GroupQueryNodeProcessor The ISyntaxParser generates query node trees that consider the boolean operator precedence, but Lucene current syntax does not support boolean precedence, so this processor remove all the precedence and apply the equivalent modifier according to the boolean operation defined on an specific query node. If there is a GroupQueryNode in the query node tree, the query node tree is not merged with the one above it. Example: TODO: describe a good example to show how this processor works LowercaseExpandedTermsQueryNodeProcessor This processor verifies if LOWERCASE_EXPANDED_TERMS is defined in the QueryConfigHandler . If it is and the expanded terms should be lower-cased, it looks for every WildcardQueryNode , FuzzyQueryNode and children of a IRangeQueryNode and lower-case its term. MatchAllDocsQueryNodeProcessor This processor converts every WildcardQueryNode that is \" : \" to MatchAllDocsQueryNode . MultiFieldQueryNodeProcessor This processor is used to expand terms so the query looks for the same term in different fields. It also boosts a query based on its field. This processor looks for every IFieldableNode contained in the query node tree. If a IFieldableNode is found, it checks if there is a MULTI_FIELDS defined in the QueryConfigHandler . If there is, the IFieldableNode is cloned N times and the clones are added to a BooleanQueryNode together with the original node. N is defined by the number of fields that it will be expanded to. The BooleanQueryNode is returned. MultiTermRewriteMethodProcessor This processor instates the default MultiTermQuery.RewriteMethod , CONSTANT_SCORE_AUTO_REWRITE_DEFAULT , for multi-term query nodes. NumericQueryNodeProcessor This processor is used to convert FieldQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every FieldQueryNode found. If NUMERIC_CONFIG is found, it considers that FieldQueryNode to be a numeric query and convert it to NumericRangeQueryNode with upper and lower inclusive and lower and upper equals to the value represented by the FieldQueryNode converted to System.Object representing a .NET numeric type. It means that field:1 is converted to field:[1 TO 1] . Note that FieldQueryNode s children of a IRangeQueryNode are ignored. NumericRangeQueryNodeProcessor This processor is used to convert TermRangeQueryNode s to NumericRangeQueryNode s. It looks for NUMERIC_CONFIG set in the FieldConfig of every TermRangeQueryNode found. If NUMERIC_CONFIG is found, it considers that TermRangeQueryNode to be a numeric range query and convert it to NumericRangeQueryNode . OpenRangeQueryNodeProcessor Processes TermRangeQuery s with open ranges. PhraseSlopQueryNodeProcessor This processor removes invalid SlopQueryNode objects in the query node tree. A SlopQueryNode is invalid if its child is neither a TokenizedPhraseQueryNode nor a MultiPhraseQueryNode . RemoveEmptyNonLeafQueryNodeProcessor This processor removes every IQueryNode that is not a leaf and has not children. If after processing the entire tree the root node is not a leaf and has no children, a MatchNoDocsQueryNode object is returned. This processor is used at the end of a pipeline to avoid invalid query node tree structures like a GroupQueryNode or ModifierQueryNode with no children. StandardQueryNodeProcessorPipeline This pipeline has all the processors needed to process a query node tree, generated by StandardSyntaxParser , already assembled. The order they are assembled affects the results. This processor pipeline was designed to work with StandardQueryConfigHandler . The result query node tree can be used to build a Query object using StandardQueryTreeBuilder . TermRangeQueryNodeProcessor This processors process TermRangeQueryNode s. It reads the lower and upper bounds value from the TermRangeQueryNode object and try to parse their values using a dateFormat . If the values cannot be parsed to a date value, it will only create the TermRangeQueryNode using the non-parsed values. If a LOCALE is defined in the QueryConfigHandler it will be used to parse the date, otherwise System.Globalization.CultureInfo.CurrentCulture will be used. If a DATE_RESOLUTION is defined and the DateTools.Resolution is not null it will also be used to parse the date value. WildcardQueryNodeProcessor The StandardSyntaxParser creates PrefixWildcardQueryNode nodes which have values containing the prefixed wildcard. However, Lucene PrefixQuery cannot contain the prefixed wildcard. So, this processor basically removed the prefixed wildcard from the PrefixWildcardQueryNode value."
  },
  "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.html": {
    "href": "api/Lucene.Net.QueryParser/Lucene.Net.QueryParsers.Flexible.Standard.Parser.html",
    "title": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Parser | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.QueryParsers.Flexible.Standard.Parser Classes EscapeQuerySyntax Implementation of IEscapeQuerySyntax for the standard lucene syntax. FastCharStream An efficient implementation of JavaCC's ICharStream interface. Note that this does not do line-number counting, but instead keeps track of the character position of the token in the input, as required by Lucene's Token API. LexicalToken ParseException This exception is thrown when parse errors are encountered. You can explicitly create objects of this exception type by calling the method generateParseException in the generated parser. You can modify this class to customize your error reporting mechanisms so long as you retain the public fields. RegexpToken StandardSyntaxParser Parser for the standard Lucene syntax StandardSyntaxParserConstants Token literal values and constants. StandardSyntaxParserTokenManager Token Manager. Token Describes the input token stream. TokenMgrError Token Manager Error. Interfaces ICharStream This interface describes a character stream that maintains line and column number positions of the characters. It also has the capability to backup the stream to some extent. An implementation of this interface is used in the TokenManager implementation generated by JavaCCParser. All the methods except BackUp(Int32) can be implemented in any fashion. BackUp(Int32) needs to be implemented correctly for the correct operation of the lexer. Rest of the methods are all used to get information like line number, column number and the string that constitutes a token and are not used by the lexer. Hence their implementation won't affect the generated lexer's operation."
  },
  "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.html": {
    "href": "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.html",
    "title": "Namespace Lucene.Net.Index.Memory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index.Memory <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> High-performance single-document main memory Apache Lucene fulltext search index. Classes MemoryIndex High-performance single-document main memory Apache Lucene fulltext search index. Overview This class is a replacement/substitute for a large subset of RAMDirectory functionality. It is designed to enable maximum efficiency for on-the-fly matchmaking combining structured and fuzzy fulltext search in realtime streaming applications such as Nux XQuery based XML message queues, publish-subscribe systems for Blogs/newsfeeds, text chat, data acquisition and distribution systems, application level routers, firewalls, classifiers, etc. Rather than targeting fulltext search of infrequent queries over huge persistent data archives (historic search), this class targets fulltext search of huge numbers of queries over comparatively small transient realtime data (prospective search). For example as in float score = Search(string text, Query query) Each instance can hold at most one Lucene \"document\", with a document containing zero or more \"fields\", each field having a name and a fulltext value. The fulltext value is tokenized (split and transformed) into zero or more index terms (aka words) on AddField() , according to the policy implemented by an Analyzer. For example, Lucene analyzers can split on whitespace, normalize to lower case for case insensitivity, ignore common terms with little discriminatory value such as \"he\", \"in\", \"and\" (stop words), reduce the terms to their natural linguistic root form such as \"fishing\" being reduced to \"fish\" (stemming), resolve synonyms/inflexions/thesauri (upon indexing and/or querying), etc. For details, see Lucene Analyzer Intro . Arbitrary Lucene queries can be run against this class - see Lucene Query Syntax as well as Query Parser Rules . Note that a Lucene query selects on the field names and associated (indexed) tokenized terms, not on the original fulltext(s) - the latter are not stored but rather thrown away immediately after tokenization. For some interesting background information on search technology, see Bob Wyman's Prospective Search , Jim Gray's A Call to Arms - Custom subscriptions , and Tim Bray's On Search, the Series . Example Usage Analyzer analyzer = new SimpleAnalyzer(version); MemoryIndex index = new MemoryIndex(); index.AddField(\"content\", \"Readings about Salmons and other select Alaska fishing Manuals\", analyzer); index.AddField(\"author\", \"Tales of James\", analyzer); QueryParser parser = new QueryParser(version, \"content\", analyzer); float score = index.Search(parser.Parse(\"+author:james +salmon~ +fish* manual~\")); if (score > 0.0f) { Console.WriteLine(\"it's a match\"); } else { Console.WriteLine(\"no match found\"); } Console.WriteLine(\"indexData=\" + index.toString()); Example XQuery Usage (: An XQuery that finds all books authored by James that have something to do with \"salmon fishing manuals\", sorted by relevance :) declare namespace lucene = \"java:nux.xom.pool.FullTextUtil\"; declare variable $query := \"+salmon~ +fish* manual~\"; (: any arbitrary Lucene query can go here :) for $book in /books/book[author=\"James\" and lucene:match(abstract, $query) > 0.0] let $score := lucene:match($book/abstract, $query) order by $score descending return $book No thread safety guarantees An instance can be queried multiple times with the same or different queries, but an instance is not thread-safe. If desired use idioms such as: MemoryIndex index = ... lock (index) { // read and/or write index (i.e. add fields and/or query) } Performance Notes Internally there's a new data structure geared towards efficient indexing and searching, plus the necessary support code to seamlessly plug into the Lucene framework. This class performs very well for very small texts (e.g. 10 chars) as well as for large texts (e.g. 10 MB) and everything in between. Typically, it is about 10-100 times faster than RAMDirectory . Note that RAMDirectory has particularly large efficiency overheads for small to medium sized texts, both in time and space. Indexing a field with N tokens takes O(N) in the best case, and O(N logN) in the worst case. Memory consumption is probably larger than for RAMDirectory . Example throughput of many simple term queries over a single MemoryIndex: ~500000 queries/sec on a MacBook Pro, jdk 1.5.0_06, server VM. As always, your mileage may vary. If you're curious about the whereabouts of bottlenecks, run java 1.5 with the non-perturbing '-server -agentlib:hprof=cpu=samples,depth=10' flags, then study the trace log and correlate its hotspot trailer with its call stack headers (see hprof tracing )."
  },
  "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.MemoryIndex.html": {
    "href": "api/Lucene.Net.Memory/Lucene.Net.Index.Memory.MemoryIndex.html",
    "title": "Class MemoryIndex | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MemoryIndex High-performance single-document main memory Apache Lucene fulltext search index. Overview This class is a replacement/substitute for a large subset of RAMDirectory functionality. It is designed to enable maximum efficiency for on-the-fly matchmaking combining structured and fuzzy fulltext search in realtime streaming applications such as Nux XQuery based XML message queues, publish-subscribe systems for Blogs/newsfeeds, text chat, data acquisition and distribution systems, application level routers, firewalls, classifiers, etc. Rather than targeting fulltext search of infrequent queries over huge persistent data archives (historic search), this class targets fulltext search of huge numbers of queries over comparatively small transient realtime data (prospective search). For example as in float score = Search(string text, Query query) Each instance can hold at most one Lucene \"document\", with a document containing zero or more \"fields\", each field having a name and a fulltext value. The fulltext value is tokenized (split and transformed) into zero or more index terms (aka words) on AddField() , according to the policy implemented by an Analyzer. For example, Lucene analyzers can split on whitespace, normalize to lower case for case insensitivity, ignore common terms with little discriminatory value such as \"he\", \"in\", \"and\" (stop words), reduce the terms to their natural linguistic root form such as \"fishing\" being reduced to \"fish\" (stemming), resolve synonyms/inflexions/thesauri (upon indexing and/or querying), etc. For details, see Lucene Analyzer Intro . Arbitrary Lucene queries can be run against this class - see Lucene Query Syntax as well as Query Parser Rules . Note that a Lucene query selects on the field names and associated (indexed) tokenized terms, not on the original fulltext(s) - the latter are not stored but rather thrown away immediately after tokenization. For some interesting background information on search technology, see Bob Wyman's Prospective Search , Jim Gray's A Call to Arms - Custom subscriptions , and Tim Bray's On Search, the Series . Example Usage Analyzer analyzer = new SimpleAnalyzer(version); MemoryIndex index = new MemoryIndex(); index.AddField(\"content\", \"Readings about Salmons and other select Alaska fishing Manuals\", analyzer); index.AddField(\"author\", \"Tales of James\", analyzer); QueryParser parser = new QueryParser(version, \"content\", analyzer); float score = index.Search(parser.Parse(\"+author:james +salmon~ +fish* manual~\")); if (score > 0.0f) { Console.WriteLine(\"it's a match\"); } else { Console.WriteLine(\"no match found\"); } Console.WriteLine(\"indexData=\" + index.toString()); Example XQuery Usage (: An XQuery that finds all books authored by James that have something to do with \"salmon fishing manuals\", sorted by relevance :) declare namespace lucene = \"java:nux.xom.pool.FullTextUtil\"; declare variable $query := \"+salmon~ +fish* manual~\"; (: any arbitrary Lucene query can go here :) for $book in /books/book[author=\"James\" and lucene:match(abstract, $query) > 0.0] let $score := lucene:match($book/abstract, $query) order by $score descending return $book No thread safety guarantees An instance can be queried multiple times with the same or different queries, but an instance is not thread-safe. If desired use idioms such as: MemoryIndex index = ... lock (index) { // read and/or write index (i.e. add fields and/or query) } Performance Notes Internally there's a new data structure geared towards efficient indexing and searching, plus the necessary support code to seamlessly plug into the Lucene framework. This class performs very well for very small texts (e.g. 10 chars) as well as for large texts (e.g. 10 MB) and everything in between. Typically, it is about 10-100 times faster than RAMDirectory . Note that RAMDirectory has particularly large efficiency overheads for small to medium sized texts, both in time and space. Indexing a field with N tokens takes O(N) in the best case, and O(N logN) in the worst case. Memory consumption is probably larger than for RAMDirectory . Example throughput of many simple term queries over a single MemoryIndex: ~500000 queries/sec on a MacBook Pro, jdk 1.5.0_06, server VM. As always, your mileage may vary. If you're curious about the whereabouts of bottlenecks, run java 1.5 with the non-perturbing '-server -agentlib:hprof=cpu=samples,depth=10' flags, then study the trace log and correlate its hotspot trailer with its call stack headers (see hprof tracing ). Inheritance System.Object MemoryIndex Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index.Memory Assembly : Lucene.Net.Memory.dll Syntax public class MemoryIndex Constructors | Improve this Doc View Source MemoryIndex() Constructs an empty instance. Declaration public MemoryIndex() | Improve this Doc View Source MemoryIndex(Boolean) Constructs an empty instance that can optionally store the start and end character offset of each token term in the text. This can be useful for highlighting of hit locations with the Lucene highlighter package. Protected until the highlighter package matures, so that this can actually be meaningfully integrated. Declaration public MemoryIndex(bool storeOffsets) Parameters Type Name Description System.Boolean storeOffsets whether or not to store the start and end character offset of each token term in the text Methods | Improve this Doc View Source AddField(String, TokenStream) Equivalent to AddField(fieldName, stream, 1.0f) . Declaration public virtual void AddField(string fieldName, TokenStream stream) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from | Improve this Doc View Source AddField(String, TokenStream, Single) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field See Also Boost | Improve this Doc View Source AddField(String, TokenStream, Single, Int32) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost, int positionIncrementGap) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field System.Int32 positionIncrementGap the position increment gap if fields with the same name are added more than once See Also Boost | Improve this Doc View Source AddField(String, TokenStream, Single, Int32, Int32) Iterates over the given token stream and adds the resulting terms to the index; Equivalent to adding a tokenized, indexed, termVectorStored, unstored, Lucene Field . Finally closes the token stream. Note that untokenized keywords can be added with this method via KeywordTokenStream{T}(ICollection{T} )\"/>, the Lucene KeywordTokenizer or similar utilities. Declaration public virtual void AddField(string fieldName, TokenStream stream, float boost, int positionIncrementGap, int offsetGap) Parameters Type Name Description System.String fieldName a name to be associated with the text TokenStream stream the token stream to retrieve tokens from. System.Single boost the boost factor for hits for this field System.Int32 positionIncrementGap the position increment gap if fields with the same name are added more than once System.Int32 offsetGap the offset gap if fields with the same name are added more than once See Also Boost | Improve this Doc View Source AddField(String, String, Analyzer) Convenience method; Tokenizes the given field text and adds the resulting terms to the index; Equivalent to adding an indexed non-keyword Lucene Field that is tokenized, not stored, termVectorStored with positions (or termVectorStored with positions and offsets), Declaration public virtual void AddField(string fieldName, string text, Analyzer analyzer) Parameters Type Name Description System.String fieldName a name to be associated with the text System.String text the text to tokenize and index. Analyzer analyzer the analyzer to use for tokenization | Improve this Doc View Source CreateSearcher() Creates and returns a searcher that can be used to execute arbitrary Lucene queries and to collect the resulting query results as hits. Declaration public virtual IndexSearcher CreateSearcher() Returns Type Description IndexSearcher a searcher | Improve this Doc View Source GetMemorySize() Returns a reasonable approximation of the main memory [bytes] consumed by this instance. Useful for smart memory sensititive caches/pools. Declaration public virtual long GetMemorySize() Returns Type Description System.Int64 the main memory consumption | Improve this Doc View Source KeywordTokenStream<T>(ICollection<T>) Convenience method; Creates and returns a token stream that generates a token for each keyword in the given collection, \"as is\", without any transforming text analysis. The resulting token stream can be fed into AddField(String, TokenStream) , perhaps wrapped into another TokenFilter , as desired. Declaration public virtual TokenStream KeywordTokenStream<T>(ICollection<T> keywords) Parameters Type Name Description System.Collections.Generic.ICollection <T> keywords the keywords to generate tokens for Returns Type Description TokenStream the corresponding token stream Type Parameters Name Description T | Improve this Doc View Source Reset() Resets the MemoryIndex to its initial state and recycles all internal buffers. Declaration public virtual void Reset() | Improve this Doc View Source Search(Query) Convenience method that efficiently returns the relevance score by matching this index against the given Lucene query expression. Declaration public virtual float Search(Query query) Parameters Type Name Description Query query an arbitrary Lucene query to run against this index Returns Type Description System.Single the relevance score of the matchmaking; A number in the range [0.0 .. 1.0], with 0.0 indicating no match. The higher the number the better the match. | Improve this Doc View Source ToString() Returns a String representation of the index data for debugging purposes. Declaration public override string ToString() Returns Type Description System.String the string representation Overrides System.Object.ToString()"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.ScoreMode.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.ScoreMode.html",
    "title": "Enum ScoreMode | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum ScoreMode How to aggregate multiple child hit scores into a single parent score. Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public enum ScoreMode Fields Name Description Avg Parent hit's score is the average of all child scores. Max Parent hit's score is the max of all child scores. None Do no scoring. Total Parent hit's score is the sum of all child scores."
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.JoinUtil.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.JoinUtil.html",
    "title": "Class JoinUtil | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class JoinUtil Utility for query time joining using Lucene.Net.Join.TermsQuery and Lucene.Net.Join.TermsCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object JoinUtil Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Join Assembly : Lucene.Net.Join.dll Syntax public sealed class JoinUtil Methods | Improve this Doc View Source CreateJoinQuery(String, Boolean, String, Query, IndexSearcher, ScoreMode) Method for query time joining. Execute the returned query with a IndexSearcher to retrieve all documents that have the same terms in the to field that match with documents matching the specified fromQuery and have the same terms in the from field. In the case a single document relates to more than one document the multipleValuesPerDocument option should be set to true. When the multipleValuesPerDocument is set to true only the the score from the first encountered join value originating from the 'from' side is mapped into the 'to' side. Even in the case when a second join value related to a specific document yields a higher score. Obviously this doesn't apply in the case that None is used, since no scores are computed at all. Memory considerations: During joining all unique join values are kept in memory. On top of that when the scoreMode isn't set to None a float value per unique join value is kept in memory for computing scores. When scoreMode is set to Avg also an additional integer value is kept in memory per unique join value. Declaration public static Query CreateJoinQuery(string fromField, bool multipleValuesPerDocument, string toField, Query fromQuery, IndexSearcher fromSearcher, ScoreMode scoreMode) Parameters Type Name Description System.String fromField The from field to join from System.Boolean multipleValuesPerDocument Whether the from field has multiple terms per document System.String toField The to field to join to Query fromQuery The query to match documents on the from side IndexSearcher fromSearcher The searcher that executed the specified fromQuery ScoreMode scoreMode Instructs how scores from the fromQuery are mapped to the returned query Returns Type Description Query A Query instance that can be used to join documents based on the terms in the from and to field Exceptions Type Condition System.IO.IOException If I/O related errors occur"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.VectorHighlight.html",
    "title": "Namespace Lucene.Net.Search.VectorHighlight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.VectorHighlight Classes BreakIteratorBoundaryScanner A IBoundaryScanner implementation that uses ICU4N.Text.BreakIterator to find boundaries in the text."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.html",
    "title": "Namespace Lucene.Net.Search.PostingsHighlight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Search.PostingsHighlight Classes DefaultPassageFormatter Creates a formatted snippet from the top passages. The default implementation marks the query terms as bold, and places ellipses between unconnected passages. ICUPostingsHighlighter Simple highlighter that does not analyze fields nor use term vectors. Instead it requires DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Passage Represents a passage (typically a sentence of the document). A passage contains NumMatches highlights from the query, and the offsets and query terms that correspond with each match. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PassageFormatter Creates a formatted snippet from the top passages. This is a Lucene.NET EXPERIMENTAL API, use at your own risk PassageScorer Ranks passages found by ICUPostingsHighlighter . Each passage is scored as a miniature document within the document. The final score is computed as norm * ∑ ( weight * tf ). The default implementation is norm * BM25. This is a Lucene.NET EXPERIMENTAL API, use at your own risk WholeBreakIterator Just produces one single fragment for the entire text"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageScorer.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageScorer.html",
    "title": "Class PassageScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PassageScorer Ranks passages found by ICUPostingsHighlighter . Each passage is scored as a miniature document within the document. The final score is computed as norm * ∑ ( weight * tf ). The default implementation is norm * BM25. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PassageScorer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class PassageScorer Constructors | Improve this Doc View Source PassageScorer() Creates PassageScorer with these default values: k1 = 1.2 b = 0.75 pivot = 87 Declaration public PassageScorer() | Improve this Doc View Source PassageScorer(Single, Single, Single) Creates PassageScorer with specified scoring parameters Declaration public PassageScorer(float k1, float b, float pivot) Parameters Type Name Description System.Single k1 Controls non-linear term frequency normalization (saturation). System.Single b Controls to what degree passage length normalizes tf values. System.Single pivot Pivot value for length normalization (some rough idea of average sentence length in characters). Methods | Improve this Doc View Source Norm(Int32) Normalize a passage according to its position in the document. Typically passages towards the beginning of the document are more useful for summarizing the contents. The default implementation is 1 + 1/log(pivot + passageStart) Declaration public virtual float Norm(int passageStart) Parameters Type Name Description System.Int32 passageStart start offset of the passage Returns Type Description System.Single a boost value multiplied into the passage's core. | Improve this Doc View Source Tf(Int32, Int32) Computes term weight, given the frequency within the passage and the passage's length. Declaration public virtual float Tf(int freq, int passageLen) Parameters Type Name Description System.Int32 freq number of occurrences of within this passage System.Int32 passageLen length of the passage in characters. Returns Type Description System.Single term weight | Improve this Doc View Source Weight(Int32, Int32) Computes term importance, given its in-document statistics. Declaration public virtual float Weight(int contentLength, int totalTermFreq) Parameters Type Name Description System.Int32 contentLength length of document in characters System.Int32 totalTermFreq number of time term occurs in document Returns Type Description System.Single term importance"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageFormatter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.PassageFormatter.html",
    "title": "Class PassageFormatter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PassageFormatter Creates a formatted snippet from the top passages. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object PassageFormatter DefaultPassageFormatter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public abstract class PassageFormatter Methods | Improve this Doc View Source Format(Passage[], String) Formats the top passages from content into a human-readable text snippet. Declaration public abstract object Format(Passage[] passages, string content) Parameters Type Name Description Passage [] passages top-N passages for the field. Note these are sorted in the order that they appear in the document for convenience. System.String content content for the field. Returns Type Description System.Object formatted highlight. Note that for the non-expert APIs in ICUPostingsHighlighter that return System.String , the System.Object.ToString() method on the System.Object returned by this method is used to compute the string."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.Passage.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.Passage.html",
    "title": "Class Passage | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Passage Represents a passage (typically a sentence of the document). A passage contains NumMatches highlights from the query, and the offsets and query terms that correspond with each match. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Passage Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public sealed class Passage Properties | Improve this Doc View Source EndOffset Gets the end index (exclusive) of the passage in the original content: always >= StartOffset Declaration public int EndOffset { get; } Property Value Type Description System.Int32 | Improve this Doc View Source MatchEnds End offsets of the term matches, corresponding with MatchStarts . Only NumMatches are valid. Note that its possible that an end offset could exceed beyond the bounds of the passage EndOffset , if the Analyzer produced a term which spans a passage boundary. Declaration public IReadOnlyList<int> MatchEnds { get; } Property Value Type Description System.Collections.Generic.IReadOnlyList < System.Int32 > | Improve this Doc View Source MatchStarts Start offsets of the term matches, in increasing order. Only NumMatches are valid. Note that these offsets are absolute (not relative to StartOffset ). Declaration public IReadOnlyList<int> MatchStarts { get; } Property Value Type Description System.Collections.Generic.IReadOnlyList < System.Int32 > | Improve this Doc View Source MatchTerms BytesRef (term text) of the matches, corresponding with MatchStarts . Only NumMatches are valid. Declaration public IReadOnlyList<BytesRef> MatchTerms { get; } Property Value Type Description System.Collections.Generic.IReadOnlyList < BytesRef > | Improve this Doc View Source NumMatches Number of term matches available in MatchStarts , MatchEnds , MatchTerms Declaration public int NumMatches { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Score Passage's score. Declaration public float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source StartOffset Gets the start index (inclusive) of the passage in the original content: always >= 0. Declaration public int StartOffset { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.ICUPostingsHighlighter.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Search.PostingsHighlight.ICUPostingsHighlighter.html",
    "title": "Class ICUPostingsHighlighter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ICUPostingsHighlighter Simple highlighter that does not analyze fields nor use term vectors. Instead it requires DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Inheritance System.Object ICUPostingsHighlighter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.PostingsHighlight Assembly : Lucene.Net.ICU.dll Syntax public class ICUPostingsHighlighter Remarks PostingsHighlighter treats the single original document as the whole corpus, and then scores individual passages as if they were documents in this corpus. It uses a ICU4N.Text.BreakIterator to find passages in the text; by default it breaks using ICU4N.Text.BreakIterator.GetSentenceInstance(System.Globalization.CultureInfo) (for sentence breaking). It then iterates in parallel (merge sorting by offset) through the positions of all terms from the query, coalescing those hits that occur in a single passage into a Passage , and then scores each Passage using a separate PassageScorer . Passages are finally formatted into highlighted snippets with a PassageFormatter . You can customize the behavior by subclassing this highlighter, some important hooks: GetBreakIterator(String) : Customize how the text is divided into passages. GetScorer(String) : Customize how passages are ranked. GetFormatter(String) : Customize how snippets are formatted. GetIndexAnalyzer(String) : Enable highlighting of MultiTermQuerys such as WildcardQuery . WARNING : The code is very new and probably still has some exciting bugs! Example usage: // configure field with offsets at index time IndexableFieldType offsetsType = new IndexableFieldType(TextField.TYPE_STORED); offsetsType.IndexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS; Field body = new Field(\"body\", \"foobar\", offsetsType); // retrieve highlights at query time ICUPostingsHighlighter highlighter = new ICUPostingsHighlighter(); Query query = new TermQuery(new Term(\"body\", \"highlighting\")); TopDocs topDocs = searcher.Search(query, n); string highlights[] = highlighter.Highlight(\"body\", query, searcher, topDocs); This is thread-safe, and can be used across different readers. Note that the .NET implementation differs from the PostingsHighlighter in Lucene in that it is backed by an ICU ICU4N.Text.RuleBasedBreakIterator , which differs slightly in default behavior than the one in the JDK. However, the ICU ICU4N.Text.RuleBasedBreakIterator behavior can be customized to meet a lot of scenarios that the one in the JDK cannot. See the ICU documentation at http://userguide.icu-project.org/boundaryanalysis/break-rules for more information how to pass custom rules to an ICU ICU4N.Text.RuleBasedBreakIterator . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Constructors | Improve this Doc View Source ICUPostingsHighlighter() Creates a new highlighter with DEFAULT_MAX_LENGTH . Declaration public ICUPostingsHighlighter() | Improve this Doc View Source ICUPostingsHighlighter(Int32) Creates a new highlighter, specifying maximum content length. Declaration public ICUPostingsHighlighter(int maxLength) Parameters Type Name Description System.Int32 maxLength maximum content size to process. Exceptions Type Condition System.ArgumentException if maxLength is negative or int.MaxValue Fields | Improve this Doc View Source DEFAULT_MAX_LENGTH Default maximum content size to process. Typically snippets closer to the beginning of the document better summarize its content Declaration public static readonly int DEFAULT_MAX_LENGTH Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetBreakIterator(String) Returns the ICU4N.Text.BreakIterator to use for dividing text into passages. This instantiates an ICU4N.Text.BreakIterator.GetSentenceInstance(System.Globalization.CultureInfo) by default; subclasses can override to customize. Declaration protected virtual BreakIterator GetBreakIterator(string field) Parameters Type Name Description System.String field Returns Type Description ICU4N.Text.BreakIterator | Improve this Doc View Source GetEmptyHighlight(String, BreakIterator, Int32) Called to summarize a document when no hits were found. By default this just returns the first maxPassages sentences; subclasses can override to customize. Declaration protected virtual Passage[] GetEmptyHighlight(string fieldName, BreakIterator bi, int maxPassages) Parameters Type Name Description System.String fieldName ICU4N.Text.BreakIterator bi System.Int32 maxPassages Returns Type Description Passage [] | Improve this Doc View Source GetFormatter(String) Returns the PassageFormatter to use for formatting passages into highlighted snippets. This returns a new PassageFormatter by default; subclasses can override to customize. Declaration protected virtual PassageFormatter GetFormatter(string field) Parameters Type Name Description System.String field Returns Type Description PassageFormatter | Improve this Doc View Source GetIndexAnalyzer(String) Returns the analyzer originally used to index the content for field . This is used to highlight some MultiTermQuery s. Declaration protected virtual Analyzer GetIndexAnalyzer(string field) Parameters Type Name Description System.String field Returns Type Description Analyzer Analyzer or null (the default, meaning no special multi-term processing) | Improve this Doc View Source GetMultiValuedSeparator(String) Returns the logical separator between values for multi-valued fields. The default value is a space character, which means passages can span across values, but a subclass can override, for example with U+2029 PARAGRAPH SEPARATOR (PS) if each value holds a discrete passage for highlighting. Declaration protected virtual char GetMultiValuedSeparator(string field) Parameters Type Name Description System.String field Returns Type Description System.Char | Improve this Doc View Source GetScorer(String) Returns the PassageScorer to use for ranking passages. This returns a new PassageScorer by default; subclasses can override to customize. Declaration protected virtual PassageScorer GetScorer(string field) Parameters Type Name Description System.String field Returns Type Description PassageScorer | Improve this Doc View Source Highlight(String, Query, IndexSearcher, TopDocs) Highlights the top passages from a single field. Declaration public virtual string[] Highlight(string field, Query query, IndexSearcher searcher, TopDocs topDocs) Parameters Type Name Description System.String field field name to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. Returns Type Description System.String [] Array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first sentence for the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source Highlight(String, Query, IndexSearcher, TopDocs, Int32) Highlights the top-N passages from a single field. Declaration public virtual string[] Highlight(string field, Query query, IndexSearcher searcher, TopDocs topDocs, int maxPassages) Parameters Type Name Description System.String field field name to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. System.Int32 maxPassages The maximum number of top-N ranked passages used to form the highlighted snippets. Returns Type Description System.String [] Array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first maxPassages sentences from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException Illegal if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, TopDocs) Highlights the top passages from multiple fields. Conceptually, this behaves as a more efficient form of: IDictionary<string, string[]> m = new Dictionary<string, string[]>(); foreach (string field in fields) { m[field] = Highlight(field, query, searcher, topDocs); } return m; Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fields, Query query, IndexSearcher searcher, TopDocs topDocs) Parameters Type Name Description System.String [] fields field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first sentence from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, TopDocs, Int32[]) Highlights the top-N passages from multiple fields. Conceptually, this behaves as a more efficient form of: IDictionary<string, string[]> m = new Dictionary<string, string[]>(); foreach (string field in fields) { m[field] = Highlight(field, query, searcher, topDocs, maxPassages); } return m; Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fields, Query query, IndexSearcher searcher, TopDocs topDocs, int[] maxPassages) Parameters Type Name Description System.String [] fields field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. TopDocs topDocs TopDocs containing the summary result documents to highlight. System.Int32 [] maxPassages The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in topDocs . If no highlights were found for a document, the first maxPassages sentences from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source HighlightFields(String[], Query, IndexSearcher, Int32[], Int32[]) Highlights the top-N passages from multiple fields, for the provided int[] docids. Declaration public virtual IDictionary<string, string[]> HighlightFields(string[] fieldsIn, Query query, IndexSearcher searcher, int[] docidsIn, int[] maxPassagesIn) Parameters Type Name Description System.String [] fieldsIn field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. System.Int32 [] docidsIn containing the document IDs to highlight. System.Int32 [] maxPassagesIn The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.String []> keyed on field name, containing the array of formatted snippets corresponding to the documents in docidsIn . If no highlights were found for a document, the first maxPassages from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source HighlightFieldsAsObjects(String[], Query, IndexSearcher, Int32[], Int32[]) Expert: highlights the top-N passages from multiple fields, for the provided int[] docids, to custom object as returned by the PassageFormatter . Use this API to render to something other than System.String . Declaration protected virtual IDictionary<string, object[]> HighlightFieldsAsObjects(string[] fieldsIn, Query query, IndexSearcher searcher, int[] docidsIn, int[] maxPassagesIn) Parameters Type Name Description System.String [] fieldsIn field names to highlight. Must have a stored string value and also be indexed with offsets. Query query query to highlight. IndexSearcher searcher searcher that was previously used to execute the query. System.Int32 [] docidsIn containing the document IDs to highlight. System.Int32 [] maxPassagesIn The maximum number of top-N ranked passages per-field used to form the highlighted snippets. Returns Type Description System.Collections.Generic.IDictionary < System.String , System.Object []> keyed on field name, containing the array of formatted snippets corresponding to the documents in docidsIn . If no highlights were found for a document, the first maxPassagesIn from the field will be returned. Exceptions Type Condition System.IO.IOException if an I/O error occurred during processing System.ArgumentException if field was indexed without DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS | Improve this Doc View Source LoadFieldValues(IndexSearcher, String[], Int32[], Int32) Loads the string values for each field X docID to be highlighted. By default this loads from stored fields, but a subclass can change the source. This method should allocate the string[fields.length][docids.length] and fill all values. The returned strings must be identical to what was indexed. Declaration protected virtual IList<string[]> LoadFieldValues(IndexSearcher searcher, string[] fields, int[] docids, int maxLength) Parameters Type Name Description IndexSearcher searcher System.String [] fields System.Int32 [] docids System.Int32 maxLength Returns Type Description System.Collections.Generic.IList < System.String []>"
  },
  "api/Lucene.Net.ICU/Lucene.Net.Documents.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Documents <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The logical representation of a Document for indexing and searching. The document package provides the user level logical representation of content to be indexed and searched. The package also provides utilities for working with Document s and <xref:Lucene.Net.Index.IndexableField>s. Document and IndexableField A Document is a collection of <xref:Lucene.Net.Index.IndexableField>s. A <xref:Lucene.Net.Index.IndexableField> is a logical representation of a user's content that needs to be indexed or stored. <xref:Lucene.Net.Index.IndexableField>s have a number of properties that tell Lucene how to treat the content (like indexed, tokenized, stored, etc.) See the Field implementation of <xref:Lucene.Net.Index.IndexableField> for specifics on these properties. Note: it is common to refer to Document s having Field s, even though technically they have <xref:Lucene.Net.Index.IndexableField>s. Working with Documents First and foremost, a Document is something created by the user application. It is your job to create Documents based on the content of the files you are working with in your application (Word, txt, PDF, Excel or any other format.) How this is done is completely up to you. That being said, there are many tools available in other projects that can make the process of taking a file and converting it into a Lucene Document . The DateTools is a utility class to make dates and times searchable (remember, Lucene only searches text). <xref:Lucene.Net.Documents.IntField>, <xref:Lucene.Net.Documents.LongField>, <xref:Lucene.Net.Documents.FloatField> and DoubleField are a special helper class to simplify indexing of numeric values (and also dates) for fast range range queries with NumericRangeQuery (using a special sortable string representation of numeric values). Classes DocumentExtensions LUCENENET specific extensions to the Document class."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Documents.DocumentExtensions.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Documents.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the Document class. Inheritance System.Object DocumentExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Documents Assembly : Lucene.Net.ICU.dll Syntax public static class DocumentExtensions Methods | Improve this Doc View Source AddICUCollationDocValuesField(Document, String, Collator) Adds a new ICUCollationDocValuesField . NOTE: you should not create a new one for each document, instead just make one and reuse it during your indexing process, setting the value via SetStringValue(String) . Declaration public static ICUCollationDocValuesField AddICUCollationDocValuesField(this Document document, string name, Collator collator) Parameters Type Name Description Document document This Document . System.String name Field name. ICU4N.Text.Collator collator Collator for generating collation keys. Returns Type Description ICUCollationDocValuesField The field that was added to this Document ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.html",
    "title": "Namespace Lucene.Net.Collation | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Collation Classes ICUCollationAttributeFactory Converts each token into its ICU4N.Text.CollationKey , and then encodes bytes as an index term. ICUCollationDocValuesField Indexes sort keys as a single-valued SortedDocValuesField . ICUCollationKeyAnalyzer Configures KeywordTokenizer with ICUCollationAttributeFactory . ICUCollationKeyFilter Converts each token into its ICU4N.Text.CollationKey , and then encodes the ICU4N.Text.CollationKey with IndexableBinaryStringTools , to allow it to be stored as an index term. ICUCollationKeyFilterFactory Factory for ICUCollationKeyFilter ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Collation.TokenAttributes.html",
    "title": "Namespace Lucene.Net.Collation.TokenAttributes | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Collation.TokenAttributes Classes ICUCollatedTermAttribute Extension of CharTermAttribute that encodes the term text as a binary Unicode collation key instead of as UTF-8 bytes."
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector.html",
    "title": "Class TermAllGroupHeadsCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermAllGroupHeadsCollector LUCENENET specific class used to mimic the synatax used to access static members of TermAllGroupHeadsCollector<GH> without specifying its generic closing type. (TermAllGroupHeadsCollector.Create() rather than TermAllGroupHeadsCollector{GH}.Create()). Inheritance System.Object TermAllGroupHeadsCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermAllGroupHeadsCollector Methods | Improve this Doc View Source Create(String, Sort) Creates an AbstractAllGroupHeadsCollector instance based on the supplied arguments. This factory method decides with implementation is best suited. Delegates to Create(String, Sort, Int32) with an initialSize of 128. Declaration public static AbstractAllGroupHeadsCollector Create(string groupField, Sort sortWithinGroup) Parameters Type Name Description System.String groupField The field to group by Sort sortWithinGroup The sort within each group Returns Type Description AbstractAllGroupHeadsCollector an AbstractAllGroupHeadsCollector instance based on the supplied arguments | Improve this Doc View Source Create(String, Sort, Int32) Creates an AbstractAllGroupHeadsCollector instance based on the supplied arguments. This factory method decides with implementation is best suited. Declaration public static AbstractAllGroupHeadsCollector Create(string groupField, Sort sortWithinGroup, int initialSize) Parameters Type Name Description System.String groupField The field to group by Sort sortWithinGroup The sort within each group System.Int32 initialSize The initial allocation size of the internal int set and group list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Returns Type Description AbstractAllGroupHeadsCollector an AbstractAllGroupHeadsCollector instance based on the supplied arguments"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.SearchGroup.html",
    "title": "Class SearchGroup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SearchGroup LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of SearchGroup<TGroupValue> ) Inheritance System.Object SearchGroup Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroup Methods | Improve this Doc View Source Merge<T>(IList<IEnumerable<ISearchGroup<T>>>, Int32, Int32, Sort) Merges multiple collections of top groups, for example obtained from separate index shards. The provided groupSort must match how the groups were sorted, and the provided SearchGroups must have been computed with fillFields=true passed to GetTopGroups(Int32, Boolean) . NOTE: this returns null if the topGroups is empty. Declaration public static ICollection<SearchGroup<T>> Merge<T>(IList<IEnumerable<ISearchGroup<T>>> topGroups, int offset, int topN, Sort groupSort) Parameters Type Name Description System.Collections.Generic.IList < System.Collections.Generic.IEnumerable < ISearchGroup <T>>> topGroups System.Int32 offset System.Int32 topN Sort groupSort Returns Type Description System.Collections.Generic.ICollection < SearchGroup <T>> Type Parameters Name Description T"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ITopGroups-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ITopGroups-1.html",
    "title": "Interface ITopGroups<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ITopGroups<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ITopGroups<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source Groups Group results in groupSort order Declaration IGroupDocs<TGroupValue>[] Groups { get; } Property Value Type Description IGroupDocs <TGroupValue>[] | Improve this Doc View Source GroupSort How groups are sorted against each other Declaration SortField[] GroupSort { get; } Property Value Type Description SortField [] | Improve this Doc View Source MaxScore Highest score across all hits, or System.Single.NaN if scores were not computed. Declaration float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalGroupCount The total number of unique groups. If null this value is not computed. Declaration int? TotalGroupCount { get; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source TotalGroupedHitCount Number of documents grouped into the topN groups Declaration int TotalGroupedHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHitCount Number of documents matching the search Declaration int TotalHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source WithinGroupSort How docs are sorted within each group Declaration SortField[] WithinGroupSort { get; } Property Value Type Description SortField []"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ISearchGroup-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ISearchGroup-1.html",
    "title": "Interface ISearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ISearchGroup<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ISearchGroup<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue The value that defines this group Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source SortValues The sort values used during sorting. These are the groupSort field values of the highest rank document (by the groupSort) within the group. Can be null if fillFields=false had been passed to GetTopGroups(Int32, Boolean) Declaration object[] SortValues { get; set; } Property Value Type Description System.Object []"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IGroupDocs-1.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.IGroupDocs-1.html",
    "title": "Interface IGroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IGroupDocs<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IGroupDocs<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupSortValues Matches the groupSort passed to AbstractFirstPassGroupingCollector<TGroupValue> . Declaration object[] GroupSortValues { get; } Property Value Type Description System.Object [] | Improve this Doc View Source GroupValue The groupField value for all docs in this group; this may be null if hits did not have the groupField. Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source MaxScore Max score in this group Declaration float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source Score Overall aggregated score of this group (currently only set by join queries). Declaration float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs Hits; this may be FieldDoc instances if the withinGroupSort sorted by fields. Declaration ScoreDoc[] ScoreDocs { get; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits Total hits within this group Declaration int TotalHits { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ICollectedSearchGroup.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.ICollectedSearchGroup.html",
    "title": "Interface ICollectedSearchGroup | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICollectedSearchGroup LUCENENET specific interface for passing/comparing the CollectedSearchGroup without referencing its generic closing type Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ICollectedSearchGroup Properties | Improve this Doc View Source ComparerSlot Declaration int ComparerSlot { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopDoc Declaration int TopDoc { get; } Property Value Type Description System.Int32"
  },
  "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupingSearch.html": {
    "href": "api/Lucene.Net.Grouping/Lucene.Net.Search.Grouping.GroupingSearch.html",
    "title": "Class GroupingSearch | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class GroupingSearch Convenience class to perform grouping in a non distributed environment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object GroupingSearch Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupingSearch Constructors | Improve this Doc View Source GroupingSearch(ValueSource, IDictionary) Constructs a GroupingSearch instance that groups documents by function using a ValueSource instance. Declaration public GroupingSearch(ValueSource groupFunction, IDictionary valueSourceContext) Parameters Type Name Description ValueSource groupFunction The function to group by specified as ValueSource System.Collections.IDictionary valueSourceContext The context of the specified groupFunction | Improve this Doc View Source GroupingSearch(Filter) Constructor for grouping documents by doc block. This constructor can only be used when documents belonging in a group are indexed in one block. Declaration public GroupingSearch(Filter groupEndDocs) Parameters Type Name Description Filter groupEndDocs The filter that marks the last document in all doc blocks | Improve this Doc View Source GroupingSearch(String) Constructs a GroupingSearch instance that groups documents by index terms using the FieldCache . The group field can only have one token per document. This means that the field must not be analysed. Declaration public GroupingSearch(string groupField) Parameters Type Name Description System.String groupField The name of the field to group by. Methods | Improve this Doc View Source DisableCaching() Disables any enabled cache. Declaration public virtual GroupingSearch DisableCaching() Returns Type Description GroupingSearch this | Improve this Doc View Source GetAllGroupHeads() Returns the matching group heads if SetAllGroupHeads(Boolean) was set to true or an empty bit set. Declaration public virtual IBits GetAllGroupHeads() Returns Type Description IBits The matching group heads if SetAllGroupHeads(Boolean) was set to true or an empty bit set | Improve this Doc View Source GetAllMatchingGroups() If SetAllGroups(Boolean) was set to true then all matching groups are returned, otherwise an empty collection is returned. Declaration public virtual ICollection GetAllMatchingGroups() Returns Type Description System.Collections.ICollection all matching groups are returned, or an empty collection Remarks LUCENENET specific used to get the groups if the type is unknown or if the code expects any type, since GetAllMatchingGroups<T>() will throw an exception if the return type is incorrect. | Improve this Doc View Source GetAllMatchingGroups<T>() If SetAllGroups(Boolean) was set to true then all matching groups are returned, otherwise an empty collection is returned. Declaration public virtual ICollection<T> GetAllMatchingGroups<T>() Returns Type Description System.Collections.Generic.ICollection <T> all matching groups are returned, or an empty collection Type Parameters Name Description T The group value type. This can be a BytesRef or a MutableValue instance. If grouping by doc block this the group value is always null . | Improve this Doc View Source GroupByDocBlock<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Declaration protected virtual ITopGroups<TGroupValue> GroupByDocBlock<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher Filter filter Query query System.Int32 groupOffset System.Int32 groupLimit Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue | Improve this Doc View Source GroupByFieldOrFunction<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Declaration protected virtual ITopGroups<TGroupValue> GroupByFieldOrFunction<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher Filter filter Query query System.Int32 groupOffset System.Int32 groupLimit Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue | Improve this Doc View Source Search(IndexSearcher, Filter, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<object> Search(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Filter filter The filter to execute with the grouping Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups < System.Object > the grouped result as a ITopGroups<TGroupValue> instance Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search(IndexSearcher, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<object> Search(IndexSearcher searcher, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups < System.Object > the grouped result as a ITopGroups<TGroupValue> instance Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<TGroupValue> Search<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Filter filter The filter to execute with the grouping Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups <TGroupValue> the grouped result as a ITopGroups<TGroupValue> instance Type Parameters Name Description TGroupValue The expected return type of the search. Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search<TGroupValue>(IndexSearcher, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<TGroupValue> Search<TGroupValue>(IndexSearcher searcher, Query query, int groupOffset, int groupLimit) Parameters Type Name Description IndexSearcher searcher The IndexSearcher instance to execute the grouped search on. Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups <TGroupValue> the grouped result as a ITopGroups<TGroupValue> instance Type Parameters Name Description TGroupValue The expected return type of the search. Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source SetAllGroupHeads(Boolean) Whether to compute all group heads (most relevant document per group) matching the query. This feature isn't enabled when grouping by doc block. Declaration public virtual GroupingSearch SetAllGroupHeads(bool allGroupHeads) Parameters Type Name Description System.Boolean allGroupHeads Whether to compute all group heads (most relevant document per group) matching the query Returns Type Description GroupingSearch this | Improve this Doc View Source SetAllGroups(Boolean) Whether to also compute all groups matching the query. This can be used to determine the number of groups, which can be used for accurate pagination. When grouping by doc block the number of groups are automatically included in the TopGroups and this option doesn't have any influence. Declaration public virtual GroupingSearch SetAllGroups(bool allGroups) Parameters Type Name Description System.Boolean allGroups to also compute all groups matching the query Returns Type Description GroupingSearch this | Improve this Doc View Source SetCaching(Int32, Boolean) Enables caching for the second pass search. The cache will not contain more than the maximum specified documents. The cache is filled during the first pass searched and then replayed during the second pass searched. If the cache grows beyond the specified limit, then the cache is purged and not used in the second pass search. Declaration public virtual GroupingSearch SetCaching(int maxDocsToCache, bool cacheScores) Parameters Type Name Description System.Int32 maxDocsToCache The maximum number of documents the cache is allowed to hold System.Boolean cacheScores Whether to cache the scores Returns Type Description GroupingSearch this | Improve this Doc View Source SetCachingInMB(Double, Boolean) Enables caching for the second pass search. The cache will not grow over a specified limit in MB. The cache is filled during the first pass searched and then replayed during the second pass searched. If the cache grows beyond the specified limit, then the cache is purged and not used in the second pass search. Declaration public virtual GroupingSearch SetCachingInMB(double maxCacheRAMMB, bool cacheScores) Parameters Type Name Description System.Double maxCacheRAMMB The maximum amount in MB the cache is allowed to hold System.Boolean cacheScores Whether to cache the scores Returns Type Description GroupingSearch this | Improve this Doc View Source SetFillSortFields(Boolean) Whether to also fill the sort fields per returned group and groups docs. Declaration public virtual GroupingSearch SetFillSortFields(bool fillSortFields) Parameters Type Name Description System.Boolean fillSortFields Whether to also fill the sort fields per returned group and groups docs Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupDocsLimit(Int32) Specifies the number of documents to return inside a group from the specified groupDocsOffset. Declaration public virtual GroupingSearch SetGroupDocsLimit(int groupDocsLimit) Parameters Type Name Description System.Int32 groupDocsLimit The number of documents to return inside a group Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupDocsOffset(Int32) Specifies the offset for documents inside a group. Declaration public virtual GroupingSearch SetGroupDocsOffset(int groupDocsOffset) Parameters Type Name Description System.Int32 groupDocsOffset The offset for documents inside a Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupSort(Sort) Specifies how groups are sorted. Defaults to RELEVANCE . Declaration public virtual GroupingSearch SetGroupSort(Sort groupSort) Parameters Type Name Description Sort groupSort The sort for the groups. Returns Type Description GroupingSearch this | Improve this Doc View Source SetIncludeMaxScore(Boolean) Whether to include the score of the most relevant document per group. Declaration public virtual GroupingSearch SetIncludeMaxScore(bool includeMaxScore) Parameters Type Name Description System.Boolean includeMaxScore Whether to include the score of the most relevant document per group Returns Type Description GroupingSearch this | Improve this Doc View Source SetIncludeScores(Boolean) Whether to include the scores per doc inside a group. Declaration public virtual GroupingSearch SetIncludeScores(bool includeScores) Parameters Type Name Description System.Boolean includeScores Whether to include the scores per doc inside a group Returns Type Description GroupingSearch this | Improve this Doc View Source SetInitialSize(Int32) Sets the initial size of some internal used data structures. This prevents growing data structures many times. This can improve the performance of the grouping at the cost of more initial RAM. The SetAllGroups(Boolean) and SetAllGroupHeads(Boolean) features use this option. Defaults to 128. Declaration public virtual GroupingSearch SetInitialSize(int initialSize) Parameters Type Name Description System.Int32 initialSize The initial size of some internal used data structures Returns Type Description GroupingSearch this | Improve this Doc View Source SetSortWithinGroup(Sort) Specified how documents inside a group are sorted. Defaults to RELEVANCE . Declaration public virtual GroupingSearch SetSortWithinGroup(Sort sortWithinGroup) Parameters Type Name Description Sort sortWithinGroup The sort for documents inside a group Returns Type Description GroupingSearch this"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45Codec.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.Lucene45Codec.html",
    "title": "Class Lucene45Codec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Lucene45Codec Implements the Lucene 4.5 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene45 package documentation for file format details. @lucene.experimental Inheritance System.Object Codec Lucene45Codec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.Lucene45 Assembly : Lucene.Net.dll Syntax [Obsolete(\"Only for reading old 4.3-4.5 segments\")] [CodecName(\"Lucene45\")] public class Lucene45Codec : Codec Constructors | Improve this Doc View Source Lucene45Codec() Sole constructor. Declaration public Lucene45Codec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override sealed DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override sealed LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override sealed NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override sealed PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override sealed StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override sealed TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat Methods | Improve this Doc View Source GetDocValuesFormatForField(String) Returns the docvalues format that should be used for writing new segments of field . The default implementation always returns \"Lucene45\" Declaration public virtual DocValuesFormat GetDocValuesFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description DocValuesFormat | Improve this Doc View Source GetPostingsFormatForField(String) Returns the postings format that should be used for writing new segments of field . The default implementation always returns \"Lucene41\" Declaration public virtual PostingsFormat GetPostingsFormatForField(string field) Parameters Type Name Description System.String field Returns Type Description PostingsFormat Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.ScoreCachingWrappingScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.ScoreCachingWrappingScorer.html",
    "title": "Class ScoreCachingWrappingScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ScoreCachingWrappingScorer A Scorer which wraps another scorer and caches the score of the current document. Successive calls to GetScore() will return the same result and will not invoke the wrapped Scorer's GetScore() method, unless the current document has changed. This class might be useful due to the changes done to the ICollector interface, in which the score is not computed for a document by default, only if the collector requests it. Some collectors may need to use the score in several places, however all they have in hand is a Scorer object, and might end up computing the score of a document more than once. Inheritance System.Object DocIdSetIterator DocsEnum Scorer ScoreCachingWrappingScorer Inherited Members Scorer.m_weight Scorer.Weight DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class ScoreCachingWrappingScorer : Scorer Constructors | Improve this Doc View Source ScoreCachingWrappingScorer(Scorer) Creates a new instance by wrapping the given scorer. Declaration public ScoreCachingWrappingScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetChildren() Declaration public override ICollection<Scorer.ChildScorer> GetChildren() Returns Type Description System.Collections.Generic.ICollection < Scorer.ChildScorer > Overrides Scorer.GetChildren() | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.DefaultCollectionModel.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.DefaultCollectionModel.html",
    "title": "Class LMSimilarity.DefaultCollectionModel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMSimilarity.DefaultCollectionModel Models p(w|C) as the number of occurrences of the term in the collection, divided by the total number of tokens + 1 . Inheritance System.Object LMSimilarity.DefaultCollectionModel Implements LMSimilarity.ICollectionModel Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DefaultCollectionModel : LMSimilarity.ICollectionModel Constructors | Improve this Doc View Source DefaultCollectionModel() Sole constructor: parameter-free Declaration public DefaultCollectionModel() Methods | Improve this Doc View Source ComputeProbability(BasicStats) Declaration public virtual float ComputeProbability(BasicStats stats) Parameters Type Name Description BasicStats stats Returns Type Description System.Single | Improve this Doc View Source GetName() Declaration public virtual string GetName() Returns Type Description System.String Implements LMSimilarity.ICollectionModel Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.LMStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.LMStats.html",
    "title": "Class LMSimilarity.LMStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMSimilarity.LMStats Stores the collection distribution of the current term. Inheritance System.Object Similarity.SimWeight BasicStats LMSimilarity.LMStats Inherited Members BasicStats.m_numberOfDocuments BasicStats.m_numberOfFieldTokens BasicStats.m_avgFieldLength BasicStats.m_docFreq BasicStats.m_totalTermFreq BasicStats.m_queryBoost BasicStats.m_topLevelBoost BasicStats.m_totalBoost BasicStats.NumberOfDocuments BasicStats.NumberOfFieldTokens BasicStats.AvgFieldLength BasicStats.DocFreq BasicStats.TotalTermFreq BasicStats.Field BasicStats.GetValueForNormalization() BasicStats.RawNormalizationValue() BasicStats.Normalize(Single, Single) BasicStats.TotalBoost System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class LMStats : BasicStats Constructors | Improve this Doc View Source LMStats(String, Single) Creates LMSimilarity.LMStats for the provided field and query-time boost Declaration public LMStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Properties | Improve this Doc View Source CollectionProbability Returns the probability that the current term is generated by the collection. Declaration public float CollectionProbability { get; set; } Property Value Type Description System.Single Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.LMSimilarity.html",
    "title": "Class LMSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LMSimilarity Abstract superclass for language modeling Similarities. The following inner types are introduced: LMSimilarity.LMStats , which defines a new statistic, the probability that the collection language model generates the current term; LMSimilarity.ICollectionModel , which is a strategy interface for object that compute the collection language model p(w|C) ; LMSimilarity.DefaultCollectionModel , an implementation of the former, that computes the term probability as the number of occurrences of the term in the collection, divided by the total number of tokens. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase LMSimilarity LMDirichletSimilarity LMJelinekMercerSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.Score(BasicStats, Single, Single) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public abstract class LMSimilarity : SimilarityBase Constructors | Improve this Doc View Source LMSimilarity() Creates a new instance with the default collection language model. Declaration public LMSimilarity() | Improve this Doc View Source LMSimilarity(LMSimilarity.ICollectionModel) Creates a new instance with the specified collection language model. Declaration public LMSimilarity(LMSimilarity.ICollectionModel collectionModel) Parameters Type Name Description LMSimilarity.ICollectionModel collectionModel Fields | Improve this Doc View Source m_collectionModel The collection model. Declaration protected readonly LMSimilarity.ICollectionModel m_collectionModel Field Value Type Description LMSimilarity.ICollectionModel Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) Computes the collection probability of the current term in addition to the usual statistics. Declaration protected override void FillBasicStats(BasicStats stats, CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description BasicStats stats CollectionStatistics collectionStats TermStatistics termStats Overrides SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) | Improve this Doc View Source GetName() Returns the name of the LM method. The values of the parameters should be included as well. Used in ToString() . Declaration public abstract string GetName() Returns Type Description System.String | Improve this Doc View Source NewStats(String, Single) Declaration protected override BasicStats NewStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Returns Type Description BasicStats Overrides SimilarityBase.NewStats(String, Single) | Improve this Doc View Source ToString() Returns the name of the LM method. If a custom collection model strategy is used, its name is included as well. Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() See Also GetName() GetName () LMSimilarity.DefaultCollectionModel Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.MultiSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.MultiSimilarity.html",
    "title": "Class MultiSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class MultiSimilarity Implements the CombSUM method for combining evidence from multiple similarity values described in: Joseph A. Shaw, Edward A. Fox. In Text REtrieval Conference (1993), pp. 243-252 This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity MultiSimilarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class MultiSimilarity : Similarity Constructors | Improve this Doc View Source MultiSimilarity(Similarity[]) Creates a MultiSimilarity which will sum the scores of the provided sims . Declaration public MultiSimilarity(Similarity[] sims) Parameters Type Name Description Similarity [] sims Fields | Improve this Doc View Source m_sims the sub-similarities used to create the combined score Declaration protected readonly Similarity[] m_sims Field Value Type Description Similarity [] Methods | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.NoNormalization.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.Normalization.NoNormalization.html",
    "title": "Class Normalization.NoNormalization | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Normalization.NoNormalization Implementation used when there is no normalization. Inheritance System.Object Normalization Normalization.NoNormalization Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public sealed class NoNormalization : Normalization Constructors | Improve this Doc View Source NoNormalization() Sole constructor: parameter-free Declaration public NoNormalization() Methods | Improve this Doc View Source Explain(BasicStats, Single, Single) Declaration public override Explanation Explain(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description Explanation Overrides Normalization.Explain(BasicStats, Single, Single) | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.NormalizationH1.html",
    "title": "Class NormalizationH1 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NormalizationH1 Normalization model that assumes a uniform distribution of the term frequency. While this model is parameterless in the original article , information-based models (see IBSimilarity ) introduced a multiplying factor. The default value for the c parameter is 1 . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Normalization NormalizationH1 Inherited Members Normalization.Explain(BasicStats, Single, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class NormalizationH1 : Normalization Constructors | Improve this Doc View Source NormalizationH1() Calls NormalizationH1(1) Declaration public NormalizationH1() | Improve this Doc View Source NormalizationH1(Single) Creates NormalizationH1 with the supplied parameter c . Declaration public NormalizationH1(float c) Parameters Type Name Description System.Single c Hyper-parameter that controls the term frequency normalization with respect to the document length. Properties | Improve this Doc View Source C Returns the c parameter. Declaration public virtual float C { get; } Property Value Type Description System.Single See Also NormalizationH1(Single) Methods | Improve this Doc View Source Tfn(BasicStats, Single, Single) Declaration public override sealed float Tfn(BasicStats stats, float tf, float len) Parameters Type Name Description BasicStats stats System.Single tf System.Single len Returns Type Description System.Single Overrides Normalization.Tfn(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Normalization.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeFilter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeFilter.html",
    "title": "Class TermRangeFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeFilter A Filter that restricts search results to a range of term values in a given field. This filter matches the documents looking for terms that fall into the supplied range according to System.Byte.CompareTo(System.Byte) , It is not intended for numerical ranges; use NumericRangeFilter instead. If you construct a large number of range filters with different ranges but on the same field, FieldCacheRangeFilter may have significantly better performance. @since 2.9 Inheritance System.Object Filter MultiTermQueryWrapperFilter < TermRangeQuery > TermRangeFilter Inherited Members MultiTermQueryWrapperFilter<TermRangeQuery>.m_query MultiTermQueryWrapperFilter<TermRangeQuery>.ToString() MultiTermQueryWrapperFilter<TermRangeQuery>.Equals(Object) MultiTermQueryWrapperFilter<TermRangeQuery>.GetHashCode() MultiTermQueryWrapperFilter<TermRangeQuery>.Field MultiTermQueryWrapperFilter<TermRangeQuery>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeFilter : MultiTermQueryWrapperFilter<TermRangeQuery> Constructors | Improve this Doc View Source TermRangeFilter(String, BytesRef, BytesRef, Boolean, Boolean) Declaration public TermRangeFilter(string fieldName, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String fieldName The field this range applies to BytesRef lowerTerm The lower bound on this range BytesRef upperTerm The upper bound on this range System.Boolean includeLower Does this range include the lower bound? System.Boolean includeUpper Does this range include the upper bound? Exceptions Type Condition System.ArgumentException if both terms are null or if lowerTerm is null and includeLower is true (similar for upperTerm and includeUpper) Properties | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerTerm Returns the lower value of this range filter Declaration public virtual BytesRef LowerTerm { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperTerm Returns the upper value of this range filter Declaration public virtual BytesRef UpperTerm { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Less(String, BytesRef) Constructs a filter for field fieldName matching less than or equal to upperTerm . Declaration public static TermRangeFilter Less(string fieldName, BytesRef upperTerm) Parameters Type Name Description System.String fieldName BytesRef upperTerm Returns Type Description TermRangeFilter | Improve this Doc View Source More(String, BytesRef) Constructs a filter for field fieldName matching greater than or equal to lowerTerm . Declaration public static TermRangeFilter More(string fieldName, BytesRef lowerTerm) Parameters Type Name Description System.String fieldName BytesRef lowerTerm Returns Type Description TermRangeFilter | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Factory that creates a new TermRangeFilter using System.String s for term text. Declaration public static TermRangeFilter NewStringRange(string field, string lowerTerm, string upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerTerm System.String upperTerm System.Boolean includeLower System.Boolean includeUpper Returns Type Description TermRangeFilter Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeQuery.html",
    "title": "Class TermRangeQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeQuery A Query that matches documents within an range of terms. This query matches the documents looking for terms that fall into the supplied range according to System.Byte.CompareTo(System.Byte) . It is not intended for numerical ranges; use NumericRangeQuery instead. This query uses the CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method. @since 2.9 Inheritance System.Object Query MultiTermQuery TermRangeQuery Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeQuery : MultiTermQuery Constructors | Improve this Doc View Source TermRangeQuery(String, BytesRef, BytesRef, Boolean, Boolean) Constructs a query selecting all terms greater/equal than lowerTerm but less/equal than upperTerm . If an endpoint is null , it is said to be \"open\". Either or both endpoints may be open. Open endpoints may not be exclusive (you can't select all but the first or last term without explicitly specifying the term to exclude.) Declaration public TermRangeQuery(string field, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field The field that holds both lower and upper terms. BytesRef lowerTerm The term text at the lower end of the range. BytesRef upperTerm The term text at the upper end of the range. System.Boolean includeLower If true, the lowerTerm is included in the range. System.Boolean includeUpper If true, the upperTerm is included in the range. Properties | Improve this Doc View Source IncludesLower Returns true if the lower endpoint is inclusive Declaration public virtual bool IncludesLower { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesUpper Returns true if the upper endpoint is inclusive Declaration public virtual bool IncludesUpper { get; } Property Value Type Description System.Boolean | Improve this Doc View Source LowerTerm Returns the lower value of this range query Declaration public virtual BytesRef LowerTerm { get; } Property Value Type Description BytesRef | Improve this Doc View Source UpperTerm Returns the upper value of this range query Declaration public virtual BytesRef UpperTerm { get; } Property Value Type Description BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source NewStringRange(String, String, String, Boolean, Boolean) Factory that creates a new TermRangeQuery using System.String s for term text. Declaration public static TermRangeQuery NewStringRange(string field, string lowerTerm, string upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description System.String field System.String lowerTerm System.String upperTerm System.Boolean includeLower System.Boolean includeUpper Returns Type Description TermRangeQuery | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermRangeTermsEnum.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermRangeTermsEnum.html",
    "title": "Class TermRangeTermsEnum | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermRangeTermsEnum Subclass of FilteredTermsEnum for enumerating all terms that match the specified range parameters. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Inheritance System.Object TermsEnum FilteredTermsEnum TermRangeTermsEnum Implements IBytesRefIterator Inherited Members FilteredTermsEnum.SetInitialSeekTerm(BytesRef) FilteredTermsEnum.NextSeekTerm(BytesRef) FilteredTermsEnum.Attributes FilteredTermsEnum.Term FilteredTermsEnum.Comparer FilteredTermsEnum.DocFreq FilteredTermsEnum.TotalTermFreq FilteredTermsEnum.SeekExact(BytesRef) FilteredTermsEnum.SeekCeil(BytesRef) FilteredTermsEnum.SeekExact(Int64) FilteredTermsEnum.Ord FilteredTermsEnum.Docs(IBits, DocsEnum, DocsFlags) FilteredTermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum, DocsAndPositionsFlags) FilteredTermsEnum.SeekExact(BytesRef, TermState) FilteredTermsEnum.GetTermState() FilteredTermsEnum.Next() TermsEnum.Docs(IBits, DocsEnum) TermsEnum.DocsAndPositions(IBits, DocsAndPositionsEnum) TermsEnum.EMPTY System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermRangeTermsEnum : FilteredTermsEnum, IBytesRefIterator Constructors | Improve this Doc View Source TermRangeTermsEnum(TermsEnum, BytesRef, BytesRef, Boolean, Boolean) Enumerates all terms greater/equal than lowerTerm but less/equal than upperTerm . If an endpoint is null , it is said to be \"open\". Either or both endpoints may be open. Open endpoints may not be exclusive (you can't select all but the first or last term without explicitly specifying the term to exclude.) Declaration public TermRangeTermsEnum(TermsEnum tenum, BytesRef lowerTerm, BytesRef upperTerm, bool includeLower, bool includeUpper) Parameters Type Name Description TermsEnum tenum TermsEnum to filter BytesRef lowerTerm The term text at the lower end of the range BytesRef upperTerm The term text at the upper end of the range System.Boolean includeLower If true, the lowerTerm is included in the range. System.Boolean includeUpper If true, the upperTerm is included in the range. Methods | Improve this Doc View Source Accept(BytesRef) Declaration protected override FilteredTermsEnum.AcceptStatus Accept(BytesRef term) Parameters Type Name Description BytesRef term Returns Type Description FilteredTermsEnum.AcceptStatus Overrides FilteredTermsEnum.Accept(BytesRef) Implements IBytesRefIterator Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimeExceededException.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimeExceededException.html",
    "title": "Class TimeLimitingCollector.TimeExceededException | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimeLimitingCollector.TimeExceededException Thrown when elapsed search time exceeds allowed search time. Inheritance System.Object System.Exception TimeLimitingCollector.TimeExceededException Inherited Members System.Exception.GetBaseException() System.Exception.ToString() System.Exception.Data System.Exception.HelpLink System.Exception.HResult System.Exception.InnerException System.Exception.Message System.Exception.Source System.Exception.StackTrace System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TimeExceededException : Exception Properties | Improve this Doc View Source LastDocCollected Returns last doc (absolute doc id) that was collected when the search time exceeded. Declaration public virtual int LastDocCollected { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TimeAllowed Returns allowed time (milliseconds). Declaration public virtual long TimeAllowed { get; } Property Value Type Description System.Int64 | Improve this Doc View Source TimeElapsed Returns elapsed time (milliseconds). Declaration public virtual long TimeElapsed { get; } Property Value Type Description System.Int64 Extension Methods ExceptionExtensions.GetSuppressed(Exception) ExceptionExtensions.GetSuppressedAsList(Exception) ExceptionExtensions.AddSuppressed(Exception, Exception) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimerThread.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TimeLimitingCollector.TimerThread.html",
    "title": "Class TimeLimitingCollector.TimerThread | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TimeLimitingCollector.TimerThread Thread used to timeout search requests. Can be stopped completely with StopTimer() This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ThreadClass TimeLimitingCollector.TimerThread Implements IThreadRunnable Inherited Members ThreadClass.SafeRun(ThreadStart) ThreadClass.Start() ThreadClass.Interrupt() ThreadClass.Instance ThreadClass.Name ThreadClass.SetDaemon(Boolean) ThreadClass.IsAlive ThreadClass.IsBackground ThreadClass.IsDebug ThreadClass.Join() ThreadClass.Join(Int64) ThreadClass.Join(Int64, Int32) ThreadClass.Resume() ThreadClass.Suspend() ThreadClass.ToString() ThreadClass.CurrentThread() ThreadClass.Sleep(Int64) ThreadClass.Current() ThreadClass.Equals(Object) ThreadClass.GetHashCode() ThreadClass.State System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class TimerThread : ThreadClass, IThreadRunnable Constructors | Improve this Doc View Source TimerThread(Counter) Declaration public TimerThread(Counter counter) Parameters Type Name Description Counter counter | Improve this Doc View Source TimerThread(Int64, Counter) Declaration public TimerThread(long resolution, Counter counter) Parameters Type Name Description System.Int64 resolution Counter counter Fields | Improve this Doc View Source DEFAULT_RESOLUTION Declaration public const int DEFAULT_RESOLUTION = 20 Field Value Type Description System.Int32 | Improve this Doc View Source THREAD_NAME Declaration public const string THREAD_NAME = \"TimeLimitedCollector timer thread\" Field Value Type Description System.String Properties | Improve this Doc View Source Milliseconds Get the timer value in milliseconds. Declaration public long Milliseconds { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Resolution Return the timer resolution. Declaration public long Resolution { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source Run() Declaration public override void Run() Overrides ThreadClass.Run() | Improve this Doc View Source StopTimer() Stops the timer thread Declaration public void StopTimer() Implements IThreadRunnable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.LatvianStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.LatvianStemFilter.html",
    "title": "Class LatvianStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LatvianStemFilter A TokenFilter that applies LatvianStemmer to stem Latvian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter LatvianStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class LatvianStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source LatvianStemFilter(TokenStream) Declaration public LatvianStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.LatvianStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Lv.LatvianStemFilterFactory.html",
    "title": "Class LatvianStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class LatvianStemFilterFactory Factory for LatvianStemFilter . <fieldType name=\"text_lvstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.LatvianStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory LatvianStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Lv Assembly : Lucene.Net.Analysis.Common.dll Syntax public class LatvianStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source LatvianStemFilterFactory(IDictionary<String, String>) Creates a new LatvianStemFilterFactory Declaration public LatvianStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter.html",
    "title": "Class ASCIIFoldingFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ASCIIFoldingFilter This class converts alphabetic, numeric, and symbolic Unicode characters which are not in the first 127 ASCII characters (the \"Basic Latin\" Unicode block) into their ASCII equivalents, if one exists. Characters from the following Unicode blocks are converted; however, only those characters with reasonable ASCII alternatives are converted: C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode For example, '&agrave;' will be replaced by 'a'. Inheritance System.Object AttributeSource TokenStream TokenFilter ASCIIFoldingFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Miscellaneous Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class ASCIIFoldingFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source ASCIIFoldingFilter(TokenStream) Declaration public ASCIIFoldingFilter(TokenStream input) Parameters Type Name Description TokenStream input | Improve this Doc View Source ASCIIFoldingFilter(TokenStream, Boolean) Create a new ASCIIFoldingFilter . Declaration public ASCIIFoldingFilter(TokenStream input, bool preserveOriginal) Parameters Type Name Description TokenStream input TokenStream to filter System.Boolean preserveOriginal should the original tokens be kept on the input stream with a 0 position increment from the folded tokens? Properties | Improve this Doc View Source PreserveOriginal Does the filter preserve the original tokens? Declaration public bool PreserveOriginal { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source FoldToASCII(Char[], Int32) Converts characters above ASCII to their ASCII equivalents. For example, accents are removed from accented characters. Declaration public void FoldToASCII(char[] input, int length) Parameters Type Name Description System.Char [] input The string to fold System.Int32 length The number of characters in the input string | Improve this Doc View Source FoldToASCII(Char[], Int32, Char[], Int32, Int32) Converts characters above ASCII to their ASCII equivalents. For example, accents are removed from accented characters. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static int FoldToASCII(char[] input, int inputPos, char[] output, int outputPos, int length) Parameters Type Name Description System.Char [] input The characters to fold System.Int32 inputPos Index of the first character to fold System.Char [] output The result of the folding. Should be of size >= length * 4 . System.Int32 outputPos Index of output where to put the result of the folding System.Int32 length The number of characters to fold Returns Type Description System.Int32 length of output | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides TokenFilter.Reset() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianNormalizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Fa.PersianNormalizer.html",
    "title": "Class PersianNormalizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PersianNormalizer Normalizer for Persian. Normalization is done in-place for efficiency, operating on a termbuffer. Normalization is defined as: Normalization of various heh + hamza forms and heh goal to heh. Normalization of farsi yeh and yeh barree to arabic yeh Normalization of persian keheh to arabic kaf Inheritance System.Object PersianNormalizer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Fa Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PersianNormalizer Fields | Improve this Doc View Source FARSI_YEH Declaration public const char FARSI_YEH = 'ی' Field Value Type Description System.Char | Improve this Doc View Source HAMZA_ABOVE Declaration public const char HAMZA_ABOVE = 'ٔ' Field Value Type Description System.Char | Improve this Doc View Source HEH Declaration public const char HEH = 'ه' Field Value Type Description System.Char | Improve this Doc View Source HEH_GOAL Declaration public const char HEH_GOAL = 'ہ' Field Value Type Description System.Char | Improve this Doc View Source HEH_YEH Declaration public const char HEH_YEH = 'ۀ' Field Value Type Description System.Char | Improve this Doc View Source KAF Declaration public const char KAF = 'ك' Field Value Type Description System.Char | Improve this Doc View Source KEHEH Declaration public const char KEHEH = 'ک' Field Value Type Description System.Char | Improve this Doc View Source YEH Declaration public const char YEH = 'ي' Field Value Type Description System.Char | Improve this Doc View Source YEH_BARREE Declaration public const char YEH_BARREE = 'ے' Field Value Type Description System.Char Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Persian text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Cn.html",
    "title": "Namespace Lucene.Net.Analysis.Cn | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Cn Classes ChineseAnalyzer An Analyzer that tokenizes text with ChineseTokenizer and filters with ChineseFilter ChineseFilter A TokenFilter with a stop word table. Numeric tokens are removed. English tokens must be larger than 1 character. One Chinese character as one Chinese word. TO DO: Add Chinese stop words, such as \\ue400 Dictionary based Chinese word extraction Intelligent Chinese word extraction ChineseFilterFactory Factory for ChineseFilter ChineseTokenizer Tokenize Chinese text as individual chinese characters. The difference between ChineseTokenizer and CJKTokenizer is that they have different token parsing logic. For example, if the Chinese text \"C1C2C3C4\" is to be indexed: The tokens returned from ChineseTokenizer are C1, C2, C3, C4. The tokens returned from the CJKTokenizer are C1C2, C2C3, C3C4. Therefore the index created by CJKTokenizer is much larger. The problem is that when searching for C1, C1C2, C1C3, C4C2, C1C2C3 ... the ChineseTokenizer works, but the CJKTokenizer will not work. ChineseTokenizerFactory Factory for ChineseTokenizer"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.html",
    "title": "Namespace Lucene.Net.Analysis.Ckb | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Ckb Classes SoraniAnalyzer Analyzer for Sorani Kurdish. SoraniNormalizationFilter A TokenFilter that applies SoraniNormalizer to normalize the orthography. SoraniNormalizationFilterFactory Factory for SoraniNormalizationFilter . <fieldType name=\"text_ckbnormal\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> </analyzer> </fieldType> SoraniNormalizer Normalizes the Unicode representation of Sorani text. Normalization consists of: Alternate forms of 'y' (0064, 0649) are converted to 06CC (FARSI YEH) Alternate form of 'k' (0643) is converted to 06A9 (KEHEH) Alternate forms of vowel 'e' (0647+200C, word-final 0647, 0629) are converted to 06D5 (AE) Alternate (joining) form of 'h' (06BE) is converted to 0647 Alternate forms of 'rr' (0692, word-initial 0631) are converted to 0695 (REH WITH SMALL V BELOW) Harakat, tatweel, and formatting characters such as directional controls are removed. SoraniStemFilter A TokenFilter that applies SoraniStemmer to stem Sorani words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . SoraniStemFilterFactory Factory for SoraniStemFilter . <fieldType name=\"text_ckbstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.SoraniNormalizationFilterFactory\"/> <filter class=\"solr.SoraniStemFilterFactory\"/> </analyzer> </fieldType> SoraniStemmer Light stemmer for Sorani"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniStemmer.html",
    "title": "Class SoraniStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniStemmer Light stemmer for Sorani Inheritance System.Object SoraniStemmer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniStemmer Methods | Improve this Doc View Source Stem(Char[], Int32) Stem an input buffer of Sorani text. Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniNormalizer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Ckb.SoraniNormalizer.html",
    "title": "Class SoraniNormalizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SoraniNormalizer Normalizes the Unicode representation of Sorani text. Normalization consists of: Alternate forms of 'y' (0064, 0649) are converted to 06CC (FARSI YEH) Alternate form of 'k' (0643) is converted to 06A9 (KEHEH) Alternate forms of vowel 'e' (0647+200C, word-final 0647, 0629) are converted to 06D5 (AE) Alternate (joining) form of 'h' (06BE) is converted to 0647 Alternate forms of 'rr' (0692, word-initial 0631) are converted to 0695 (REH WITH SMALL V BELOW) Harakat, tatweel, and formatting characters such as directional controls are removed. Inheritance System.Object SoraniNormalizer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Ckb Assembly : Lucene.Net.Analysis.Common.dll Syntax public class SoraniNormalizer Methods | Improve this Doc View Source Normalize(Char[], Int32) Normalize an input buffer of Sorani text Declaration public virtual int Normalize(char[] s, int len) Parameters Type Name Description System.Char [] s input buffer System.Int32 len length of input buffer Returns Type Description System.Int32 length of input buffer after normalization"
  },
  "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.Iterator.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Packed.AbstractAppendingInt64Buffer.Iterator.html",
    "title": "Class AbstractAppendingInt64Buffer.Iterator | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AbstractAppendingInt64Buffer.Iterator Inheritance System.Object AbstractAppendingInt64Buffer.Iterator Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util.Packed Assembly : Lucene.Net.dll Syntax public sealed class Iterator Properties | Improve this Doc View Source HasNext Whether or not there are remaining values. Declaration public bool HasNext { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Next() Return the next long in the buffer. Declaration public long Next() Returns Type Description System.Int64 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.html",
    "title": "Class OfflineSorter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter On-disk sorting of byte arrays. Each byte array (entry) is a composed of the following fields: (two bytes) length of the following byte array, exactly the above count of bytes for the sequence to be sorted. Inheritance System.Object OfflineSorter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class OfflineSorter Constructors | Improve this Doc View Source OfflineSorter() Defaults constructor. Declaration public OfflineSorter() See Also DefaultTempDir() Automatic() | Improve this Doc View Source OfflineSorter(IComparer<BytesRef>) Defaults constructor with a custom comparer. Declaration public OfflineSorter(IComparer<BytesRef> comparer) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comparer See Also DefaultTempDir() Automatic() | Improve this Doc View Source OfflineSorter(IComparer<BytesRef>, OfflineSorter.BufferSize, DirectoryInfo, Int32) All-details constructor. Declaration public OfflineSorter(IComparer<BytesRef> comparer, OfflineSorter.BufferSize ramBufferSize, DirectoryInfo tempDirectory, int maxTempfiles) Parameters Type Name Description System.Collections.Generic.IComparer < BytesRef > comparer OfflineSorter.BufferSize ramBufferSize System.IO.DirectoryInfo tempDirectory System.Int32 maxTempfiles Fields | Improve this Doc View Source ABSOLUTE_MIN_SORT_BUFFER_SIZE Absolute minimum required buffer size for sorting. Declaration public static readonly long ABSOLUTE_MIN_SORT_BUFFER_SIZE Field Value Type Description System.Int64 | Improve this Doc View Source DEFAULT_COMPARER Default comparer: sorts in binary (codepoint) order Declaration public static readonly IComparer<BytesRef> DEFAULT_COMPARER Field Value Type Description System.Collections.Generic.IComparer < BytesRef > | Improve this Doc View Source GB Convenience constant for gigabytes Declaration public static readonly long GB Field Value Type Description System.Int64 | Improve this Doc View Source MAX_TEMPFILES Maximum number of temporary files before doing an intermediate merge. Declaration public static readonly int MAX_TEMPFILES Field Value Type Description System.Int32 | Improve this Doc View Source MB Convenience constant for megabytes Declaration public static readonly long MB Field Value Type Description System.Int64 | Improve this Doc View Source MIN_BUFFER_SIZE_MB Minimum recommended buffer size for sorting. Declaration public static readonly long MIN_BUFFER_SIZE_MB Field Value Type Description System.Int64 Properties | Improve this Doc View Source Comparer Returns the comparer in use to sort entries Declaration public IComparer<BytesRef> Comparer { get; } Property Value Type Description System.Collections.Generic.IComparer < BytesRef > Methods | Improve this Doc View Source DefaultTempDir() Returns the default temporary directory. By default, the System's temp folder. If not accessible or not available, an System.IO.IOException is thrown. Declaration public static DirectoryInfo DefaultTempDir() Returns Type Description System.IO.DirectoryInfo | Improve this Doc View Source Sort(FileInfo, FileInfo) Sort input to output, explicit hint for the buffer size. The amount of allocated memory may deviate from the hint (may be smaller or larger). Declaration public OfflineSorter.SortInfo Sort(FileInfo input, FileInfo output) Parameters Type Name Description System.IO.FileInfo input System.IO.FileInfo output Returns Type Description OfflineSorter.SortInfo Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.SortInfo.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.SortInfo.html",
    "title": "Class OfflineSorter.SortInfo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter.SortInfo Sort info (debugging mostly). Inheritance System.Object OfflineSorter.SortInfo Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public class SortInfo Constructors | Improve this Doc View Source SortInfo(OfflineSorter) Create a new OfflineSorter.SortInfo (with empty statistics) for debugging. Declaration public SortInfo(OfflineSorter outerInstance) Parameters Type Name Description OfflineSorter outerInstance Properties | Improve this Doc View Source BufferSize Read buffer size (in bytes) Declaration public long BufferSize { get; } Property Value Type Description System.Int64 | Improve this Doc View Source Lines Number of lines of data read Declaration public int Lines { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeRounds Number of partition merges Declaration public int MergeRounds { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source MergeTime Time spent merging sorted partitions (in milliseconds) Declaration public long MergeTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source ReadTime Time spent in i/o read (in milliseconds) Declaration public long ReadTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source SortTime Time spent sorting data (in milliseconds) Declaration public long SortTime { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source TempMergeFiles Number of temporary files created when merging partitions Declaration public int TempMergeFiles { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalTime Total time spent (in milliseconds) Declaration public long TotalTime { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source ToString() Returns a string representation of this object. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.BufferSize.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.OfflineSorter.BufferSize.html",
    "title": "Class OfflineSorter.BufferSize | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class OfflineSorter.BufferSize A bit more descriptive unit for constructors. Inheritance System.Object OfflineSorter.BufferSize Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class BufferSize Methods | Improve this Doc View Source Automatic() Approximately half of the currently available free heap, but no less than ABSOLUTE_MIN_SORT_BUFFER_SIZE . However if current heap allocation is insufficient or if there is a large portion of unallocated heap-space available for sorting consult with max allowed heap size. Declaration public static OfflineSorter.BufferSize Automatic() Returns Type Description OfflineSorter.BufferSize | Improve this Doc View Source Megabytes(Int64) Creates a OfflineSorter.BufferSize in MB. The given values must be > 0 and < 2048. Declaration public static OfflineSorter.BufferSize Megabytes(long mb) Parameters Type Name Description System.Int64 mb Returns Type Description OfflineSorter.BufferSize Extension Methods Number.IsNumber(Object) See Also Automatic() Megabytes(Int64)"
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.html",
    "title": "Class NumericUtils | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericUtils This is a helper class to generate prefix-encoded representations for numerical values and supplies converters to represent float/double values as sortable integers/longs. To quickly execute range queries in Apache Lucene, a range is divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie, while the boundaries are matched more exactly. this reduces the number of terms dramatically. This class generates terms to achieve this: First the numerical integer values need to be converted to bytes. For that integer values (32 bit or 64 bit) are made unsigned and the bits are converted to ASCII chars with each 7 bit. The resulting byte[] is sortable like the original integer value (even using UTF-8 sort order). Each value is also prefixed (in the first char) by the shift value (number of bits removed) used during encoding. To also index floating point numbers, this class supplies two methods to convert them to integer values by changing their bit layout: DoubleToSortableInt64(Double) , SingleToSortableInt32(Single) . You will have no precision loss by converting floating point numbers to integers and back (only that the integer form is not usable). Other data types like dates can easily converted to System.Int64 s or System.Int32 s (e.g. date to long: System.DateTime.Ticks ). For easy usage, the trie algorithm is implemented for indexing inside NumericTokenStream that can index System.Int32 , System.Int64 , System.Single , and System.Double . For querying, NumericRangeQuery and NumericRangeFilter implement the query part for the same data types. This class can also be used, to generate lexicographically sortable (according to UTF8SortedAsUTF16Comparer ) representations of numeric data types for other usages (e.g. sorting). @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public sealed class NumericUtils Fields | Improve this Doc View Source BUF_SIZE_INT32 The maximum term length (used for byte[] buffer size) for encoding System.Int32 values. NOTE: This was BUF_SIZE_INT in Lucene Declaration public const int BUF_SIZE_INT32 = 6 Field Value Type Description System.Int32 See Also Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) | Improve this Doc View Source BUF_SIZE_INT64 The maximum term length (used for byte[] buffer size) for encoding System.Int64 values. NOTE: This was BUF_SIZE_LONG in Lucene Declaration public const int BUF_SIZE_INT64 = 11 Field Value Type Description System.Int32 See Also Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) | Improve this Doc View Source PRECISION_STEP_DEFAULT The default precision step used by Int32Field , SingleField , Int64Field , DoubleField , NumericTokenStream , NumericRangeQuery , and NumericRangeFilter . Declaration public const int PRECISION_STEP_DEFAULT = 4 Field Value Type Description System.Int32 | Improve this Doc View Source SHIFT_START_INT32 Integers are stored at lower precision by shifting off lower bits. The shift count is stored as SHIFT_START_INT32+shift in the first byte NOTE: This was SHIFT_START_INT in Lucene Declaration public const byte SHIFT_START_INT32 = 96 Field Value Type Description System.Byte | Improve this Doc View Source SHIFT_START_INT64 Longs are stored at lower precision by shifting off lower bits. The shift count is stored as SHIFT_START_INT64+shift in the first byte NOTE: This was SHIFT_START_LONG in Lucene Declaration public const char SHIFT_START_INT64 = ' ' Field Value Type Description System.Char Methods | Improve this Doc View Source DoubleToSortableInt64(Double) Converts a System.Double value to a sortable signed System.Int64 . The value is converted by getting their IEEE 754 floating-point \"double format\" bit layout and then some bits are swapped, to be able to compare the result as System.Int64 . By this the precision is not reduced, but the value can easily used as a System.Int64 . The sort order (including System.Double.NaN ) is defined by System.Double.CompareTo(System.Double) ; NaN is greater than positive infinity. NOTE: This was doubleToSortableLong() in Lucene Declaration public static long DoubleToSortableInt64(double val) Parameters Type Name Description System.Double val Returns Type Description System.Int64 See Also SortableInt64ToDouble(Int64) | Improve this Doc View Source FilterPrefixCodedInt32s(TermsEnum) Filters the given TermsEnum by accepting only prefix coded 32 bit terms with a shift value of 0 . NOTE: This was filterPrefixCodedInts() in Lucene Declaration public static TermsEnum FilterPrefixCodedInt32s(TermsEnum termsEnum) Parameters Type Name Description TermsEnum termsEnum The terms enum to filter Returns Type Description TermsEnum A filtered TermsEnum that only returns prefix coded 32 bit terms with a shift value of 0 . | Improve this Doc View Source FilterPrefixCodedInt64s(TermsEnum) Filters the given TermsEnum by accepting only prefix coded 64 bit terms with a shift value of 0 . NOTE: This was filterPrefixCodedLongs() in Lucene Declaration public static TermsEnum FilterPrefixCodedInt64s(TermsEnum termsEnum) Parameters Type Name Description TermsEnum termsEnum The terms enum to filter Returns Type Description TermsEnum A filtered TermsEnum that only returns prefix coded 64 bit terms with a shift value of 0 . | Improve this Doc View Source GetPrefixCodedInt32Shift(BytesRef) Returns the shift value from a prefix encoded System.Int32 . NOTE: This was getPrefixCodedIntShift() in Lucene Declaration public static int GetPrefixCodedInt32Shift(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 Exceptions Type Condition System.FormatException if the supplied BytesRef is not correctly prefix encoded. | Improve this Doc View Source GetPrefixCodedInt64Shift(BytesRef) Returns the shift value from a prefix encoded System.Int64 . NOTE: This was getPrefixCodedLongShift() in Lucene Declaration public static int GetPrefixCodedInt64Shift(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 Exceptions Type Condition System.FormatException if the supplied BytesRef is not correctly prefix encoded. | Improve this Doc View Source Int32ToPrefixCoded(Int32, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was intToPrefixCoded() in Lucene Declaration public static void Int32ToPrefixCoded(int val, int shift, BytesRef bytes) Parameters Type Name Description System.Int32 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was intToPrefixCodedBytes() in Lucene Declaration public static void Int32ToPrefixCodedBytes(int val, int shift, BytesRef bytes) Parameters Type Name Description System.Int32 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int64ToPrefixCoded(Int64, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was longToPrefixCoded() in Lucene Declaration public static void Int64ToPrefixCoded(long val, int shift, BytesRef bytes) Parameters Type Name Description System.Int64 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) Returns prefix coded bits after reducing the precision by shift bits. This is method is used by NumericTokenStream . After encoding, bytes.Offset will always be 0. NOTE: This was longToPrefixCodedBytes() in Lucene Declaration public static void Int64ToPrefixCodedBytes(long val, int shift, BytesRef bytes) Parameters Type Name Description System.Int64 val The numeric value System.Int32 shift How many bits to strip from the right BytesRef bytes Will contain the encoded value | Improve this Doc View Source PrefixCodedToInt32(BytesRef) Returns an System.Int32 from prefixCoded bytes. Rightmost bits will be zero for lower precision codes. This method can be used to decode a term's value. NOTE: This was prefixCodedToInt() in Lucene Declaration public static int PrefixCodedToInt32(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int32 Exceptions Type Condition System.FormatException if the supplied BytesRef is not correctly prefix encoded. See Also Int32ToPrefixCodedBytes(Int32, Int32, BytesRef) | Improve this Doc View Source PrefixCodedToInt64(BytesRef) Returns a System.Int64 from prefixCoded bytes. Rightmost bits will be zero for lower precision codes. This method can be used to decode a term's value. NOTE: This was prefixCodedToLong() in Lucene Declaration public static long PrefixCodedToInt64(BytesRef val) Parameters Type Name Description BytesRef val Returns Type Description System.Int64 Exceptions Type Condition System.FormatException if the supplied BytesRef is not correctly prefix encoded. See Also Int64ToPrefixCodedBytes(Int64, Int32, BytesRef) | Improve this Doc View Source SingleToSortableInt32(Single) Converts a System.Single value to a sortable signed System.Int32 . The value is converted by getting their IEEE 754 floating-point \"float format\" bit layout and then some bits are swapped, to be able to compare the result as System.Int32 . By this the precision is not reduced, but the value can easily used as an System.Int32 . The sort order (including System.Single.NaN ) is defined by System.Single.CompareTo(System.Single) ; NaN is greater than positive infinity. NOTE: This was floatToSortableInt() in Lucene Declaration public static int SingleToSortableInt32(float val) Parameters Type Name Description System.Single val Returns Type Description System.Int32 See Also SortableInt32ToSingle(Int32) | Improve this Doc View Source SortableInt32ToSingle(Int32) Converts a sortable System.Int32 back to a System.Single . NOTE: This was sortableIntToFloat() in Lucene Declaration public static float SortableInt32ToSingle(int val) Parameters Type Name Description System.Int32 val Returns Type Description System.Single See Also SingleToSortableInt32(Single) | Improve this Doc View Source SortableInt64ToDouble(Int64) Converts a sortable System.Int64 back to a System.Double . NOTE: This was sortableLongToDouble() in Lucene Declaration public static double SortableInt64ToDouble(long val) Parameters Type Name Description System.Int64 val Returns Type Description System.Double See Also DoubleToSortableInt64(Double) | Improve this Doc View Source SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) Splits an System.Int32 range recursively. You may implement a builder that adds clauses to a BooleanQuery for each call to its AddRange(BytesRef, BytesRef) method. This method is used by NumericRangeQuery . NOTE: This was splitIntRange() in Lucene Declaration public static void SplitInt32Range(NumericUtils.Int32RangeBuilder builder, int precisionStep, int minBound, int maxBound) Parameters Type Name Description NumericUtils.Int32RangeBuilder builder System.Int32 precisionStep System.Int32 minBound System.Int32 maxBound | Improve this Doc View Source SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) Splits a long range recursively. You may implement a builder that adds clauses to a BooleanQuery for each call to its AddRange(BytesRef, BytesRef) method. This method is used by NumericRangeQuery . NOTE: This was splitLongRange() in Lucene Declaration public static void SplitInt64Range(NumericUtils.Int64RangeBuilder builder, int precisionStep, long minBound, long maxBound) Parameters Type Name Description NumericUtils.Int64RangeBuilder builder System.Int32 precisionStep System.Int64 minBound System.Int64 maxBound Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int64RangeBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int64RangeBuilder.html",
    "title": "Class NumericUtils.Int64RangeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericUtils.Int64RangeBuilder Callback for SplitInt64Range(NumericUtils.Int64RangeBuilder, Int32, Int64, Int64) . You need to override only one of the methods. NOTE: This was LongRangeBuilder in Lucene @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils.Int64RangeBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Int64RangeBuilder Methods | Improve this Doc View Source AddRange(BytesRef, BytesRef) Override this method, if you like to receive the already prefix encoded range bounds. You can directly build classical (inclusive) range queries from them. Declaration public virtual void AddRange(BytesRef minPrefixCoded, BytesRef maxPrefixCoded) Parameters Type Name Description BytesRef minPrefixCoded BytesRef maxPrefixCoded | Improve this Doc View Source AddRange(Int64, Int64, Int32) Override this method, if you like to receive the raw long range bounds. You can use this for e.g. debugging purposes (print out range bounds). Declaration public virtual void AddRange(long min, long max, int shift) Parameters Type Name Description System.Int64 min System.Int64 max System.Int32 shift Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int32RangeBuilder.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NumericUtils.Int32RangeBuilder.html",
    "title": "Class NumericUtils.Int32RangeBuilder | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericUtils.Int32RangeBuilder Callback for SplitInt32Range(NumericUtils.Int32RangeBuilder, Int32, Int32, Int32) . You need to override only one of the methods. NOTE: This was IntRangeBuilder in Lucene @lucene.internal @since 2.9, API changed non backwards-compliant in 4.0 Inheritance System.Object NumericUtils.Int32RangeBuilder Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class Int32RangeBuilder Methods | Improve this Doc View Source AddRange(BytesRef, BytesRef) Override this method, if you like to receive the already prefix encoded range bounds. You can directly build classical range (inclusive) queries from them. Declaration public virtual void AddRange(BytesRef minPrefixCoded, BytesRef maxPrefixCoded) Parameters Type Name Description BytesRef minPrefixCoded BytesRef maxPrefixCoded | Improve this Doc View Source AddRange(Int32, Int32, Int32) Override this method, if you like to receive the raw int range bounds. You can use this for e.g. debugging purposes (print out range bounds). Declaration public virtual void AddRange(int min, int max, int shift) Parameters Type Name Description System.Int32 min System.Int32 max System.Int32 shift Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.NamedServiceFactory-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.NamedServiceFactory-1.html",
    "title": "Class NamedServiceFactory<TService> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NamedServiceFactory<TService> LUCENENET specific abstract class containing common fuctionality for named service factories. Inheritance System.Object NamedServiceFactory<TService> DefaultCodecFactory DefaultDocValuesFormatFactory DefaultPostingsFormatFactory Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Util Assembly : Lucene.Net.dll Syntax public abstract class NamedServiceFactory<TService> Type Parameters Name Description TService The type of service this factory applies to. Fields | Improve this Doc View Source m_initializationLock Declaration protected object m_initializationLock Field Value Type Description System.Object Properties | Improve this Doc View Source CodecsAssembly The Lucene.Net.Codecs assembly or null if the assembly is not referenced in the host project. Declaration protected Assembly CodecsAssembly { get; } Property Value Type Description System.Reflection.Assembly | Improve this Doc View Source IsFullyTrusted Gets a value that indicates whether the current application domain executes with full trust. Declaration protected bool IsFullyTrusted { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source EnsureInitialized() Ensures the Initialize() method has been called since the last application start. This method is thread-safe. Declaration protected void EnsureInitialized() | Improve this Doc View Source GetCanonicalName(Type) Gets the type name without the suffix of the abstract base class it implements. If the class is generic, it will add the word \"Generic\" to the suffix in place of \"`\" to ensure the name is ASCII-only. Declaration protected static string GetCanonicalName(Type type) Parameters Type Name Description System.Type type The System.Type to get the name for. Returns Type Description System.String The canonical name of the service. | Improve this Doc View Source GetServiceName(Type) Get the service name for the class (either by convention or by attribute). Declaration public static string GetServiceName(Type type) Parameters Type Name Description System.Type type A service to get the name for. Returns Type Description System.String The canonical name of the service or the name provided in the corresponding name attribute, if supplied. | Improve this Doc View Source Initialize() Initializes the dependencies of this factory (such as using Reflection to populate the type cache). Declaration protected abstract void Initialize() | Improve this Doc View Source IsServiceType(Type) Determines whether the given type is corresponding service for this class, based on its generic closing type TService . Declaration protected virtual bool IsServiceType(Type type) Parameters Type Name Description System.Type type The System.Type of service to analyze. Returns Type Description System.Boolean true if the service subclasses TService , is public, and is not abstract; otherwise false . Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Util.Mutable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Util.Mutable.html",
    "title": "Namespace Lucene.Net.Util.Mutable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Util.Mutable Classes MutableValue Base class for all mutable values. This is a Lucene.NET INTERNAL API, use at your own risk MutableValueBool MutableValue implementation of type System.Boolean . MutableValueDate MutableValue implementation of type System.DateTime . MutableValueDouble MutableValue implementation of type System.Double . MutableValueInt32 MutableValue implementation of type System.Int32 . NOTE: This was MutableValueInt in Lucene MutableValueInt64 MutableValue implementation of type System.Int64 . NOTE: This was MutableValueLong in Lucene MutableValueSingle MutableValue implementation of type System.Single . NOTE: This was MutableValueFloat in Lucene MutableValueStr MutableValue implementation of type System.String ."
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.ReentrantLock.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.ReentrantLock.html",
    "title": "Class ReentrantLock | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class ReentrantLock Inheritance System.Object ReentrantLock Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class ReentrantLock Properties | Improve this Doc View Source HasQueuedThreads Declaration public bool HasQueuedThreads { get; } Property Value Type Description System.Boolean | Improve this Doc View Source QueueLength Declaration public int QueueLength { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Lock() Declaration public void Lock() | Improve this Doc View Source TryLock() Declaration public bool TryLock() Returns Type Description System.Boolean | Improve this Doc View Source Unlock() Declaration public void Unlock() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.IThreadRunnable.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.IThreadRunnable.html",
    "title": "Interface IThreadRunnable | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface IThreadRunnable this interface should be implemented by any class whose instances are intended to be executed by a thread. Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public interface IThreadRunnable Methods | Improve this Doc View Source Run() this method has to be implemented in order that starting of the thread causes the object's run method to be called in that separately executing thread. Declaration void Run() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.ICompletionService-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.ICompletionService-1.html",
    "title": "Interface ICompletionService<V> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Interface ICompletionService<V> Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public interface ICompletionService<V> Type Parameters Name Description V Methods | Improve this Doc View Source Submit(ICallable<V>) Declaration Task<V> Submit(ICallable<V> task) Parameters Type Name Description ICallable <V> task Returns Type Description System.Threading.Tasks.Task <V> | Improve this Doc View Source Take() Declaration Task<V> Take() Returns Type Description System.Threading.Tasks.Task <V> Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.Threading.DisposableThreadLocalProfiler.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Threading.DisposableThreadLocalProfiler.html",
    "title": "Class DisposableThreadLocalProfiler | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DisposableThreadLocalProfiler For Debuging purposes. Inheritance System.Object DisposableThreadLocalProfiler Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.Threading Assembly : Lucene.Net.dll Syntax public class DisposableThreadLocalProfiler Fields | Improve this Doc View Source Instances Declaration public static List<WeakReference> Instances Field Value Type Description System.Collections.Generic.List < System.WeakReference > Properties | Improve this Doc View Source EnableIDisposableThreadLocalProfiler Declaration public static bool EnableIDisposableThreadLocalProfiler { get; set; } Property Value Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.SystemProperties.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SystemProperties.html",
    "title": "Class SystemProperties | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SystemProperties Helper for environment variables. This class helps to convert the environment variables to int or bool data types and also silently handles read permission errors. For instructions how to set environment variables for your OS, see https://www.schrodinger.com/kb/1842 . Note that if you want to load any of these settings for your application from a configuration file, it is recommended your application load them at startup and call SetProperty(String, String) to set them. Set the environment variable lucene.ignoreSecurityExceptions to false to change the read behavior of these methods to throw the underlying exception instead of returning the default value. Inheritance System.Object SystemProperties Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class SystemProperties Methods | Improve this Doc View Source GetProperty(String) Retrieves the value of an environment variable from the current process. Declaration public static string GetProperty(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.String The environment variable value. | Improve this Doc View Source GetProperty(String, String) Retrieves the value of an environment variable from the current process, with a default value if it doens't exist or the caller doesn't have permission to read the value. Declaration public static string GetProperty(string key, string defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.String defaultValue The value to use if the environment variable does not exist or the caller doesn't have permission to read the value. Returns Type Description System.String The environment variable value. | Improve this Doc View Source GetPropertyAsBoolean(String) Retrieves the value of an environment variable from the current process as System.Boolean . If the value cannot be cast to System.Boolean , returns false . Declaration public static bool GetPropertyAsBoolean(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.Boolean The environment variable value. | Improve this Doc View Source GetPropertyAsBoolean(String, Boolean) Retrieves the value of an environment variable from the current process as System.Boolean , with a default value if it doens't exist, the caller doesn't have permission to read the value, or the value cannot be cast to a System.Boolean . Declaration public static bool GetPropertyAsBoolean(string key, bool defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.Boolean defaultValue The value to use if the environment variable does not exist, the caller doesn't have permission to read the value, or the value cannot be cast to System.Boolean . Returns Type Description System.Boolean The environment variable value. | Improve this Doc View Source GetPropertyAsInt32(String) Retrieves the value of an environment variable from the current process as System.Int32 . If the value cannot be cast to System.Int32 , returns 0 . Declaration public static int GetPropertyAsInt32(string key) Parameters Type Name Description System.String key The name of the environment variable. Returns Type Description System.Int32 The environment variable value. | Improve this Doc View Source GetPropertyAsInt32(String, Int32) Retrieves the value of an environment variable from the current process as System.Int32 , with a default value if it doens't exist, the caller doesn't have permission to read the value, or the value cannot be cast to a System.Int32 . Declaration public static int GetPropertyAsInt32(string key, int defaultValue) Parameters Type Name Description System.String key The name of the environment variable. System.Int32 defaultValue The value to use if the environment variable does not exist, the caller doesn't have permission to read the value, or the value cannot be cast to System.Int32 . Returns Type Description System.Int32 The environment variable value. | Improve this Doc View Source SetProperty(String, String) Creates, modifies, or deletes an environment variable stored in the current process. Declaration public static void SetProperty(string key, string value) Parameters Type Name Description System.String key The name of the environment variable. System.String value The new environment variable value. Exceptions Type Condition System.Security.SecurityException The caller does not have the required permission to perform this operation."
  },
  "api/Lucene.Net/Lucene.Net.Support.SystemConsole.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.SystemConsole.html",
    "title": "Class SystemConsole | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SystemConsole Mimics System.Console , but allows for swapping the System.IO.TextWriter of Out and Error , or the System.IO.TextReader of In with user-defined implementations. Inheritance System.Object SystemConsole Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class SystemConsole Properties | Improve this Doc View Source Error Declaration public static TextWriter Error { get; set; } Property Value Type Description System.IO.TextWriter | Improve this Doc View Source In Declaration public static TextReader In { get; set; } Property Value Type Description System.IO.TextReader | Improve this Doc View Source Out Declaration public static TextWriter Out { get; set; } Property Value Type Description System.IO.TextWriter Methods | Improve this Doc View Source Write(Boolean) Declaration public static void Write(bool value) Parameters Type Name Description System.Boolean value | Improve this Doc View Source Write(Char) Declaration public static void Write(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source Write(Char[]) Declaration public static void Write(char[] buffer) Parameters Type Name Description System.Char [] buffer | Improve this Doc View Source Write(Char[], Int32, Int32) Declaration public static void Write(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count | Improve this Doc View Source Write(Decimal) Declaration public static void Write(decimal value) Parameters Type Name Description System.Decimal value | Improve this Doc View Source Write(Double) Declaration public static void Write(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source Write(Int32) Declaration public static void Write(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source Write(Int64) Declaration public static void Write(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source Write(Object) Declaration public static void Write(object value) Parameters Type Name Description System.Object value | Improve this Doc View Source Write(Single) Declaration public static void Write(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source Write(String) Declaration public static void Write(string value) Parameters Type Name Description System.String value | Improve this Doc View Source Write(String, Object) Declaration public static void Write(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 | Improve this Doc View Source Write(String, Object, Object) Declaration public static void Write(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 | Improve this Doc View Source Write(String, Object, Object, Object) Declaration public static void Write(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 | Improve this Doc View Source Write(String, Object[]) Declaration public static void Write(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg | Improve this Doc View Source Write(UInt32) Declaration [CLSCompliant(false)] public static void Write(uint value) Parameters Type Name Description System.UInt32 value | Improve this Doc View Source Write(UInt64) Declaration [CLSCompliant(false)] public static void Write(ulong value) Parameters Type Name Description System.UInt64 value | Improve this Doc View Source WriteLine() Declaration public static void WriteLine() | Improve this Doc View Source WriteLine(Boolean) Declaration public static void WriteLine(bool value) Parameters Type Name Description System.Boolean value | Improve this Doc View Source WriteLine(Char) Declaration public static void WriteLine(char value) Parameters Type Name Description System.Char value | Improve this Doc View Source WriteLine(Char[]) Declaration public static void WriteLine(char[] buffer) Parameters Type Name Description System.Char [] buffer | Improve this Doc View Source WriteLine(Char[], Int32, Int32) Declaration public static void WriteLine(char[] buffer, int index, int count) Parameters Type Name Description System.Char [] buffer System.Int32 index System.Int32 count | Improve this Doc View Source WriteLine(Decimal) Declaration public static void WriteLine(decimal value) Parameters Type Name Description System.Decimal value | Improve this Doc View Source WriteLine(Double) Declaration public static void WriteLine(double value) Parameters Type Name Description System.Double value | Improve this Doc View Source WriteLine(Int32) Declaration public static void WriteLine(int value) Parameters Type Name Description System.Int32 value | Improve this Doc View Source WriteLine(Int64) Declaration public static void WriteLine(long value) Parameters Type Name Description System.Int64 value | Improve this Doc View Source WriteLine(Object) Declaration public static void WriteLine(object value) Parameters Type Name Description System.Object value | Improve this Doc View Source WriteLine(Single) Declaration public static void WriteLine(float value) Parameters Type Name Description System.Single value | Improve this Doc View Source WriteLine(String) Declaration public static void WriteLine(string value) Parameters Type Name Description System.String value | Improve this Doc View Source WriteLine(String, Object) Declaration public static void WriteLine(string format, object arg0) Parameters Type Name Description System.String format System.Object arg0 | Improve this Doc View Source WriteLine(String, Object, Object) Declaration public static void WriteLine(string format, object arg0, object arg1) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 | Improve this Doc View Source WriteLine(String, Object, Object, Object) Declaration public static void WriteLine(string format, object arg0, object arg1, object arg2) Parameters Type Name Description System.String format System.Object arg0 System.Object arg1 System.Object arg2 | Improve this Doc View Source WriteLine(String, Object[]) Declaration public static void WriteLine(string format, params object[] arg) Parameters Type Name Description System.String format System.Object [] arg | Improve this Doc View Source WriteLine(UInt32) Declaration [CLSCompliant(false)] public static void WriteLine(uint value) Parameters Type Name Description System.UInt32 value | Improve this Doc View Source WriteLine(UInt64) Declaration [CLSCompliant(false)] public static void WriteLine(ulong value) Parameters Type Name Description System.UInt64 value"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringTokenizer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringTokenizer.html",
    "title": "Class StringTokenizer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringTokenizer The StringTokenizer class allows an application to break a string into tokens by performing code point comparison. The StringTokenizer methods do not distinguish among identifiers, numbers, and quoted strings, nor do they recognize and skip comments. Inheritance System.Object StringTokenizer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class StringTokenizer Remarks The set of delimiters (the codepoints that separate tokens) may be specified either at creation time or on a per-token basis. An instance of StringTokenizer behaves in one of three ways, depending on whether it was created with the returnDelimiters flag having the value true or false : If returnDelims is false , delimiter code points serve to separate tokens. A token is a maximal sequence of consecutive code points that are not delimiters. If returnDelims is true , delimiter code points are themselves considered to be tokens. In this case a token will be received for each delimiter code point. A token is thus either one delimiter code point, or a maximal sequence of consecutive code points that are not delimiters. A StringTokenizer object internally maintains a current position within the string to be tokenized. Some operations advance this current position past the code point processed. A token is returned by taking a substring of the string that was used to create the StringTokenizer object. Here's an example of the use of the default delimiter StringTokenizer : StringTokenizer st = new StringTokenizer(\"this is a test\"); while (st.HasMoreTokens()) { println(st.NextToken()); } This prints the following output: this is a test Here's an example of how to use a StringTokenizer with a user specified delimiter: StringTokenizer st = new StringTokenizer( \"this is a test with supplementary characters \\ud800\\ud800\\udc00\\udc00\", \" \\ud800\\udc00\"); while (st.HasMoreTokens()) { println(st.NextToken()); } This prints the following output: this is a test with supplementary characters \\ud800 \\udc00 Constructors | Improve this Doc View Source StringTokenizer(String) Constructs a new StringTokenizer for the parameter string using whitespace as the delimiter. The Lucene.Net.Support.StringTokenizer.returnDelimiters flag is set to false . Declaration public StringTokenizer(string str) Parameters Type Name Description System.String str The string to be tokenized. | Improve this Doc View Source StringTokenizer(String, String) Constructs a new StringTokenizer for the parameter string using the specified delimiters. The Lucene.Net.Support.StringTokenizer.returnDelimiters flag is set to false . If delimiters is null , this constructor doesn't throw an System.Exception , but later calls to some methods might throw an System.ArgumentNullException or System.InvalidOperationException . Declaration public StringTokenizer(string str, string delimiters) Parameters Type Name Description System.String str The string to be tokenized. System.String delimiters The delimiters to use. | Improve this Doc View Source StringTokenizer(String, String, Boolean) Constructs a new StringTokenizer for the parameter string using the specified delimiters, returning the delimiters as tokens if the parameter returnDelimiters is true . If delimiters is null this constructor doesn't throw an System.Exception , but later calls to some methods might throw an System.ArgumentNullException or System.InvalidOperationException . Declaration public StringTokenizer(string str, string delimiters, bool returnDelimiters) Parameters Type Name Description System.String str The string to be tokenized. System.String delimiters The delimiters to use. System.Boolean returnDelimiters true to return each delimiter as a token. Methods | Improve this Doc View Source CountTokens() Returns the number of unprocessed tokens remaining in the string. Declaration public virtual int CountTokens() Returns Type Description System.Int32 number of tokens that can be retreived before an System.Exception will result from a call to NextToken() . | Improve this Doc View Source HasMoreTokens() Returns true if unprocessed tokens remain. Declaration public bool HasMoreTokens() Returns Type Description System.Boolean true if unprocessed tokens remain. | Improve this Doc View Source NextToken() Returns the next token in the string as a System.String . Declaration public string NextToken() Returns Type Description System.String Next token in the string as a System.String . Exceptions Type Condition System.InvalidOperationException If no tokens remain. | Improve this Doc View Source NextToken(String) Returns the next token in the string as a System.String . The delimiters used are changed to the specified delimiters. Declaration public string NextToken(string delims) Parameters Type Name Description System.String delims The new delimiters to use. Returns Type Description System.String Next token in the string as a System.String . Exceptions Type Condition System.InvalidOperationException If no tokens remain. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringInterner.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringInterner.html",
    "title": "Class StringInterner | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringInterner Subclasses of StringInterner are required to return the same single String object for all equal strings. Depending on the implementation, this may not be the same object returned as String.intern(). This StringInterner base class simply delegates to String.intern(). LUCENENET specific. Inheritance System.Object StringInterner SimpleStringInterner Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class StringInterner Methods | Improve this Doc View Source Intern(Char[], Int32, Int32) Returns a single object instance for each equal string. Declaration public virtual string Intern(char[] arr, int offset, int len) Parameters Type Name Description System.Char [] arr System.Int32 offset System.Int32 len Returns Type Description System.String | Improve this Doc View Source Intern(String) Returns a single object instance for each equal string. Declaration public virtual string Intern(string s) Parameters Type Name Description System.String s Returns Type Description System.String Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.StringExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringExtensions.html",
    "title": "Class StringExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringExtensions Inheritance System.Object StringExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class StringExtensions Methods | Improve this Doc View Source CodePointAt(String, Int32) Declaration public static int CodePointAt(this string str, int index) Parameters Type Name Description System.String str System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointCount(String, Int32, Int32) Returns the number of Unicode code points in the specified text range of this System.String . The text range begins at the specified beginIndex and extends to the System.Char at index endIndex - 1 . Thus the length (in System.Char s) of the text range is endIndex-beginIndex . Unpaired surrogates within the text range count as one code point each. Declaration public static int CodePointCount(this string str, int beginIndex, int endIndex) Parameters Type Name Description System.String str System.Int32 beginIndex the index to the first System.Char of the text range. System.Int32 endIndex the index after the last System.Char of the text range. Returns Type Description System.Int32 the number of Unicode code points in the specified text range Exceptions Type Condition System.IndexOutOfRangeException if the beginIndex is negative, or endIndex is larger than the length of this System.String , or beginIndex is larger than endIndex . | Improve this Doc View Source CompareToOrdinal(String, String) This method mimics the Java String.compareTo(String) method in that it Compares the strings using lexographic sorting rules Performs a culture-insensitive comparison This method is a convenience to replace the .NET CompareTo method on all strings, provided the logic does not expect specific values but is simply comparing them with > or < . Declaration public static int CompareToOrdinal(this string str, string value) Parameters Type Name Description System.String str System.String value The string to compare with. Returns Type Description System.Int32 An integer that indicates the lexical relationship between the two comparands. Less than zero indicates the comparison value is greater than the current string. Zero indicates the strings are equal. Greater than zero indicates the comparison value is less than the current string. | Improve this Doc View Source GetBytes(String, Encoding) Declaration public static byte[] GetBytes(this string str, Encoding enc) Parameters Type Name Description System.String str System.Text.Encoding enc Returns Type Description System.Byte [] | Improve this Doc View Source IndexOf(String, Int32) Returns the index within this string of the first occurrence of the specified codePoint . Declaration public static int IndexOf(this string str, int codePoint) Parameters Type Name Description System.String str this string System.Int32 codePoint a codePoint representing a single character or surrogate pair Returns Type Description System.Int32 the index of the first occurrence of the character (or surrogate pair) in the string, or -1 if the character (or surrogate pair) doesn't occur. | Improve this Doc View Source Intern(String) Searches an internal table of strings for a string equal to this string. If the string is not in the table, it is added. Returns the string contained in the table which is equal to this string. The same string object is always returned for strings which are equal. Declaration public static string Intern(this string s) Parameters Type Name Description System.String s Returns Type Description System.String The interned string equal to this string. | Improve this Doc View Source OffsetByCodePoints(String, Int32, Int32) Declaration public static int OffsetByCodePoints(this string seq, int index, int codePointOffset) Parameters Type Name Description System.String seq System.Int32 index System.Int32 codePointOffset Returns Type Description System.Int32 | Improve this Doc View Source ToBytesRefArray(String, Encoding) Declaration public static BytesRef ToBytesRefArray(this string str, Encoding enc) Parameters Type Name Description System.String str System.Text.Encoding enc Returns Type Description BytesRef | Improve this Doc View Source ToCharSequence(String) Convenience method to wrap a string in a StringCharSequenceWrapper so a System.String can be used as ICharSequence in .NET. Declaration public static ICharSequence ToCharSequence(this string str) Parameters Type Name Description System.String str Returns Type Description ICharSequence | Improve this Doc View Source TrimEnd(String[]) Removes null or empty elements from the end of a string array. Declaration public static string[] TrimEnd(this string[] input) Parameters Type Name Description System.String [] input This string array. Returns Type Description System.String [] The array with any null or empty elements removed from the end."
  },
  "api/Lucene.Net/Lucene.Net.Support.StringBuilderExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.StringBuilderExtensions.html",
    "title": "Class StringBuilderExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class StringBuilderExtensions Inheritance System.Object StringBuilderExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class StringBuilderExtensions Methods | Improve this Doc View Source AppendCodePoint(StringBuilder, Int32) Appends the string representation of the codePoint argument to this sequence. The argument is appended to the contents of this sequence. The length of this sequence increases by CharCount(Int32) . The overall effect is exactly as if the argument were converted to a System.Char array by the method ToChars(Int32) and the character in that array were then System.Text.StringBuilder.Append(System.Char[]) to this System.Text.StringBuilder . Declaration public static StringBuilder AppendCodePoint(this StringBuilder text, int codePoint) Parameters Type Name Description System.Text.StringBuilder text This System.Text.StringBuilder . System.Int32 codePoint a Unicode code point Returns Type Description System.Text.StringBuilder a reference to this object. | Improve this Doc View Source CodePointAt(StringBuilder, Int32) Returns the character (Unicode code point) at the specified index. The index refers to char values (Unicode code units) and ranges from 0 to Length - 1. If the char value specified at the given index is in the high-surrogate range, the following index is less than the length of this sequence, and the char value at the following index is in the low-surrogate range, then the supplementary code point corresponding to this surrogate pair is returned. Otherwise, the char value at the given index is returned. Declaration public static int CodePointAt(this StringBuilder text, int index) Parameters Type Name Description System.Text.StringBuilder text this System.Text.StringBuilder System.Int32 index the index to the char values Returns Type Description System.Int32 the code point value of the character at the index Exceptions Type Condition System.IndexOutOfRangeException if the index argument is negative or not less than the length of this sequence. | Improve this Doc View Source CodePointCount(StringBuilder, Int32, Int32) Returns the number of Unicode code points in the specified text range of this System.Text.StringBuilder . The text range begins at the specified beginIndex and extends to the System.Char at index endIndex - 1 . Thus the length (in System.Char s) of the text range is endIndex-beginIndex . Unpaired surrogates within this sequence count as one code point each. Declaration public static int CodePointCount(this StringBuilder text, int beginIndex, int endIndex) Parameters Type Name Description System.Text.StringBuilder text this System.Text.StringBuilder System.Int32 beginIndex the index to the first System.Char of the text range. System.Int32 endIndex the index after the last System.Char of the text range. Returns Type Description System.Int32 the number of Unicode code points in the specified text range. Exceptions Type Condition System.IndexOutOfRangeException if the beginIndex is negative, or endIndex is larger than the length of this sequence, or beginIndex is larger than endIndex . | Improve this Doc View Source GetChars(StringBuilder) Copies the array from the System.Text.StringBuilder into a new array and returns it. Declaration public static char[] GetChars(this StringBuilder text) Parameters Type Name Description System.Text.StringBuilder text this System.Text.StringBuilder Returns Type Description System.Char [] | Improve this Doc View Source IndexOf(StringBuilder, String) Searches for the first index of the specified character. The search for the character starts at the beginning and moves towards the end. Declaration public static int IndexOf(this StringBuilder text, string value) Parameters Type Name Description System.Text.StringBuilder text This System.Text.StringBuilder . System.String value The string to find. Returns Type Description System.Int32 The index of the specified character, or -1 if the character isn't found. | Improve this Doc View Source IndexOf(StringBuilder, String, Int32) Searches for the index of the specified character. The search for the character starts at the specified offset and moves towards the end. Declaration public static int IndexOf(this StringBuilder text, string value, int startIndex) Parameters Type Name Description System.Text.StringBuilder text This System.Text.StringBuilder . System.String value The string to find. System.Int32 startIndex The starting offset. Returns Type Description System.Int32 The index of the specified character, or -1 if the character isn't found. | Improve this Doc View Source Reverse(StringBuilder) Causes this character sequence to be replaced by the reverse of the sequence. If there are any surrogate pairs included in the sequence, these are treated as single characters for the reverse operation. Thus, the order of the high-low surrogates is never reversed. Let n be the character length of this character sequence (not the length in System.Char values) just prior to execution of the Reverse(StringBuilder) method. Then the character at index k in the new character sequence is equal to the character at index n-k-1 in the old character sequence. Note that the reverse operation may result in producing surrogate pairs that were unpaired low-surrogates and high-surrogates before the operation. For example, reversing \"\\uDC00\\uD800\" produces \"\\uD800\\uDC00\" which is a valid surrogate pair. Declaration public static StringBuilder Reverse(this StringBuilder text) Parameters Type Name Description System.Text.StringBuilder text this System.Text.StringBuilder Returns Type Description System.Text.StringBuilder a reference to this System.Text.StringBuilder . | Improve this Doc View Source ToCharSequence(StringBuilder) Convenience method to wrap a string in a StringBuilderCharSequenceWrapper so a System.Text.StringBuilder can be used as ICharSequence in .NET. Declaration public static ICharSequence ToCharSequence(this StringBuilder text) Parameters Type Name Description System.Text.StringBuilder text Returns Type Description ICharSequence"
  },
  "api/Lucene.Net/Lucene.Net.Support.IO.Buffer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IO.Buffer.html",
    "title": "Class Buffer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Buffer A buffer is a list of elements of a specific primitive type. A buffer can be described by the following properties: Capacity: The number of elements a buffer can hold. Capacity may not be negative and never changes. Position: A cursor of this buffer. Elements are read or written at the position if you do not specify an index explicitly. Position may not be negative and not greater than the limit. Limit: Controls the scope of accessible elements. You can only read or write elements from index zero to limit - 1 . Accessing elements out of the scope will cause an exception. Limit may not be negative and not greater than capacity. Mark: Used to remember the current position, so that you can reset the position later. Mark may not be negative and no greater than position. A buffer can be read-only or read-write. Trying to modify the elements of a read-only buffer will cause a ReadOnlyBufferException , while changing the position, limit and mark of a read-only buffer is OK. A buffer can be direct or indirect. A direct buffer will try its best to take advantage of native memory APIs and it may not stay in the heap, thus it is not affected by garbage collection. Buffers are not thread-safe. If concurrent access to a buffer instance is required, then the callers are responsible to take care of the synchronization issues. Inheritance System.Object Buffer ByteBuffer Int64Buffer Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support.IO Assembly : Lucene.Net.dll Syntax public abstract class Buffer Properties | Improve this Doc View Source Capacity Returns the capacity of this buffer. Declaration public int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source HasRemaining Indicates if there are elements remaining in this buffer, that is if position < limit . Declaration public bool HasRemaining { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IsReadOnly Indicates whether this buffer is read-only. Declaration public abstract bool IsReadOnly { get; } Property Value Type Description System.Boolean true if, this buffer is read-only; otherwise false . | Improve this Doc View Source Limit Gets or Sets the limit of this buffer. Declaration public int Limit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Position Returns the position of this buffer. Declaration public int Position { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Remaining Returns the number of remaining elements in this buffer, that is limit - position . Declaration public int Remaining { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Clear() Clears this buffer. While the content of this buffer is not changed, the following internal changes take place: the current position is reset back to the start of the buffer, the value of the buffer limit is made equal to the capacity and mark is cleared. Declaration public Buffer Clear() Returns Type Description Buffer This buffer | Improve this Doc View Source Flip() Flips this buffer. The limit is set to the current position, then the position is set to zero, and the mark is cleared. The content of this buffer is not changed. Declaration public Buffer Flip() Returns Type Description Buffer This buffer | Improve this Doc View Source Mark() Marks the current position, so that the position may return to this point later by calling Reset() . Declaration public Buffer Mark() Returns Type Description Buffer This buffer | Improve this Doc View Source Reset() Resets the position of this buffer to the Lucene.Net.Support.IO.Buffer.mark . Declaration public Buffer Reset() Returns Type Description Buffer This buffer Exceptions Type Condition InvalidMarkException If the mark has not been set | Improve this Doc View Source Rewind() Rewinds this buffer. The position is set to zero, and the mark is cleared. The content of this] buffer is not changed. Declaration public Buffer Rewind() Returns Type Description Buffer This buffer | Improve this Doc View Source SetLimit(Int32) Sets the limit of this buffer. If the current position in the buffer is in excess of newLimit then, on returning from this call, it will have been adjusted to be equivalent to newLimit . If the mark is set and is greater than the new limit, then it is cleared. Declaration public Buffer SetLimit(int newLimit) Parameters Type Name Description System.Int32 newLimit The new limit value; must be non-negative and no larger than this buffer's capacity Returns Type Description Buffer This buffer Exceptions Type Condition System.ArgumentException If newLimit is invalid. | Improve this Doc View Source SetPosition(Int32) Sets the position of this buffer. If the mark is set and it is greater than the new position, then it is cleared. Declaration public Buffer SetPosition(int newPosition) Parameters Type Name Description System.Int32 newPosition The new position, must be not negative and not greater than limit. Returns Type Description Buffer This buffer Exceptions Type Condition System.ArgumentException If newPosition is invalid. Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.IndexWriterConfigExtensions.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.IndexWriterConfigExtensions.html",
    "title": "Class IndexWriterConfigExtensions | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class IndexWriterConfigExtensions Extension methods that can be used to provide similar IndexWriterConfig syntax as Java Lucene. (config.SetCheckIntegrityAtMerge(100).SetMaxBufferedDocs(1000);) Inheritance System.Object IndexWriterConfigExtensions Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class IndexWriterConfigExtensions Methods | Improve this Doc View Source SetCheckIntegrityAtMerge(IndexWriterConfig, Boolean) Builder method for CheckIntegrityAtMerge . Declaration public static IndexWriterConfig SetCheckIntegrityAtMerge(this IndexWriterConfig config, bool checkIntegrityAtMerge) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean checkIntegrityAtMerge Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetCheckIntegrityAtMerge(LiveIndexWriterConfig, Boolean) Builder method for CheckIntegrityAtMerge . Declaration public static LiveIndexWriterConfig SetCheckIntegrityAtMerge(this LiveIndexWriterConfig config, bool checkIntegrityAtMerge) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Boolean checkIntegrityAtMerge Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetCodec(IndexWriterConfig, Codec) Builder method for Codec . Declaration public static IndexWriterConfig SetCodec(this IndexWriterConfig config, Codec codec) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance Codec codec Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetDefaultWriteLockTimeout(IndexWriterConfig, Int64) Builder method for DefaultWriteLockTimeout . Declaration public static void SetDefaultWriteLockTimeout(this IndexWriterConfig config, long writeLockTimeout) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int64 writeLockTimeout | Improve this Doc View Source SetIndexCommit(IndexWriterConfig, IndexCommit) Builder method for IndexCommit . Declaration public static IndexWriterConfig SetIndexCommit(this IndexWriterConfig config, IndexCommit commit) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexCommit commit Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetIndexDeletionPolicy(IndexWriterConfig, IndexDeletionPolicy) Builder method for IndexDeletionPolicy . Declaration public static IndexWriterConfig SetIndexDeletionPolicy(this IndexWriterConfig config, IndexDeletionPolicy deletionPolicy) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexDeletionPolicy deletionPolicy Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDeleteTerms(IndexWriterConfig, Int32) Builder method for MaxBufferedDeleteTerms . Declaration public static IndexWriterConfig SetMaxBufferedDeleteTerms(this IndexWriterConfig config, int maxBufferedDeleteTerms) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxBufferedDeleteTerms Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDeleteTerms(LiveIndexWriterConfig, Int32) Builder method for MaxBufferedDeleteTerms . Declaration public static LiveIndexWriterConfig SetMaxBufferedDeleteTerms(this LiveIndexWriterConfig config, int maxBufferedDeleteTerms) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 maxBufferedDeleteTerms Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDocs(IndexWriterConfig, Int32) Builder method for MaxBufferedDocs . Declaration public static IndexWriterConfig SetMaxBufferedDocs(this IndexWriterConfig config, int maxBufferedDocs) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxBufferedDocs Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMaxBufferedDocs(LiveIndexWriterConfig, Int32) Builder method for MaxBufferedDocs . Declaration public static LiveIndexWriterConfig SetMaxBufferedDocs(this LiveIndexWriterConfig config, int maxBufferedDocs) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 maxBufferedDocs Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMaxThreadStates(IndexWriterConfig, Int32) Builder method for MaxThreadStates . Declaration public static IndexWriterConfig SetMaxThreadStates(this IndexWriterConfig config, int maxThreadStates) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 maxThreadStates Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergedSegmentWarmer(IndexWriterConfig, IndexWriter.IndexReaderWarmer) Builder method for MergedSegmentWarmer . Declaration public static IndexWriterConfig SetMergedSegmentWarmer(this IndexWriterConfig config, IndexWriter.IndexReaderWarmer mergeSegmentWarmer) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IndexWriter.IndexReaderWarmer mergeSegmentWarmer Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergedSegmentWarmer(LiveIndexWriterConfig, IndexWriter.IndexReaderWarmer) Builder method for MergedSegmentWarmer . Declaration public static LiveIndexWriterConfig SetMergedSegmentWarmer(this LiveIndexWriterConfig config, IndexWriter.IndexReaderWarmer mergeSegmentWarmer) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance IndexWriter.IndexReaderWarmer mergeSegmentWarmer Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetMergePolicy(IndexWriterConfig, MergePolicy) Builder method for MergePolicy . Declaration public static IndexWriterConfig SetMergePolicy(this IndexWriterConfig config, MergePolicy mergePolicy) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance MergePolicy mergePolicy Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetMergeScheduler(IndexWriterConfig, IMergeScheduler) Builder method for MergeScheduler . Declaration public static IndexWriterConfig SetMergeScheduler(this IndexWriterConfig config, IMergeScheduler mergeScheduler) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance IMergeScheduler mergeScheduler Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetOpenMode(IndexWriterConfig, OpenMode) Builder method for OpenMode . Declaration public static IndexWriterConfig SetOpenMode(this IndexWriterConfig config, OpenMode openMode) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance OpenMode openMode Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetRAMBufferSizeMB(IndexWriterConfig, Double) Builder method for RAMBufferSizeMB . Declaration public static IndexWriterConfig SetRAMBufferSizeMB(this IndexWriterConfig config, double ramBufferSizeMB) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Double ramBufferSizeMB Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetRAMBufferSizeMB(LiveIndexWriterConfig, Double) Builder method for RAMBufferSizeMB . Declaration public static LiveIndexWriterConfig SetRAMBufferSizeMB(this LiveIndexWriterConfig config, double ramBufferSizeMB) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Double ramBufferSizeMB Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetRAMPerThreadHardLimitMB(IndexWriterConfig, Int32) Builder method for RAMPerThreadHardLimitMB . Declaration public static IndexWriterConfig SetRAMPerThreadHardLimitMB(this IndexWriterConfig config, int perThreadHardLimitMB) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 perThreadHardLimitMB Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderPooling(IndexWriterConfig, Boolean) Builder method for UseReaderPooling . Declaration public static IndexWriterConfig SetReaderPooling(this IndexWriterConfig config, bool readerPooling) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean readerPooling Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderTermsIndexDivisor(IndexWriterConfig, Int32) Builder method for ReaderTermsIndexDivisor . Declaration public static IndexWriterConfig SetReaderTermsIndexDivisor(this IndexWriterConfig config, int divisor) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 divisor Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetReaderTermsIndexDivisor(LiveIndexWriterConfig, Int32) Builder method for ReaderTermsIndexDivisor . Declaration public static LiveIndexWriterConfig SetReaderTermsIndexDivisor(this LiveIndexWriterConfig config, int divisor) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 divisor Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetSimilarity(IndexWriterConfig, Similarity) Builder method for Similarity . Declaration public static IndexWriterConfig SetSimilarity(this IndexWriterConfig config, Similarity similarity) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance Similarity similarity Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetTermIndexInterval(IndexWriterConfig, Int32) Builder method for TermIndexInterval . Declaration public static IndexWriterConfig SetTermIndexInterval(this IndexWriterConfig config, int interval) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int32 interval Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetTermIndexInterval(LiveIndexWriterConfig, Int32) Builder method for TermIndexInterval . Declaration public static LiveIndexWriterConfig SetTermIndexInterval(this LiveIndexWriterConfig config, int interval) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Int32 interval Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetUseCompoundFile(IndexWriterConfig, Boolean) Builder method for UseCompoundFile . Declaration public static IndexWriterConfig SetUseCompoundFile(this IndexWriterConfig config, bool useCompoundFile) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Boolean useCompoundFile Returns Type Description IndexWriterConfig this IndexWriterConfig instance | Improve this Doc View Source SetUseCompoundFile(LiveIndexWriterConfig, Boolean) Builder method for UseCompoundFile . Declaration public static LiveIndexWriterConfig SetUseCompoundFile(this LiveIndexWriterConfig config, bool useCompoundFile) Parameters Type Name Description LiveIndexWriterConfig config this LiveIndexWriterConfig instance System.Boolean useCompoundFile Returns Type Description LiveIndexWriterConfig this LiveIndexWriterConfig instance | Improve this Doc View Source SetWriteLockTimeout(IndexWriterConfig, Int64) Builder method for WriteLockTimeout . Declaration public static IndexWriterConfig SetWriteLockTimeout(this IndexWriterConfig config, long writeLockTimeout) Parameters Type Name Description IndexWriterConfig config this IndexWriterConfig instance System.Int64 writeLockTimeout Returns Type Description IndexWriterConfig this IndexWriterConfig instance"
  },
  "api/Lucene.Net/Lucene.Net.Support.Collections.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Collections.html",
    "title": "Class Collections | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Collections Inheritance System.Object Collections Inherited Members System.Object.Equals(System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public static class Collections Methods | Improve this Doc View Source AddAll<T>(ISet<T>, IEnumerable<T>) Declaration public static bool AddAll<T>(ISet<T> set, IEnumerable<T> elements) Parameters Type Name Description System.Collections.Generic.ISet <T> set System.Collections.Generic.IEnumerable <T> elements Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source EmptyList<T>() Declaration public static IList<T> EmptyList<T>() Returns Type Description System.Collections.Generic.IList <T> Type Parameters Name Description T | Improve this Doc View Source EmptyMap<TKey, TValue>() Declaration public static IDictionary<TKey, TValue> EmptyMap<TKey, TValue>() Returns Type Description System.Collections.Generic.IDictionary <TKey, TValue> Type Parameters Name Description TKey TValue | Improve this Doc View Source Equals(Object, Object) A helper method to recursively determine equality based on the values of the collection and all nested collections. Note this operation currently only supports System.Collections.Generic.IList<T> , System.Collections.Generic.ISet<T> , and System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public static bool Equals(object objA, object objB) Parameters Type Name Description System.Object objA System.Object objB Returns Type Description System.Boolean | Improve this Doc View Source Equals<T>(IList<T>, IList<T>) The same implementation of Equals from Java's AbstractList (the default implementation for all lists) This algorithm depends on the order of the items in the list. It is recursive and will determine equality based on the values of all nested collections. Note this operation currently only supports System.Collections.Generic.IList<T> , System.Collections.Generic.ISet<T> , and System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public static bool Equals<T>(IList<T> listA, IList<T> listB) Parameters Type Name Description System.Collections.Generic.IList <T> listA System.Collections.Generic.IList <T> listB Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source Equals<T>(ISet<T>, ISet<T>) The same implementation of Equals from Java's AbstractSet (the default implementation for all sets) This algoritm does not depend on the order of the items in the set. It is recursive and will determine equality based on the values of all nested collections. Note this operation currently only supports System.Collections.Generic.IList<T> , System.Collections.Generic.ISet<T> , and System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public static bool Equals<T>(ISet<T> setA, ISet<T> setB) Parameters Type Name Description System.Collections.Generic.ISet <T> setA System.Collections.Generic.ISet <T> setB Returns Type Description System.Boolean Type Parameters Name Description T | Improve this Doc View Source Equals<TKey, TValue>(IDictionary<TKey, TValue>, IDictionary<TKey, TValue>) This is the same implemenation of Equals from Java's AbstractMap (the default implementation of all dictionaries) This algoritm does not depend on the order of the items in the dictionary. It is recursive and will determine equality based on the values of all nested collections. Note this operation currently only supports System.Collections.Generic.IList<T> , System.Collections.Generic.ISet<T> , and System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public static bool Equals<TKey, TValue>(IDictionary<TKey, TValue> dictionaryA, IDictionary<TKey, TValue> dictionaryB) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dictionaryA System.Collections.Generic.IDictionary <TKey, TValue> dictionaryB Returns Type Description System.Boolean Type Parameters Name Description TKey TValue | Improve this Doc View Source GetHashCode(Object) This method generally assists with the recursive GetHashCode() that builds a hash code based on all of the values in a collection including any nested collections (lists, sets, arrays, and dictionaries). Note this currently only supports System.Collections.Generic.IList<T> , System.Collections.Generic.ISet<T> , and System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public static int GetHashCode(object obj) Parameters Type Name Description System.Object obj the object to build the hash code for Returns Type Description System.Int32 a value that represents the unique state of all of the values and nested collection values in the object, provided the main object itself is a collection, otherwise calls System.Object.GetHashCode() on the object that is passed. | Improve this Doc View Source GetHashCode<T>(IList<T>) The same implementation of GetHashCode from Java's AbstractList (the default implementation for all lists). This algorithm depends on the order of the items in the list. It is recursive and will build the hash code based on the values of all nested collections. Note this operation currently only supports System.Collections.Generic.IList<T> , System.Collections.Generic.ISet<T> , and System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public static int GetHashCode<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list Returns Type Description System.Int32 Type Parameters Name Description T | Improve this Doc View Source GetHashCode<T>(ISet<T>) The same implementation of GetHashCode from Java's AbstractSet (the default implementation for all sets) This algorithm does not depend on the order of the items in the set. It is recursive and will build the hash code based on the values of all nested collections. Note this operation currently only supports System.Collections.Generic.IList<T> , System.Collections.Generic.ISet<T> , and System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public static int GetHashCode<T>(ISet<T> set) Parameters Type Name Description System.Collections.Generic.ISet <T> set Returns Type Description System.Int32 Type Parameters Name Description T | Improve this Doc View Source GetHashCode<TKey, TValue>(IDictionary<TKey, TValue>) The same implementation of GetHashCode from Java's AbstractMap (the default implementation for all dictionaries) This algoritm does not depend on the order of the items in the dictionary. It is recursive and will build the hash code based on the values of all nested collections. Note this operation currently only supports System.Collections.Generic.IList<T> , System.Collections.Generic.ISet<T> , and System.Collections.Generic.IDictionary<TKey, TValue> . Declaration public static int GetHashCode<TKey, TValue>(IDictionary<TKey, TValue> dictionary) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dictionary Returns Type Description System.Int32 Type Parameters Name Description TKey TValue | Improve this Doc View Source NewSetFromMap<T, S>(IDictionary<T, Nullable<Boolean>>) Declaration public static ISet<T> NewSetFromMap<T, S>(IDictionary<T, bool?> map) Parameters Type Name Description System.Collections.Generic.IDictionary <T, System.Nullable < System.Boolean >> map Returns Type Description System.Collections.Generic.ISet <T> Type Parameters Name Description T S | Improve this Doc View Source Reverse<T>(IList<T>) Declaration public static void Reverse<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list Type Parameters Name Description T | Improve this Doc View Source ReverseOrder<T>() Declaration public static IComparer<T> ReverseOrder<T>() Returns Type Description System.Collections.Generic.IComparer <T> Type Parameters Name Description T | Improve this Doc View Source ReverseOrder<T>(IComparer<T>) Declaration public static IComparer<T> ReverseOrder<T>(IComparer<T> cmp) Parameters Type Name Description System.Collections.Generic.IComparer <T> cmp Returns Type Description System.Collections.Generic.IComparer <T> Type Parameters Name Description T | Improve this Doc View Source Shuffle<T>(IList<T>) Declaration public static void Shuffle<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list Type Parameters Name Description T | Improve this Doc View Source Shuffle<T>(IList<T>, Random) Declaration public static void Shuffle<T>(IList<T> list, Random random) Parameters Type Name Description System.Collections.Generic.IList <T> list System.Random random Type Parameters Name Description T | Improve this Doc View Source Singleton<T>(T) Declaration public static ISet<T> Singleton<T>(T o) Parameters Type Name Description T o Returns Type Description System.Collections.Generic.ISet <T> Type Parameters Name Description T | Improve this Doc View Source SingletonMap<TKey, TValue>(TKey, TValue) Declaration public static IDictionary<TKey, TValue> SingletonMap<TKey, TValue>(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Collections.Generic.IDictionary <TKey, TValue> Type Parameters Name Description TKey TValue | Improve this Doc View Source Swap<T>(IList<T>, Int32, Int32) Declaration public static void Swap<T>(IList<T> list, int index1, int index2) Parameters Type Name Description System.Collections.Generic.IList <T> list System.Int32 index1 System.Int32 index2 Type Parameters Name Description T | Improve this Doc View Source ToString(Object) This is a helper method that assists with recursively building a string of the current collection and all nested collections. Declaration public static string ToString(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.String | Improve this Doc View Source ToString(Object, CultureInfo) This is a helper method that assists with recursively building a string of the current collection and all nested collections, plus the ability to specify culture for formatting of nested numbers and dates. Note that this overload will change the culture of the current thread. Declaration public static string ToString(object obj, CultureInfo culture) Parameters Type Name Description System.Object obj System.Globalization.CultureInfo culture Returns Type Description System.String | Improve this Doc View Source ToString<T>(ICollection<T>) This is the same implementation of ToString from Java's AbstractCollection (the default implementation for all sets and lists) Declaration public static string ToString<T>(ICollection<T> collection) Parameters Type Name Description System.Collections.Generic.ICollection <T> collection Returns Type Description System.String Type Parameters Name Description T | Improve this Doc View Source ToString<T>(ICollection<T>, CultureInfo) This is the same implementation of ToString from Java's AbstractCollection (the default implementation for all sets and lists), plus the ability to specify culture for formatting of nested numbers and dates. Note that this overload will change the culture of the current thread. Declaration public static string ToString<T>(ICollection<T> collection, CultureInfo culture) Parameters Type Name Description System.Collections.Generic.ICollection <T> collection System.Globalization.CultureInfo culture Returns Type Description System.String Type Parameters Name Description T | Improve this Doc View Source ToString<TKey, TValue>(IDictionary<TKey, TValue>) This is the same implementation of ToString from Java's AbstractMap (the default implementation for all dictionaries) Declaration public static string ToString<TKey, TValue>(IDictionary<TKey, TValue> dictionary) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dictionary Returns Type Description System.String Type Parameters Name Description TKey TValue | Improve this Doc View Source ToString<TKey, TValue>(IDictionary<TKey, TValue>, CultureInfo) This is the same implementation of ToString from Java's AbstractMap (the default implementation for all dictionaries), plus the ability to specify culture for formatting of nested numbers and dates. Note that this overload will change the culture of the current thread. Declaration public static string ToString<TKey, TValue>(IDictionary<TKey, TValue> dictionary, CultureInfo culture) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> dictionary System.Globalization.CultureInfo culture Returns Type Description System.String Type Parameters Name Description TKey TValue | Improve this Doc View Source UnmodifiableList<T>(IList<T>) Declaration public static IList<T> UnmodifiableList<T>(IList<T> list) Parameters Type Name Description System.Collections.Generic.IList <T> list Returns Type Description System.Collections.Generic.IList <T> Type Parameters Name Description T | Improve this Doc View Source UnmodifiableMap<TKey, TValue>(IDictionary<TKey, TValue>) Declaration public static IDictionary<TKey, TValue> UnmodifiableMap<TKey, TValue>(IDictionary<TKey, TValue> d) Parameters Type Name Description System.Collections.Generic.IDictionary <TKey, TValue> d Returns Type Description System.Collections.Generic.IDictionary <TKey, TValue> Type Parameters Name Description TKey TValue | Improve this Doc View Source UnmodifiableSet<T>(ISet<T>) Declaration public static ISet<T> UnmodifiableSet<T>(ISet<T> list) Parameters Type Name Description System.Collections.Generic.ISet <T> list Returns Type Description System.Collections.Generic.ISet <T> Type Parameters Name Description T"
  },
  "api/Lucene.Net/Lucene.Net.Support.Character.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.Character.html",
    "title": "Class Character | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class Character Mimics Java's Character class. Inheritance System.Object Character Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Support Assembly : Lucene.Net.dll Syntax public class Character Fields | Improve this Doc View Source MAX_CODE_POINT Declaration public const int MAX_CODE_POINT = 1114111 Field Value Type Description System.Int32 | Improve this Doc View Source MAX_HIGH_SURROGATE Declaration public const char MAX_HIGH_SURROGATE = '\\uDBFF' Field Value Type Description System.Char | Improve this Doc View Source MAX_LOW_SURROGATE Declaration public const char MAX_LOW_SURROGATE = '\\uDFFF' Field Value Type Description System.Char | Improve this Doc View Source MAX_RADIX Declaration public const int MAX_RADIX = 36 Field Value Type Description System.Int32 | Improve this Doc View Source MAX_SURROGATE Declaration public const char MAX_SURROGATE = '\\uDFFF' Field Value Type Description System.Char | Improve this Doc View Source MIN_CODE_POINT Declaration public const int MIN_CODE_POINT = 0 Field Value Type Description System.Int32 | Improve this Doc View Source MIN_HIGH_SURROGATE Declaration public const char MIN_HIGH_SURROGATE = '\\uD800' Field Value Type Description System.Char | Improve this Doc View Source MIN_LOW_SURROGATE Declaration public const char MIN_LOW_SURROGATE = '\\uDC00' Field Value Type Description System.Char | Improve this Doc View Source MIN_RADIX Declaration public const int MIN_RADIX = 2 Field Value Type Description System.Int32 | Improve this Doc View Source MIN_SUPPLEMENTARY_CODE_POINT Declaration public const int MIN_SUPPLEMENTARY_CODE_POINT = 65536 Field Value Type Description System.Int32 | Improve this Doc View Source MIN_SURROGATE Declaration public const char MIN_SURROGATE = '\\uD800' Field Value Type Description System.Char Methods | Improve this Doc View Source CharCount(Int32) Declaration public static int CharCount(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(ICharSequence, Int32) Declaration public static int CodePointAt(ICharSequence seq, int index) Parameters Type Name Description ICharSequence seq System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(Char, Char) Declaration public static int CodePointAt(char high, char low) Parameters Type Name Description System.Char high System.Char low Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(Char[], Int32, Int32) Declaration public static int CodePointAt(char[] a, int index, int limit) Parameters Type Name Description System.Char [] a System.Int32 index System.Int32 limit Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(String, Int32) Declaration public static int CodePointAt(string seq, int index) Parameters Type Name Description System.String seq System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointAt(StringBuilder, Int32) Declaration public static int CodePointAt(StringBuilder seq, int index) Parameters Type Name Description System.Text.StringBuilder seq System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointBefore(Char[], Int32) Declaration public static int CodePointBefore(char[] seq, int index) Parameters Type Name Description System.Char [] seq System.Int32 index Returns Type Description System.Int32 | Improve this Doc View Source CodePointCount(Char[], Int32, Int32) Declaration public static int CodePointCount(char[] a, int offset, int count) Parameters Type Name Description System.Char [] a System.Int32 offset System.Int32 count Returns Type Description System.Int32 | Improve this Doc View Source CodePointCount(String, Int32, Int32) Returns the number of Unicode code points in the text range of the specified char sequence. The text range begins at the specified beginIndex and extends to the char at index endIndex - 1 . Thus the length (in System.Char s) of the text range is endIndex-beginIndex . Unpaired surrogates within the text range count as one code point each. Declaration public static int CodePointCount(string seq, int beginIndex, int endIndex) Parameters Type Name Description System.String seq the char sequence System.Int32 beginIndex the index to the first char of the text range. System.Int32 endIndex the index after the last char of the text range. Returns Type Description System.Int32 the number of Unicode code points in the specified text range Exceptions Type Condition System.IndexOutOfRangeException if the beginIndex is negative, or endIndex is larger than the length of the given sequence, or beginIndex is larger than endIndex . | Improve this Doc View Source Digit(Char, Int32) Convenience method to determine the value of the specified character c in the supplied radix. The value of radix must be between MIN_RADIX and MAX_RADIX . Declaration public static int Digit(char c, int radix) Parameters Type Name Description System.Char c The character to determine the value of. System.Int32 radix The radix. Returns Type Description System.Int32 The value of c in radix if radix lies between MIN_RADIX and MAX_RADIX ; -1 otherwise. | Improve this Doc View Source ForDigit(Int32, Int32) Declaration public static char ForDigit(int digit, int radix) Parameters Type Name Description System.Int32 digit System.Int32 radix Returns Type Description System.Char | Improve this Doc View Source GetType(Int32) LUCENENET safe way to get unicode category. The .NET System.Char.ConvertFromUtf32(System.Int32) method should be used first to be safe for surrogate pairs. However, if the value falls between 0x00d800 and 0x00dfff, that method throws an exception. So this is a wrapper that converts the codepoint to a char in those cases. This mimics the behavior of the Java Character.GetType class, but returns the .NET UnicodeCategory enumeration for easy consumption. Declaration public static UnicodeCategory GetType(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Globalization.UnicodeCategory A System.Globalization.UnicodeCategory representing the codePoint . | Improve this Doc View Source IsLetter(Int32) Declaration public static bool IsLetter(int c) Parameters Type Name Description System.Int32 c Returns Type Description System.Boolean | Improve this Doc View Source OffsetByCodePoints(Char[], Int32, Int32, Int32, Int32) Copy of the implementation from Character class in Java http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/lang/Character.java Declaration public static int OffsetByCodePoints(char[] a, int start, int count, int index, int codePointOffset) Parameters Type Name Description System.Char [] a System.Int32 start System.Int32 count System.Int32 index System.Int32 codePointOffset Returns Type Description System.Int32 | Improve this Doc View Source OffsetByCodePoints(String, Int32, Int32) Copy of the implementation from Character class in Java http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/lang/Character.java Declaration public static int OffsetByCodePoints(string seq, int index, int codePointOffset) Parameters Type Name Description System.String seq System.Int32 index System.Int32 codePointOffset Returns Type Description System.Int32 | Improve this Doc View Source ToChars(Int32) Declaration public static char[] ToChars(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Char [] | Improve this Doc View Source ToChars(Int32, Char[], Int32) Declaration public static int ToChars(int codePoint, char[] dst, int dstIndex) Parameters Type Name Description System.Int32 codePoint System.Char [] dst System.Int32 dstIndex Returns Type Description System.Int32 | Improve this Doc View Source ToCodePoint(Char, Char) Declaration public static int ToCodePoint(char high, char low) Parameters Type Name Description System.Char high System.Char low Returns Type Description System.Int32 | Improve this Doc View Source ToLower(Int32) Declaration public static int ToLower(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Int32 | Improve this Doc View Source ToUpper(Int32) Declaration public static int ToUpper(int codePoint) Parameters Type Name Description System.Int32 codePoint Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.html",
    "title": "Namespace Lucene.Net.Support.C5 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Support.C5 Classes CircularQueue<T> ClearedEventArgs ClearedRangeEventArgs CollectionBase<T> Base class (abstract) for ICollection implementations. CollectionModifiedException An exception thrown by enumerators, range views etc. when accessed after the underlying collection has been modified. CollectionValueBase<T> Base class for classes implementing ICollectionValue[T] CollectionValueBase<T>.RaiseForRemoveAllHandler ConcurrentEnumerationException An exception thrown by the MemorySafeEnumerator if the collection is enumerated by multiple threads concurrently DictionaryBase<K, V> A base class for implementing a dictionary based on a set collection implementation. See the source code for C5.HashDictionary`2 for an example DirectedCollectionBase<T> DirectedCollectionValueBase<T> DuplicateNotAllowedException An exception thrown when an operation attempts to create a duplicate in a collection with set semantics ( C5.IExtensible`1.AllowsDuplicates is false) or attempts to create a duplicate key in a dictionary. With collections this can only happen with Insert operations on lists, since the Add operations will not try to create duplictes and either ignore the failure or report it in a bool return value. With dictionaries this can happen with the C5.IDictionary`2.Add(`0,`1) metod. EnumerableBase<T> A base class for implementing an IEnumerable<T> EqualityComparer<T> Utility class for building default generic equality comparers. FixedSizeCollectionException HashDictionary<K, V> A generic dictionary class based on a hash set class C5.HashSet`1 . HashSet<T> A set collection class based on linear hashing IncompatibleViewException An exception thrown by operations on a list that expects an argument that is a view on the same underlying list. InternalException An exception to throw from library code when an internal inconsistency is encountered. InvalidPriorityQueueHandleException ItemAtEventArgs<T> ItemCountEventArgs<T> KeyValuePairComparer<K, V> Default comparer for dictionary entries in a sorted dictionary. Entry comparisons only look at keys and uses an externally defined comparer for that. KeyValuePairEqualityComparer<K, V> Default equalityComparer for dictionary entries. Operations only look at keys and uses an externally defined equalityComparer for that. Logger Logging module MultipleEnumerationException An exception thrown by the MemorySafeEnumerator if the collection is enumerated multiple times when the memory mode is set to Strict NoSuchItemException An exception thrown by a lookup or lookup with update operation that does not find the lookup item and has no other means to communicate failure. The typical scenario is a lookup by key in a dictionary with an indexer, see e.g. C5.IDictionary`2.Item(`0) NotAViewException An exception thrown by an operation on a list ( C5.IList`1 ) that only makes sense for a view, not for an underlying list. NotComparableException An exception thrown by an operation that need to construct a natural comparer for a type. ReadOnlyCollectionException An exception thrown by an update operation on a Read-Only collection or dictionary. This exception will be thrown unconditionally when an update operation (method or set property) is called. No check is made to see if the update operation, if allowed, would actually change the collection. SequencedBase<T> Base class (abstract) for sequenced collection implementations. SequencedCollectionEqualityComparer<T, W> Prototype for a sequenced equalityComparer for something (T) that implements ISequenced[W]. This will use ISequenced[W] specific implementations of the equality comparer operations. Showing SortedDictionaryBase<K, V> A base class for implementing a sorted dictionary based on a sorted set collection implementation. See the source code for C5.TreeDictionary`2 for an example UnlistenableEventException UnsequencedCollectionEqualityComparer<T, W> Prototype for an unsequenced equalityComparer for something (T) that implements ICollection[W] This will use ICollection[W] specific implementations of the equalityComparer operations ViewDisposedException An exception thrown when trying to access a view (a list view on a C5.IList`1 or a snapshot on a C5.IPersistentSorted`1 ) that has been invalidated by some earlier operation. The typical scenario is a view on a list that hash been invalidated by a call to Sort, Reverse or Shuffle on some other, overlapping view or the whole list. Structs KeyValuePair<K, V> An entry in a dictionary from K to V. Interfaces ICollection<T> The simplest interface of a main stream generic collection with lookup, insertion and removal operations. ICollectionValue<T> A generic collection that may be enumerated and can answer efficiently how many items it contains. Like IEnumerable<T> , this interface does not prescribe any operations to initialize or update the collection. The main usage for this interface is to be the return type of query operations on generic collection. IDictionary<K, V> A dictionary with keys of type K and values of type V. Equivalent to a finite partial map from K to V. IDirectedCollectionValue<T> A sized generic collection, that can be enumerated backwards. IDirectedEnumerable<T> A generic collection, that can be enumerated backwards. IExtensible<T> A generic collection to which one may add items. This is just the intersection of the main stream generic collection interfaces and the priority queue interface, C5.ICollection`1 and C5.IPriorityQueue`1 . IIndexed<T> A sequenced collection, where indices of items in the order are maintained IIndexedSorted<T> A collection where items are maintained in sorted order together with their indexes in that order. IList<T> This is an indexed collection, where the item order is chosen by the user at insertion time. NBNBNB: we need a description of the view functionality here! IPersistentSorted<T> The type of a sorted collection with persistence IPriorityQueue<T> A generic collection of items prioritized by a comparison (order) relation. Supports adding items and reporting or removing extremal elements. When adding an item, the user may choose to have a handle allocated for this item in the queue. The resulting handle may be used for deleting the item even if not extremal, and for replacing the item. A priority queue typically only holds numeric priorities associated with some objects maintained separately in other collection objects. IPriorityQueueHandle<T> The base type of a priority queue handle IQueue<T> The interface describing the operations of a FIFO queue data structure. IReadOnlyCollection<T> Represents a strongly-typed, read-only collection of elements. Enables System.Collections.Generic.IReadOnlyCollection to be used in .NET 4.5 projects IReadOnlyList<T> Represents a read-only collection of elements that can be accessed by index. Enables System.Collections.Generic.IReadOnlyList to be used in .NET 4.5 projects ISequenced<T> An editable collection maintaining a definite sequence order of the items. Implementations of this interface must compute the hash code and equality exactly as prescribed in the method definitions in order to be consistent with other collection classes implementing this interface. This interface is usually implemented by explicit interface implementation, not as ordinary virtual methods. IShowable (Describe usage of \"L:300\" format string.) ISorted<T> A sorted collection, i.e. a collection where items are maintained and can be searched for in sorted order. Thus the sequence order is given as a sorting order. The sorting order is defined by a comparer, an object of type IComparer<T> ( C5.IComparer`1 ). Implementors of this interface will normally let the user define the comparer as an argument to a constructor. Usually there will also be constructors without a comparer argument, in which case the comparer should be the defalt comparer for the item type, C5.Comparer`1.Default . The comparer of the sorted collection is available as the System.Collections.Generic.Comparer property ( C5.ISorted`1.Comparer ). The methods are grouped according to Since this interface extends ISequenced<T>, sorted collections will also have an item equalityComparer ( C5.IExtensible`1.EqualityComparer ). This equalityComparer will not be used in connection with the inner workings of the sorted collection, but will be used if the sorted collection is used as an item in a collection of unsequenced or sequenced collections, ( C5.ICollection`1 and C5.ISequenced`1 ) Note that code may check if two sorted collections has the same sorting order by checking if the Comparer properties are equal. This is done a few places in this library for optimization purposes. ISortedDictionary<K, V> A dictionary with sorted keys. IStack<T> The interface describing the operations of a LIFO stack data structure. Enums EnumerationDirection Direction of enumeration order relative to original collection. EventTypeEnum HashSet<T>.Feature Enum class to assist printing of compilation alternatives. MemoryType It specifies the memory type strategy of the internal enumerator implemented to iterate over the collection. Speed The symbolic characterization of the speed of lookups for a collection. The values may refer to worst-case, amortized and/or expected asymtotic complexity wrt. the collection size. Delegates CollectionChangedHandler<T> The type of event raised after an operation on a collection has changed its contents. Normally, a multioperation like AddAll, C5.IExtensible`1.AddAll(System.Collections.Generic.IEnumerable{`0}) will only fire one CollectionChanged event. Any operation that changes the collection must fire CollectionChanged as its last event. CollectionClearedHandler<T> The type of event raised after the Clear() operation on a collection. Note: The Clear() operation will not fire ItemsRemoved events. ItemInsertedHandler<T> The type of event raised after an item has been inserted into a list by an Insert, InsertFirst or InsertLast operation. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an ItemsAdded event will also be fired. ItemRemovedAtHandler<T> The type of event raised after an item has been removed from a list by a RemoveAt(int i) operation (or RemoveFirst(), RemoveLast(), Remove() operation). The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an ItemRemoved event will also be fired. ItemsAddedHandler<T> The type of event raised after an item has been added to a collection. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: an Update operation will fire an ItemsRemoved and an ItemsAdded event. Note: When an item is inserted into a list ( C5.IList`1 ), both ItemInserted and ItemsAdded events will be fired. ItemsRemovedHandler<T> The type of event raised after an item has been removed from a collection. The event will be raised at a point of time, where the collection object is in an internally consistent state and before the corresponding CollectionChanged event is raised. Note: The Clear() operation will not fire ItemsRemoved events. Note: an Update operation will fire an ItemsRemoved and an ItemsAdded event. Note: When an item is removed from a list by the RemoveAt operation, both an ItemsRemoved and an ItemRemovedAt event will be fired."
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.Speed.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.Speed.html",
    "title": "Enum Speed | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum Speed The symbolic characterization of the speed of lookups for a collection. The values may refer to worst-case, amortized and/or expected asymtotic complexity wrt. the collection size. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax public enum Speed : short Fields Name Description Constant Lookup operations like Contains(T item) or the Count property takes time O(1), where n is the size of the collection. Linear Lookup operations like Contains(T item) or the Count property may take time O(n), where n is the size of the collection. Log Lookup operations like Contains(T item) or the Count property takes time O(log n), where n is the size of the collection. PotentiallyInfinite Counting the collection with the Count property may not return (for a synthetic and potentially infinite collection). Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Support.C5.HashSet-1.Feature.html": {
    "href": "api/Lucene.Net/Lucene.Net.Support.C5.HashSet-1.Feature.html",
    "title": "Enum HashSet<T>.Feature | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Enum HashSet<T>.Feature Enum class to assist printing of compilation alternatives. Namespace : Lucene.Net.Support.C5 Assembly : Lucene.Net.dll Syntax [Flags] public enum Feature : short Fields Name Description Chaining Use chaining to resolve index clashes Dummy Nothing InterHashing Use hash function on item hash code LinearProbing Using linear probing to resolve index clashes RandomInterHashing Use a universal family of hash functions on item hash code RefTypeBucket Buckets are of reference type ShrinkTable Shrink table when very sparsely filled ValueTypeBucket Primary buckets are of value type Extension Methods Number.IsNumber()"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelP.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicModelP.html",
    "title": "Class BasicModelP | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicModelP Implements the Poisson approximation for the binomial model for DFR. @lucene.experimental WARNING: for terms that do not meet the expected random distribution (e.g. stopwords), this model may give poor performance, such as abnormally high scores for low tf values. Inheritance System.Object BasicModel BasicModelP Inherited Members BasicModel.Explain(BasicStats, Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicModelP : BasicModel Constructors | Improve this Doc View Source BasicModelP() Sole constructor: parameter-free Declaration public BasicModelP() Fields | Improve this Doc View Source LOG2_E log2(Math.E) , precomputed. Declaration protected static double LOG2_E Field Value Type Description System.Double Methods | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides BasicModel.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides BasicModel.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicStats.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BasicStats.html",
    "title": "Class BasicStats | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BasicStats Stores all statistics commonly used ranking methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity.SimWeight BasicStats LMSimilarity.LMStats Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BasicStats : Similarity.SimWeight Constructors | Improve this Doc View Source BasicStats(String, Single) Constructor. Sets the query boost. Declaration public BasicStats(string field, float queryBoost) Parameters Type Name Description System.String field System.Single queryBoost Fields | Improve this Doc View Source m_avgFieldLength The average field length. Declaration protected float m_avgFieldLength Field Value Type Description System.Single | Improve this Doc View Source m_docFreq The document frequency. Declaration protected long m_docFreq Field Value Type Description System.Int64 | Improve this Doc View Source m_numberOfDocuments The number of documents. Declaration protected long m_numberOfDocuments Field Value Type Description System.Int64 | Improve this Doc View Source m_numberOfFieldTokens The total number of tokens in the field. Declaration protected long m_numberOfFieldTokens Field Value Type Description System.Int64 | Improve this Doc View Source m_queryBoost Query's inner boost. Declaration protected readonly float m_queryBoost Field Value Type Description System.Single | Improve this Doc View Source m_topLevelBoost Any outer query's boost. Declaration protected float m_topLevelBoost Field Value Type Description System.Single | Improve this Doc View Source m_totalBoost For most Similarities, the immediate and the top level query boosts are not handled differently. Hence, this field is just the product of the other two. Declaration protected float m_totalBoost Field Value Type Description System.Single | Improve this Doc View Source m_totalTermFreq The total number of occurrences of this term across all documents. Declaration protected long m_totalTermFreq Field Value Type Description System.Int64 Properties | Improve this Doc View Source AvgFieldLength Returns the average field length. Declaration public virtual float AvgFieldLength { get; set; } Property Value Type Description System.Single | Improve this Doc View Source DocFreq Returns the document frequency. Declaration public virtual long DocFreq { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source Field The field. Declaration public string Field { get; } Property Value Type Description System.String | Improve this Doc View Source NumberOfDocuments Gets or Sets the number of documents. Declaration public virtual long NumberOfDocuments { get; set; } Property Value Type Description System.Int64 | Improve this Doc View Source NumberOfFieldTokens Returns the total number of tokens in the field. Declaration public virtual long NumberOfFieldTokens { get; set; } Property Value Type Description System.Int64 See Also SumTotalTermFreq | Improve this Doc View Source TotalBoost Returns the total boost. Declaration public virtual float TotalBoost { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalTermFreq Returns the total number of occurrences of this term across all documents. Declaration public virtual long TotalTermFreq { get; set; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source GetValueForNormalization() The square of the raw normalization value. Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Similarity.SimWeight.GetValueForNormalization() See Also RawNormalizationValue() | Improve this Doc View Source Normalize(Single, Single) No normalization is done. topLevelBoost is saved in the object, however. Declaration public override void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost Overrides Similarity.SimWeight.Normalize(Single, Single) | Improve this Doc View Source RawNormalizationValue() Computes the raw normalization value. This basic implementation returns the query boost. Subclasses may override this method to include other factors (such as idf), or to save the value for inclusion in Normalize(Single, Single) , etc. Declaration protected virtual float RawNormalizationValue() Returns Type Description System.Single Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.BM25Similarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.BM25Similarity.html",
    "title": "Class BM25Similarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BM25Similarity BM25 Similarity. Introduced in Stephen E. Robertson, Steve Walker, Susan Jones, Micheline Hancock-Beaulieu, and Mike Gatford. Okapi at TREC-3. In Proceedings of the Third T ext RE trieval C onference (TREC 1994). Gaithersburg, USA, November 1994. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity BM25Similarity Inherited Members Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class BM25Similarity : Similarity Constructors | Improve this Doc View Source BM25Similarity() BM25 with these default values: k1 = 1.2 , b = 0.75 . Declaration public BM25Similarity() | Improve this Doc View Source BM25Similarity(Single, Single) BM25 with the supplied parameter values. Declaration public BM25Similarity(float k1, float b) Parameters Type Name Description System.Single k1 Controls non-linear term frequency normalization (saturation). System.Single b Controls to what degree document length normalizes tf values. Properties | Improve this Doc View Source B Returns the b parameter Declaration public virtual float B { get; } Property Value Type Description System.Single See Also BM25Similarity(Single, Single) | Improve this Doc View Source DiscountOverlaps Gets or Sets whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true, meaning overlap tokens do not count when computing norms. Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source K1 Returns the k1 parameter Declaration public virtual float K1 { get; } Property Value Type Description System.Single See Also BM25Similarity(Single, Single) Methods | Improve this Doc View Source AvgFieldLength(CollectionStatistics) The default implementation computes the average as sumTotalTermFreq / maxDoc , or returns 1 if the index does not store sumTotalTermFreq (Lucene 3.x indexes or any field that omits frequency information). Declaration protected virtual float AvgFieldLength(CollectionStatistics collectionStats) Parameters Type Name Description CollectionStatistics collectionStats Returns Type Description System.Single | Improve this Doc View Source ComputeNorm(FieldInvertState) Declaration public override sealed long ComputeNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Int64 Overrides Similarity.ComputeNorm(FieldInvertState) | Improve this Doc View Source ComputeWeight(Single, CollectionStatistics, TermStatistics[]) Declaration public override sealed Similarity.SimWeight ComputeWeight(float queryBoost, CollectionStatistics collectionStats, params TermStatistics[] termStats) Parameters Type Name Description System.Single queryBoost CollectionStatistics collectionStats TermStatistics [] termStats Returns Type Description Similarity.SimWeight Overrides Similarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) | Improve this Doc View Source DecodeNormValue(Byte) The default implementation returns 1 / f 2 where f is Byte315ToSingle(Byte) . Declaration protected virtual float DecodeNormValue(byte b) Parameters Type Name Description System.Byte b Returns Type Description System.Single | Improve this Doc View Source EncodeNormValue(Single, Int32) The default implementation encodes boost / sqrt(length) with SingleToByte315(Single) . This is compatible with Lucene's default implementation. If you change this, then you should change DecodeNormValue(Byte) to match. Declaration protected virtual byte EncodeNormValue(float boost, int fieldLength) Parameters Type Name Description System.Single boost System.Int32 fieldLength Returns Type Description System.Byte | Improve this Doc View Source GetSimScorer(Similarity.SimWeight, AtomicReaderContext) Declaration public override sealed Similarity.SimScorer GetSimScorer(Similarity.SimWeight stats, AtomicReaderContext context) Parameters Type Name Description Similarity.SimWeight stats AtomicReaderContext context Returns Type Description Similarity.SimScorer Overrides Similarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) | Improve this Doc View Source Idf(Int64, Int64) Implemented as log(1 + (numDocs - docFreq + 0.5)/(docFreq + 0.5)) . Declaration protected virtual float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq System.Int64 numDocs Returns Type Description System.Single | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics) Computes a score factor for a simple term and returns an explanation for that score factor. The default implementation uses: Idf(docFreq, searcher.MaxDoc); Note that MaxDoc is used instead of NumDocs because also DocFreq is used, and when the latter is inaccurate, so is MaxDoc , and in the same direction. In addition, MaxDoc is more efficient to compute Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics termStats) Parameters Type Name Description CollectionStatistics collectionStats collection-level statistics TermStatistics termStats term-level statistics for the term Returns Type Description Explanation an Explanation object that includes both an idf score factor and an explanation for the term. | Improve this Doc View Source IdfExplain(CollectionStatistics, TermStatistics[]) Computes a score factor for a phrase. The default implementation sums the idf factor for each term in the phrase. Declaration public virtual Explanation IdfExplain(CollectionStatistics collectionStats, TermStatistics[] termStats) Parameters Type Name Description CollectionStatistics collectionStats collection-level statistics TermStatistics [] termStats term-level statistics for the terms in the phrase Returns Type Description Explanation an Explanation object that includes both an idf score factor for the phrase and an explanation for each term. | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) The default implementation returns 1 Declaration protected virtual float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single | Improve this Doc View Source SloppyFreq(Int32) Implemented as 1 / (distance + 1) . Declaration protected virtual float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DefaultSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DefaultSimilarity.html",
    "title": "Class DefaultSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DefaultSimilarity Expert: Default scoring implementation which encodes ( EncodeNormValue(Single) ) norm values as a single byte before being stored. At search time, the norm byte value is read from the index Directory and decoded ( DecodeNormValue(Int64) ) back to a float norm value. this encoding/decoding, while reducing index size, comes with the price of precision loss - it is not guaranteed that Decode(Encode(x)) = x . For instance, Decode(Encode(0.89)) = 0.75 . Compression of norm values to a single byte saves memory at search time, because once a field is referenced at search time, its norms - for all documents - are maintained in memory. The rationale supporting such lossy compression of norm values is that given the difficulty (and inaccuracy) of users to express their true information need by a query, only big differences matter. Last, note that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. Inheritance System.Object Similarity TFIDFSimilarity DefaultSimilarity SweetSpotSimilarity Inherited Members TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics) TFIDFSimilarity.IdfExplain(CollectionStatistics, TermStatistics[]) TFIDFSimilarity.ComputeNorm(FieldInvertState) TFIDFSimilarity.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) TFIDFSimilarity.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DefaultSimilarity : TFIDFSimilarity Constructors | Improve this Doc View Source DefaultSimilarity() Sole constructor: parameter-free Declaration public DefaultSimilarity() Fields | Improve this Doc View Source m_discountOverlaps True if overlap tokens (tokens with a position of increment of zero) are discounted from the document's length. Declaration protected bool m_discountOverlaps Field Value Type Description System.Boolean Properties | Improve this Doc View Source DiscountOverlaps Determines whether overlap tokens (Tokens with 0 position increment) are ignored when computing norm. By default this is true, meaning overlap tokens do not count when computing norms. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public virtual bool DiscountOverlaps { get; set; } Property Value Type Description System.Boolean See Also ComputeNorm ( FieldInvertState ) Methods | Improve this Doc View Source Coord(Int32, Int32) Implemented as overlap / maxOverlap . Declaration public override float Coord(int overlap, int maxOverlap) Parameters Type Name Description System.Int32 overlap System.Int32 maxOverlap Returns Type Description System.Single Overrides TFIDFSimilarity.Coord(Int32, Int32) | Improve this Doc View Source DecodeNormValue(Int64) Decodes the norm value, assuming it is a single byte. Declaration public override sealed float DecodeNormValue(long norm) Parameters Type Name Description System.Int64 norm Returns Type Description System.Single Overrides TFIDFSimilarity.DecodeNormValue(Int64) See Also EncodeNormValue(Single) | Improve this Doc View Source EncodeNormValue(Single) Encodes a normalization factor for storage in an index. The encoding uses a three-bit mantissa, a five-bit exponent, and the zero-exponent point at 15, thus representing values from around 7x10^9 to 2x10^-9 with about one significant decimal digit of accuracy. Zero is also represented. Negative numbers are rounded up to zero. Values too large to represent are rounded down to the largest representable value. Positive values too small to represent are rounded up to the smallest positive representable value. Declaration public override sealed long EncodeNormValue(float f) Parameters Type Name Description System.Single f Returns Type Description System.Int64 Overrides TFIDFSimilarity.EncodeNormValue(Single) See Also Boost SmallSingle | Improve this Doc View Source Idf(Int64, Int64) Implemented as log(numDocs/(docFreq+1)) + 1 . Declaration public override float Idf(long docFreq, long numDocs) Parameters Type Name Description System.Int64 docFreq System.Int64 numDocs Returns Type Description System.Single Overrides TFIDFSimilarity.Idf(Int64, Int64) | Improve this Doc View Source LengthNorm(FieldInvertState) Implemented as state.Boost * LengthNorm(numTerms) , where numTerms is Length if DiscountOverlaps is false , else it's Length - NumOverlap . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Declaration public override float LengthNorm(FieldInvertState state) Parameters Type Name Description FieldInvertState state Returns Type Description System.Single Overrides TFIDFSimilarity.LengthNorm(FieldInvertState) | Improve this Doc View Source QueryNorm(Single) Implemented as 1/sqrt(sumOfSquaredWeights) . Declaration public override float QueryNorm(float sumOfSquaredWeights) Parameters Type Name Description System.Single sumOfSquaredWeights Returns Type Description System.Single Overrides TFIDFSimilarity.QueryNorm(Single) | Improve this Doc View Source ScorePayload(Int32, Int32, Int32, BytesRef) The default implementation returns 1 Declaration public override float ScorePayload(int doc, int start, int end, BytesRef payload) Parameters Type Name Description System.Int32 doc System.Int32 start System.Int32 end BytesRef payload Returns Type Description System.Single Overrides TFIDFSimilarity.ScorePayload(Int32, Int32, Int32, BytesRef) | Improve this Doc View Source SloppyFreq(Int32) Implemented as 1 / (distance + 1) . Declaration public override float SloppyFreq(int distance) Parameters Type Name Description System.Int32 distance Returns Type Description System.Single Overrides TFIDFSimilarity.SloppyFreq(Int32) | Improve this Doc View Source Tf(Single) Implemented as Math.Sqrt(freq) . Declaration public override float Tf(float freq) Parameters Type Name Description System.Single freq Returns Type Description System.Single Overrides TFIDFSimilarity.Tf(Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.DFRSimilarity.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.DFRSimilarity.html",
    "title": "Class DFRSimilarity | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class DFRSimilarity Implements the divergence from randomness (DFR) framework introduced in Gianni Amati and Cornelis Joost Van Rijsbergen. 2002. Probabilistic models of information retrieval based on measuring the divergence from randomness. ACM Trans. Inf. Syst. 20, 4 (October 2002), 357-389. The DFR scoring formula is composed of three separate components: the basic model , the aftereffect and an additional normalization component, represented by the classes BasicModel , AfterEffect and Normalization , respectively. The names of these classes were chosen to match the names of their counterparts in the Terrier IR engine. To construct a DFRSimilarity , you must specify the implementations for all three components of DFR: ComponentImplementations BasicModel : Basic model of information content: BasicModelBE : Limiting form of Bose-Einstein BasicModelG : Geometric approximation of Bose-Einstein BasicModelP : Poisson approximation of the Binomial BasicModelD : Divergence approximation of the Binomial BasicModelIn : Inverse document frequency BasicModelIne : Inverse expected document frequency [mixture of Poisson and IDF] BasicModelIF : Inverse term frequency [approximation of I(ne)] AfterEffect : First normalization of information gain: AfterEffectL : Laplace's law of succession AfterEffectB : Ratio of two Bernoulli processes AfterEffect.NoAfterEffect : no first normalization Normalization : Second (length) normalization: NormalizationH1 : Uniform distribution of term frequency NormalizationH2 : term frequency density inversely related to length NormalizationH3 : term frequency normalization provided by Dirichlet prior NormalizationZ : term frequency normalization provided by a Zipfian relation Normalization.NoNormalization : no second normalization Note that qtf , the multiplicity of term-occurrence in the query, is not handled by this implementation. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Similarity SimilarityBase DFRSimilarity Inherited Members SimilarityBase.DiscountOverlaps SimilarityBase.ComputeWeight(Single, CollectionStatistics, TermStatistics[]) SimilarityBase.NewStats(String, Single) SimilarityBase.FillBasicStats(BasicStats, CollectionStatistics, TermStatistics) SimilarityBase.Explain(BasicStats, Int32, Explanation, Single) SimilarityBase.GetSimScorer(Similarity.SimWeight, AtomicReaderContext) SimilarityBase.ComputeNorm(FieldInvertState) SimilarityBase.DecodeNormValue(Byte) SimilarityBase.EncodeNormValue(Single, Single) SimilarityBase.Log2(Double) Similarity.Coord(Int32, Int32) Similarity.QueryNorm(Single) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class DFRSimilarity : SimilarityBase Constructors | Improve this Doc View Source DFRSimilarity(BasicModel, AfterEffect, Normalization) Creates DFRSimilarity from the three components. Note that null values are not allowed: if you want no normalization or after-effect, instead pass Normalization.NoNormalization or AfterEffect.NoAfterEffect respectively. Declaration public DFRSimilarity(BasicModel basicModel, AfterEffect afterEffect, Normalization normalization) Parameters Type Name Description BasicModel basicModel Basic model of information content AfterEffect afterEffect First normalization of information gain Normalization normalization Second (length) normalization Fields | Improve this Doc View Source m_afterEffect The first normalization of the information content. Declaration protected readonly AfterEffect m_afterEffect Field Value Type Description AfterEffect | Improve this Doc View Source m_basicModel The basic model for information content. Declaration protected readonly BasicModel m_basicModel Field Value Type Description BasicModel | Improve this Doc View Source m_normalization The term frequency normalization. Declaration protected readonly Normalization m_normalization Field Value Type Description Normalization Properties | Improve this Doc View Source AfterEffect Returns the first normalization Declaration public virtual AfterEffect AfterEffect { get; } Property Value Type Description AfterEffect | Improve this Doc View Source BasicModel Returns the basic model of information content Declaration public virtual BasicModel BasicModel { get; } Property Value Type Description BasicModel | Improve this Doc View Source Normalization Returns the second normalization Declaration public virtual Normalization Normalization { get; } Property Value Type Description Normalization Methods | Improve this Doc View Source Explain(Explanation, BasicStats, Int32, Single, Single) Declaration protected override void Explain(Explanation expl, BasicStats stats, int doc, float freq, float docLen) Parameters Type Name Description Explanation expl BasicStats stats System.Int32 doc System.Single freq System.Single docLen Overrides SimilarityBase.Explain(Explanation, BasicStats, Int32, Single, Single) | Improve this Doc View Source Score(BasicStats, Single, Single) Declaration public override float Score(BasicStats stats, float freq, float docLen) Parameters Type Name Description BasicStats stats System.Single freq System.Single docLen Returns Type Description System.Single Overrides SimilarityBase.Score(BasicStats, Single, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides SimilarityBase.ToString() Extension Methods Number.IsNumber(Object) See Also BasicModel AfterEffect Normalization"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanScorer.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanScorer.html",
    "title": "Class SpanScorer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanScorer Public for extension only. Inheritance System.Object DocIdSetIterator DocsEnum Scorer SpanScorer PayloadNearQuery.PayloadNearSpanScorer PayloadTermQuery.PayloadTermWeight.PayloadTermSpanScorer Inherited Members Scorer.m_weight Scorer.Weight Scorer.GetChildren() DocsEnum.Attributes DocIdSetIterator.GetEmpty() DocIdSetIterator.NO_MORE_DOCS DocIdSetIterator.SlowAdvance(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanScorer : Scorer Constructors | Improve this Doc View Source SpanScorer(Spans, Weight, Similarity.SimScorer) Declaration protected SpanScorer(Spans spans, Weight weight, Similarity.SimScorer docScorer) Parameters Type Name Description Spans spans Weight weight Similarity.SimScorer docScorer Fields | Improve this Doc View Source m_doc Declaration protected int m_doc Field Value Type Description System.Int32 | Improve this Doc View Source m_docScorer Declaration protected readonly Similarity.SimScorer m_docScorer Field Value Type Description Similarity.SimScorer | Improve this Doc View Source m_freq Declaration protected float m_freq Field Value Type Description System.Single | Improve this Doc View Source m_more Declaration protected bool m_more Field Value Type Description System.Boolean | Improve this Doc View Source m_numMatches Declaration protected int m_numMatches Field Value Type Description System.Int32 | Improve this Doc View Source m_spans Declaration protected Spans m_spans Field Value Type Description Spans Properties | Improve this Doc View Source DocID Declaration public override int DocID { get; } Property Value Type Description System.Int32 Overrides DocIdSetIterator.DocID | Improve this Doc View Source Freq Declaration public override int Freq { get; } Property Value Type Description System.Int32 Overrides DocsEnum.Freq | Improve this Doc View Source SloppyFreq Returns the intermediate \"sloppy freq\" adjusted for edit distance This is a Lucene.NET INTERNAL API, use at your own risk Declaration public virtual float SloppyFreq { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Advance(Int32) Declaration public override int Advance(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Int32 Overrides DocIdSetIterator.Advance(Int32) | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides DocIdSetIterator.GetCost() | Improve this Doc View Source GetScore() Declaration public override float GetScore() Returns Type Description System.Single Overrides Scorer.GetScore() | Improve this Doc View Source NextDoc() Declaration public override int NextDoc() Returns Type Description System.Int32 Overrides DocIdSetIterator.NextDoc() | Improve this Doc View Source SetFreqCurrentDoc() Declaration protected virtual bool SetFreqCurrentDoc() Returns Type Description System.Boolean Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanTermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanTermQuery.html",
    "title": "Class SpanTermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanTermQuery Matches spans containing a term. Inheritance System.Object Query SpanQuery SpanTermQuery PayloadTermQuery Inherited Members SpanQuery.CreateWeight(IndexSearcher) Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanTermQuery : SpanQuery Constructors | Improve this Doc View Source SpanTermQuery(Term) Construct a SpanTermQuery matching the named term's spans. Declaration public SpanTermQuery(Term term) Parameters Type Name Description Term term Fields | Improve this Doc View Source m_term Declaration protected Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Field Declaration public override string Field { get; } Property Value Type Description System.String Overrides SpanQuery.Field | Improve this Doc View Source Term Return the term whose spans are matched. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) Declaration public override Spans GetSpans(AtomicReaderContext context, IBits acceptDocs, IDictionary<Term, TermContext> termContexts) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs System.Collections.Generic.IDictionary < Term , TermContext > termContexts Returns Type Description Spans Overrides SpanQuery.GetSpans(AtomicReaderContext, IBits, IDictionary<Term, TermContext>) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.SpanWeight.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.SpanWeight.html",
    "title": "Class SpanWeight | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SpanWeight Expert-only. Public for use by other weight implementations Inheritance System.Object Weight SpanWeight PayloadNearQuery.PayloadNearSpanWeight PayloadTermQuery.PayloadTermWeight Inherited Members Weight.GetBulkScorer(AtomicReaderContext, Boolean, IBits) Weight.ScoresDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class SpanWeight : Weight Constructors | Improve this Doc View Source SpanWeight(SpanQuery, IndexSearcher) Declaration public SpanWeight(SpanQuery query, IndexSearcher searcher) Parameters Type Name Description SpanQuery query IndexSearcher searcher Fields | Improve this Doc View Source m_query Declaration protected SpanQuery m_query Field Value Type Description SpanQuery | Improve this Doc View Source m_similarity Declaration protected Similarity m_similarity Field Value Type Description Similarity | Improve this Doc View Source m_stats Declaration protected Similarity.SimWeight m_stats Field Value Type Description Similarity.SimWeight | Improve this Doc View Source m_termContexts Declaration protected IDictionary<Term, TermContext> m_termContexts Field Value Type Description System.Collections.Generic.IDictionary < Term , TermContext > Properties | Improve this Doc View Source Query Declaration public override Query Query { get; } Property Value Type Description Query Overrides Weight.Query Methods | Improve this Doc View Source Explain(AtomicReaderContext, Int32) Declaration public override Explanation Explain(AtomicReaderContext context, int doc) Parameters Type Name Description AtomicReaderContext context System.Int32 doc Returns Type Description Explanation Overrides Weight.Explain(AtomicReaderContext, Int32) | Improve this Doc View Source GetScorer(AtomicReaderContext, IBits) Declaration public override Scorer GetScorer(AtomicReaderContext context, IBits acceptDocs) Parameters Type Name Description AtomicReaderContext context IBits acceptDocs Returns Type Description Scorer Overrides Weight.GetScorer(AtomicReaderContext, IBits) | Improve this Doc View Source GetValueForNormalization() Declaration public override float GetValueForNormalization() Returns Type Description System.Single Overrides Weight.GetValueForNormalization() | Improve this Doc View Source Normalize(Single, Single) Declaration public override void Normalize(float queryNorm, float topLevelBoost) Parameters Type Name Description System.Single queryNorm System.Single topLevelBoost Overrides Weight.Normalize(Single, Single) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Spans.TermSpans.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Spans.TermSpans.html",
    "title": "Class TermSpans | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermSpans Expert: Public for extension only Inheritance System.Object Spans TermSpans Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Spans Assembly : Lucene.Net.dll Syntax public class TermSpans : Spans Constructors | Improve this Doc View Source TermSpans(DocsAndPositionsEnum, Term) Declaration public TermSpans(DocsAndPositionsEnum postings, Term term) Parameters Type Name Description DocsAndPositionsEnum postings Term term Fields | Improve this Doc View Source EMPTY_TERM_SPANS Declaration public static readonly TermSpans EMPTY_TERM_SPANS Field Value Type Description TermSpans | Improve this Doc View Source m_count Declaration protected int m_count Field Value Type Description System.Int32 | Improve this Doc View Source m_doc Declaration protected int m_doc Field Value Type Description System.Int32 | Improve this Doc View Source m_freq Declaration protected int m_freq Field Value Type Description System.Int32 | Improve this Doc View Source m_position Declaration protected int m_position Field Value Type Description System.Int32 | Improve this Doc View Source m_postings Declaration protected readonly DocsAndPositionsEnum m_postings Field Value Type Description DocsAndPositionsEnum | Improve this Doc View Source m_readPayload Declaration protected bool m_readPayload Field Value Type Description System.Boolean | Improve this Doc View Source m_term Declaration protected readonly Term m_term Field Value Type Description Term Properties | Improve this Doc View Source Doc Declaration public override int Doc { get; } Property Value Type Description System.Int32 Overrides Spans.Doc | Improve this Doc View Source End Declaration public override int End { get; } Property Value Type Description System.Int32 Overrides Spans.End | Improve this Doc View Source IsPayloadAvailable Declaration public override bool IsPayloadAvailable { get; } Property Value Type Description System.Boolean Overrides Spans.IsPayloadAvailable | Improve this Doc View Source Postings Declaration public virtual DocsAndPositionsEnum Postings { get; } Property Value Type Description DocsAndPositionsEnum | Improve this Doc View Source Start Declaration public override int Start { get; } Property Value Type Description System.Int32 Overrides Spans.Start Methods | Improve this Doc View Source GetCost() Declaration public override long GetCost() Returns Type Description System.Int64 Overrides Spans.GetCost() | Improve this Doc View Source GetPayload() Declaration public override ICollection<byte[]> GetPayload() Returns Type Description System.Collections.Generic.ICollection < System.Byte []> Overrides Spans.GetPayload() | Improve this Doc View Source Next() Declaration public override bool Next() Returns Type Description System.Boolean Overrides Spans.Next() | Improve this Doc View Source SkipTo(Int32) Declaration public override bool SkipTo(int target) Parameters Type Name Description System.Int32 target Returns Type Description System.Boolean Overrides Spans.SkipTo(Int32) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermCollectingRewrite-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermCollectingRewrite-1.html",
    "title": "Class TermCollectingRewrite<Q> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermCollectingRewrite<Q> Inheritance System.Object MultiTermQuery.RewriteMethod TermCollectingRewrite<Q> ConstantScoreAutoRewrite ScoringRewrite<Q> TopTermsRewrite<Q> Inherited Members MultiTermQuery.RewriteMethod.Rewrite(IndexReader, MultiTermQuery) MultiTermQuery.RewriteMethod.GetTermsEnum(MultiTermQuery, Terms, AttributeSource) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public abstract class TermCollectingRewrite<Q> : MultiTermQuery.RewriteMethod where Q : Query Type Parameters Name Description Q Methods | Improve this Doc View Source AddClause(Q, Term, Int32, Single) Add a MultiTermQuery term to the top-level query Declaration protected void AddClause(Q topLevel, Term term, int docCount, float boost) Parameters Type Name Description Q topLevel Term term System.Int32 docCount System.Single boost | Improve this Doc View Source AddClause(Q, Term, Int32, Single, TermContext) Declaration protected abstract void AddClause(Q topLevel, Term term, int docCount, float boost, TermContext states) Parameters Type Name Description Q topLevel Term term System.Int32 docCount System.Single boost TermContext states | Improve this Doc View Source GetTopLevelQuery() Return a suitable top-level Query for holding all expanded terms. Declaration protected abstract Q GetTopLevelQuery() Returns Type Description Q Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.TermQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.TermQuery.html",
    "title": "Class TermQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class TermQuery A Query that matches documents containing a term. this may be combined with other terms with a BooleanQuery . Inheritance System.Object Query TermQuery Inherited Members Query.Boost Query.ToString() Query.Rewrite(IndexReader) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class TermQuery : Query Constructors | Improve this Doc View Source TermQuery(Term) Constructs a query for the term t . Declaration public TermQuery(Term t) Parameters Type Name Description Term t | Improve this Doc View Source TermQuery(Term, TermContext) Expert: constructs a TermQuery that will use the provided docFreq instead of looking up the docFreq against the searcher. Declaration public TermQuery(Term t, TermContext states) Parameters Type Name Description Term t TermContext states | Improve this Doc View Source TermQuery(Term, Int32) Expert: constructs a TermQuery that will use the provided docFreq instead of looking up the docFreq against the searcher. Declaration public TermQuery(Term t, int docFreq) Parameters Type Name Description Term t System.Int32 docFreq Properties | Improve this Doc View Source Term Returns the term of this query. Declaration public virtual Term Term { get; } Property Value Type Description Term Methods | Improve this Doc View Source CreateWeight(IndexSearcher) Declaration public override Weight CreateWeight(IndexSearcher searcher) Parameters Type Name Description IndexSearcher searcher Returns Type Description Weight Overrides Query.CreateWeight(IndexSearcher) | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source ExtractTerms(ISet<Term>) Declaration public override void ExtractTerms(ISet<Term> terms) Parameters Type Name Description System.Collections.Generic.ISet < Term > terms Overrides Query.ExtractTerms(ISet<Term>) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Query.GetHashCode() | Improve this Doc View Source ToString(String) Prints a user-readable version of this query. Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Store.BufferedIndexInput.html": {
    "href": "api/Lucene.Net/Lucene.Net.Store.BufferedIndexInput.html",
    "title": "Class BufferedIndexInput | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BufferedIndexInput Base implementation class for buffered IndexInput . Inheritance System.Object DataInput IndexInput BufferedIndexInput NIOFSDirectory.NIOFSIndexInput SimpleFSDirectory.SimpleFSIndexInput Implements System.IDisposable Inherited Members IndexInput.Dispose() IndexInput.Dispose(Boolean) IndexInput.Length IndexInput.ToString() DataInput.ReadString() DataInput.ReadStringStringMap() DataInput.ReadStringSet() DataInput.SkipBytes(Int64) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Store Assembly : Lucene.Net.dll Syntax public abstract class BufferedIndexInput : IndexInput, IDisposable Constructors | Improve this Doc View Source BufferedIndexInput(String) Declaration public BufferedIndexInput(string resourceDesc) Parameters Type Name Description System.String resourceDesc | Improve this Doc View Source BufferedIndexInput(String, IOContext) Declaration public BufferedIndexInput(string resourceDesc, IOContext context) Parameters Type Name Description System.String resourceDesc IOContext context | Improve this Doc View Source BufferedIndexInput(String, Int32) Inits BufferedIndexInput with a specific bufferSize Declaration public BufferedIndexInput(string resourceDesc, int bufferSize) Parameters Type Name Description System.String resourceDesc System.Int32 bufferSize Fields | Improve this Doc View Source BUFFER_SIZE Default buffer size set to BUFFER_SIZE . Declaration public const int BUFFER_SIZE = 1024 Field Value Type Description System.Int32 | Improve this Doc View Source m_buffer Declaration protected byte[] m_buffer Field Value Type Description System.Byte [] | Improve this Doc View Source MERGE_BUFFER_SIZE A buffer size for merges set to MERGE_BUFFER_SIZE . Declaration public const int MERGE_BUFFER_SIZE = 4096 Field Value Type Description System.Int32 Properties | Improve this Doc View Source BufferSize Returns buffer size. Declaration public int BufferSize { get; } Property Value Type Description System.Int32 See Also SetBufferSize(Int32) Methods | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides IndexInput.Clone() | Improve this Doc View Source FlushBuffer(IndexOutput, Int64) Flushes the in-memory buffer to the given output, copying at most numBytes . NOTE: this method does not refill the buffer, however it does advance the buffer position. Declaration protected int FlushBuffer(IndexOutput out, long numBytes) Parameters Type Name Description IndexOutput out System.Int64 numBytes Returns Type Description System.Int32 the number of bytes actually flushed from the in-memory buffer. | Improve this Doc View Source GetBufferSize(IOContext) Returns default buffer sizes for the given IOContext Declaration public static int GetBufferSize(IOContext context) Parameters Type Name Description IOContext context Returns Type Description System.Int32 | Improve this Doc View Source GetFilePointer() Declaration public override sealed long GetFilePointer() Returns Type Description System.Int64 Overrides IndexInput.GetFilePointer() | Improve this Doc View Source NewBuffer(Byte[]) Declaration protected virtual void NewBuffer(byte[] newBuffer) Parameters Type Name Description System.Byte [] newBuffer | Improve this Doc View Source ReadByte() Declaration public override sealed byte ReadByte() Returns Type Description System.Byte Overrides DataInput.ReadByte() | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len Overrides DataInput.ReadBytes(Byte[], Int32, Int32) | Improve this Doc View Source ReadBytes(Byte[], Int32, Int32, Boolean) Declaration public override sealed void ReadBytes(byte[] b, int offset, int len, bool useBuffer) Parameters Type Name Description System.Byte [] b System.Int32 offset System.Int32 len System.Boolean useBuffer Overrides DataInput.ReadBytes(Byte[], Int32, Int32, Boolean) | Improve this Doc View Source ReadInt16() NOTE: this was readShort() in Lucene Declaration public override sealed short ReadInt16() Returns Type Description System.Int16 Overrides DataInput.ReadInt16() | Improve this Doc View Source ReadInt32() NOTE: this was readInt() in Lucene Declaration public override sealed int ReadInt32() Returns Type Description System.Int32 Overrides DataInput.ReadInt32() | Improve this Doc View Source ReadInt64() NOTE: this was readLong() in Lucene Declaration public override sealed long ReadInt64() Returns Type Description System.Int64 Overrides DataInput.ReadInt64() | Improve this Doc View Source ReadInternal(Byte[], Int32, Int32) Expert: implements buffer refill. Reads bytes from the current position in the input. Declaration protected abstract void ReadInternal(byte[] b, int offset, int length) Parameters Type Name Description System.Byte [] b the array to read bytes into System.Int32 offset the offset in the array to start storing bytes System.Int32 length the number of bytes to read | Improve this Doc View Source ReadVInt32() NOTE: this was readVInt() in Lucene Declaration public override sealed int ReadVInt32() Returns Type Description System.Int32 Overrides DataInput.ReadVInt32() | Improve this Doc View Source ReadVInt64() NOTE: this was readVLong() in Lucene Declaration public override sealed long ReadVInt64() Returns Type Description System.Int64 Overrides DataInput.ReadVInt64() | Improve this Doc View Source Seek(Int64) Declaration public override sealed void Seek(long pos) Parameters Type Name Description System.Int64 pos Overrides IndexInput.Seek(Int64) | Improve this Doc View Source SeekInternal(Int64) Expert: implements seek. Sets current position in this file, where the next ReadInternal(Byte[], Int32, Int32) will occur. Declaration protected abstract void SeekInternal(long pos) Parameters Type Name Description System.Int64 pos See Also ReadInternal(Byte[], Int32, Int32) | Improve this Doc View Source SetBufferSize(Int32) Change the buffer size used by this IndexInput Declaration public void SetBufferSize(int newSize) Parameters Type Name Description System.Int32 newSize Implements System.IDisposable Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsWriter.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.Sep.SepPostingsWriter.html",
    "title": "Class SepPostingsWriter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SepPostingsWriter Writes frq to .frq, docs to .doc, pos to .pos, payloads to .pyl, skip data to .skp @lucene.experimental Inheritance System.Object PostingsConsumer PostingsWriterBase SepPostingsWriter Implements System.IDisposable Inherited Members PostingsWriterBase.Dispose() PostingsConsumer.Merge(MergeState, IndexOptions, DocsEnum, FixedBitSet) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Codecs.Sep Assembly : Lucene.Net.Codecs.dll Syntax public sealed class SepPostingsWriter : PostingsWriterBase, IDisposable Constructors | Improve this Doc View Source SepPostingsWriter(SegmentWriteState, Int32StreamFactory) Declaration public SepPostingsWriter(SegmentWriteState state, Int32StreamFactory factory) Parameters Type Name Description SegmentWriteState state Int32StreamFactory factory | Improve this Doc View Source SepPostingsWriter(SegmentWriteState, Int32StreamFactory, Int32) Declaration public SepPostingsWriter(SegmentWriteState state, Int32StreamFactory factory, int skipInterval) Parameters Type Name Description SegmentWriteState state Int32StreamFactory factory System.Int32 skipInterval Methods | Improve this Doc View Source AddPosition(Int32, BytesRef, Int32, Int32) Add a new position & payload. Declaration public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset) Parameters Type Name Description System.Int32 position BytesRef payload System.Int32 startOffset System.Int32 endOffset Overrides PostingsConsumer.AddPosition(Int32, BytesRef, Int32, Int32) | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides PostingsWriterBase.Dispose(Boolean) | Improve this Doc View Source EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) Declaration public override void EncodeTerm(long[] longs, DataOutput output, FieldInfo fi, BlockTermState state, bool absolute) Parameters Type Name Description System.Int64 [] longs DataOutput output FieldInfo fi BlockTermState state System.Boolean absolute Overrides PostingsWriterBase.EncodeTerm(Int64[], DataOutput, FieldInfo, BlockTermState, Boolean) | Improve this Doc View Source FinishDoc() Called when we are done adding positions & payloads. Declaration public override void FinishDoc() Overrides PostingsConsumer.FinishDoc() | Improve this Doc View Source FinishTerm(BlockTermState) Called when we are done adding docs to this term. Declaration public override void FinishTerm(BlockTermState state) Parameters Type Name Description BlockTermState state Overrides PostingsWriterBase.FinishTerm(BlockTermState) | Improve this Doc View Source Init(IndexOutput) Declaration public override void Init(IndexOutput termsOut) Parameters Type Name Description IndexOutput termsOut Overrides PostingsWriterBase.Init(IndexOutput) | Improve this Doc View Source NewTermState() Declaration public override BlockTermState NewTermState() Returns Type Description BlockTermState Overrides PostingsWriterBase.NewTermState() | Improve this Doc View Source SetField(FieldInfo) Declaration public override int SetField(FieldInfo fieldInfo) Parameters Type Name Description FieldInfo fieldInfo Returns Type Description System.Int32 Overrides PostingsWriterBase.SetField(FieldInfo) | Improve this Doc View Source StartDoc(Int32, Int32) Adds a new doc in this term. If this returns null then we just skip consuming positions/payloads. Declaration public override void StartDoc(int docID, int termDocFreq) Parameters Type Name Description System.Int32 docID System.Int32 termDocFreq Overrides PostingsConsumer.StartDoc(Int32, Int32) | Improve this Doc View Source StartTerm() Declaration public override void StartTerm() Overrides PostingsWriterBase.StartTerm() Implements System.IDisposable"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextCodec.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextCodec.html",
    "title": "Class SimpleTextCodec | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextCodec Plain text index format. FOR RECREATIONAL USE ONLY This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Codec SimpleTextCodec Inherited Members Codec.SetCodecFactory(ICodecFactory) Codec.GetCodecFactory() Codec.Name Codec.ForName(String) Codec.AvailableCodecs Codec.Default Codec.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax [CodecName(\"SimpleText\")] public sealed class SimpleTextCodec : Codec Constructors | Improve this Doc View Source SimpleTextCodec() Declaration public SimpleTextCodec() Properties | Improve this Doc View Source DocValuesFormat Declaration public override DocValuesFormat DocValuesFormat { get; } Property Value Type Description DocValuesFormat Overrides Codec.DocValuesFormat | Improve this Doc View Source FieldInfosFormat Declaration public override FieldInfosFormat FieldInfosFormat { get; } Property Value Type Description FieldInfosFormat Overrides Codec.FieldInfosFormat | Improve this Doc View Source LiveDocsFormat Declaration public override LiveDocsFormat LiveDocsFormat { get; } Property Value Type Description LiveDocsFormat Overrides Codec.LiveDocsFormat | Improve this Doc View Source NormsFormat Declaration public override NormsFormat NormsFormat { get; } Property Value Type Description NormsFormat Overrides Codec.NormsFormat | Improve this Doc View Source PostingsFormat Declaration public override PostingsFormat PostingsFormat { get; } Property Value Type Description PostingsFormat Overrides Codec.PostingsFormat | Improve this Doc View Source SegmentInfoFormat Declaration public override SegmentInfoFormat SegmentInfoFormat { get; } Property Value Type Description SegmentInfoFormat Overrides Codec.SegmentInfoFormat | Improve this Doc View Source StoredFieldsFormat Declaration public override StoredFieldsFormat StoredFieldsFormat { get; } Property Value Type Description StoredFieldsFormat Overrides Codec.StoredFieldsFormat | Improve this Doc View Source TermVectorsFormat Declaration public override TermVectorsFormat TermVectorsFormat { get; } Property Value Type Description TermVectorsFormat Overrides Codec.TermVectorsFormat"
  },
  "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat.html": {
    "href": "api/Lucene.Net.Codecs/Lucene.Net.Codecs.SimpleText.SimpleTextDocValuesFormat.html",
    "title": "Class SimpleTextDocValuesFormat | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SimpleTextDocValuesFormat Plain text doc values format. FOR RECREATIONAL USE ONLY The .dat file contains the data. For numbers this is a \"fixed-width\" file, for example a single byte range: field myField type NUMERIC minvalue 0 pattern 000 005 T 234 T 123 T ... So a document's value (delta encoded from minvalue) can be retrieved by seeking to startOffset + (1+pattern.length()+2)*docid. The extra 1 is the newline. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. for bytes this is also a \"fixed-width\" file, for example: field myField type BINARY maxlength 6 pattern 0 length 6 foobar[space][space] T length 3 baz[space][space][space][space][space] T ... So a doc's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength+2)*doc the extra 9 is 2 newlines, plus \"length \" itself. The extra 2 is another newline and 'T' or 'F': true if the value is real, false if missing. For sorted bytes this is a fixed-width file, for example: field myField type SORTED numvalues 10 maxLength 8 pattern 0 ordpattern 00 length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 03 06 01 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid an ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord For sorted set this is a fixed-width file very similar to the SORTED case, for example: field myField type SORTED_SET numvalues 10 maxLength 8 pattern 0 ordpattern XXXXX length 6 foobar[space][space] length 3 baz[space][space][space][space][space] ... 0,3,5 1,2 10 ... So the \"ord section\" begins at startOffset + (9+pattern.length+maxlength) numValues. A document's ord list can be retrieved by seeking to \"ord section\" + (1+ordpattern.length()) docid this is a comma-separated list, and its padded with spaces to be fixed width. so trim() and split() it. and beware the empty string! An ord's value can be retrieved by seeking to startOffset + (9+pattern.length+maxlength)*ord The reader can just scan this file when it opens, skipping over the data blocks and saving the offset/etc for each field. @lucene.experimental Inheritance System.Object DocValuesFormat SimpleTextDocValuesFormat Inherited Members DocValuesFormat.SetDocValuesFormatFactory(IDocValuesFormatFactory) DocValuesFormat.GetDocValuesFormatFactory() DocValuesFormat.Name DocValuesFormat.ToString() DocValuesFormat.ForName(String) DocValuesFormat.AvailableDocValuesFormats System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Codecs.SimpleText Assembly : Lucene.Net.Codecs.dll Syntax [DocValuesFormatName(\"SimpleText\")] public class SimpleTextDocValuesFormat : DocValuesFormat Constructors | Improve this Doc View Source SimpleTextDocValuesFormat() Declaration public SimpleTextDocValuesFormat() Methods | Improve this Doc View Source FieldsConsumer(SegmentWriteState) Declaration public override DocValuesConsumer FieldsConsumer(SegmentWriteState state) Parameters Type Name Description SegmentWriteState state Returns Type Description DocValuesConsumer Overrides DocValuesFormat.FieldsConsumer(SegmentWriteState) | Improve this Doc View Source FieldsProducer(SegmentReadState) Declaration public override DocValuesProducer FieldsProducer(SegmentReadState state) Parameters Type Name Description SegmentReadState state Returns Type Description DocValuesProducer Overrides DocValuesFormat.FieldsProducer(SegmentReadState)"
  },
  "api/Lucene.Net/Lucene.Net.Index.SortedDocValues.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.SortedDocValues.html",
    "title": "Class SortedDocValues | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class SortedDocValues A per-document byte[] with presorted values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. Inheritance System.Object BinaryDocValues SortedDocValues MultiDocValues.MultiSortedDocValues Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index Assembly : Lucene.Net.dll Syntax public abstract class SortedDocValues : BinaryDocValues Constructors | Improve this Doc View Source SortedDocValues() Sole constructor. (For invocation by subclass constructors, typically implicit.) Declaration protected SortedDocValues() Properties | Improve this Doc View Source ValueCount Returns the number of unique values. Declaration public abstract int ValueCount { get; } Property Value Type Description System.Int32 Number of unique values in this SortedDocValues . This is also equivalent to one plus the maximum ordinal. Methods | Improve this Doc View Source Get(Int32, BytesRef) Declaration public override void Get(int docID, BytesRef result) Parameters Type Name Description System.Int32 docID BytesRef result Overrides BinaryDocValues.Get(Int32, BytesRef) | Improve this Doc View Source GetOrd(Int32) Returns the ordinal for the specified docID. Declaration public abstract int GetOrd(int docID) Parameters Type Name Description System.Int32 docID document ID to lookup Returns Type Description System.Int32 ordinal for the document: this is dense, starts at 0, then increments by 1 for the next value in sorted order. Note that missing values are indicated by -1. | Improve this Doc View Source GetTermsEnum() Returns a TermsEnum over the values. The enum supports Ord and SeekExact(Int64) . Declaration public virtual TermsEnum GetTermsEnum() Returns Type Description TermsEnum | Improve this Doc View Source LookupOrd(Int32, BytesRef) Retrieves the value for the specified ordinal. Declaration public abstract void LookupOrd(int ord, BytesRef result) Parameters Type Name Description System.Int32 ord ordinal to lookup (must be >= 0 and < ValueCount ) BytesRef result will be populated with the ordinal's value See Also GetOrd(Int32) | Improve this Doc View Source LookupTerm(BytesRef) If key exists, returns its ordinal, else returns -insertionPoint-1 , like System.Array.BinarySearch(System.Array,System.Int32,System.Int32,System.Object) Declaration public virtual int LookupTerm(BytesRef key) Parameters Type Name Description BytesRef key Key to look up Returns Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.Sorter.BlockJoinComparerSource.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Sorter.BlockJoinComparerSource.html",
    "title": "Class BlockJoinComparerSource | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class BlockJoinComparerSource Helper class to sort readers that contain blocks of documents. Note that this class is intended to used with SortingMergePolicy , and for other purposes has some limitations: Cannot yet be used with SearchAfter(ScoreDoc, Query, Filter, Int32, Sort) Filling sort field values is not yet supported. @lucene.experimental Inheritance System.Object FieldComparerSource BlockJoinComparerSource Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class BlockJoinComparerSource : FieldComparerSource Constructors | Improve this Doc View Source BlockJoinComparerSource(Filter, Sort) Create a new BlockJoinComparerSource, sorting only blocks of documents with parentSort and not reordering children with a block. Declaration public BlockJoinComparerSource(Filter parentsFilter, Sort parentSort) Parameters Type Name Description Filter parentsFilter Filter identifying parent documents Sort parentSort Sort for parent documents | Improve this Doc View Source BlockJoinComparerSource(Filter, Sort, Sort) Create a new BlockJoinComparerSource, specifying the sort order for both blocks of documents and children within a block. Declaration public BlockJoinComparerSource(Filter parentsFilter, Sort parentSort, Sort childSort) Parameters Type Name Description Filter parentsFilter Filter identifying parent documents Sort parentSort Sort for parent documents Sort childSort Sort for child documents in the same block Methods | Improve this Doc View Source NewComparer(String, Int32, Int32, Boolean) Declaration public override FieldComparer NewComparer(string fieldname, int numHits, int sortPos, bool reversed) Parameters Type Name Description System.String fieldname System.Int32 numHits System.Int32 sortPos System.Boolean reversed Returns Type Description FieldComparer Overrides FieldComparerSource.NewComparer(String, Int32, Int32, Boolean) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Index.Sorter.EarlyTerminatingSortingCollector.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.Sorter.EarlyTerminatingSortingCollector.html",
    "title": "Class EarlyTerminatingSortingCollector | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class EarlyTerminatingSortingCollector A ICollector that early terminates collection of documents on a per-segment basis, if the segment was sorted according to the given Sort . NOTE: the ICollector detects sorted segments according to SortingMergePolicy , so it's best used in conjunction with it. Also, it collects up to a specified m_numDocsToCollect from each segment, and therefore is mostly suitable for use in conjunction with collectors such as TopDocsCollector<T> , and not e.g. TotalHitCountCollector . NOTE : If you wrap a TopDocsCollector<T> that sorts in the same order as the index order, the returned GetTopDocs() will be correct. However the total of TotalHits hit count will be underestimated since not all matching documents will have been collected. NOTE : This ICollector uses ToString() to detect whether a segment was sorted with the same Sort . This has two implications: if a custom comparer is not implemented correctly and returns different identifiers for equivalent instances, this collector will not detect sorted segments, if you suddenly change the IndexWriter 's SortingMergePolicy to sort according to another criterion and if both the old and the new Sort s have the same identifier, this ICollector will incorrectly detect sorted segments. @lucene.experimental Inheritance System.Object EarlyTerminatingSortingCollector Implements ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Index.Sorter Assembly : Lucene.Net.Misc.dll Syntax public class EarlyTerminatingSortingCollector : ICollector Constructors | Improve this Doc View Source EarlyTerminatingSortingCollector(ICollector, Sort, Int32) Create a new EarlyTerminatingSortingCollector instance. Declaration public EarlyTerminatingSortingCollector(ICollector in, Sort sort, int numDocsToCollect) Parameters Type Name Description ICollector in the collector to wrap Sort sort the sort you are sorting the search results on System.Int32 numDocsToCollect the number of documents to collect on each segment. When wrapping a TopDocsCollector<T> , this number should be the number of hits. Fields | Improve this Doc View Source m_in The wrapped Collector Declaration protected readonly ICollector m_in Field Value Type Description ICollector | Improve this Doc View Source m_numDocsToCollect Number of documents to collect in each segment Declaration protected readonly int m_numDocsToCollect Field Value Type Description System.Int32 | Improve this Doc View Source m_segmentSorted True if the current segment being processed is sorted by Sort() Declaration protected bool m_segmentSorted Field Value Type Description System.Boolean | Improve this Doc View Source m_segmentTotalCollect Number of documents to collect in the current segment being processed Declaration protected int m_segmentTotalCollect Field Value Type Description System.Int32 | Improve this Doc View Source m_sort Sort used to sort the search results Declaration protected readonly Sort m_sort Field Value Type Description Sort Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Scorer scorer Implements ICollector Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.NGramPhraseQuery.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NGramPhraseQuery.html",
    "title": "Class NGramPhraseQuery | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NGramPhraseQuery This is a PhraseQuery which is optimized for n-gram phrase query. For example, when you query \"ABCD\" on a 2-gram field, you may want to use NGramPhraseQuery rather than PhraseQuery , because NGramPhraseQuery will Rewrite(IndexReader) the query to \"AB/0 CD/2\", while PhraseQuery will query \"AB/0 BC/1 CD/2\" (where term/position). Collection initializer note: To create and populate a PhraseQuery in a single statement, you can use the following example as a guide: var phraseQuery = new NGramPhraseQuery(2) { new Term(\"field\", \"ABCD\"), new Term(\"field\", \"EFGH\") }; Note that as long as you specify all of the parameters, you can use either Add(Term) or Add(Term, Int32) as the method to use to initialize. If there are multiple parameters, each parameter set must be surrounded by curly braces. Inheritance System.Object Query PhraseQuery NGramPhraseQuery Implements System.Collections.Generic.IEnumerable < Term > System.Collections.IEnumerable Inherited Members PhraseQuery.Slop PhraseQuery.Add(Term) PhraseQuery.Add(Term, Int32) PhraseQuery.GetTerms() PhraseQuery.GetPositions() PhraseQuery.CreateWeight(IndexSearcher) PhraseQuery.ExtractTerms(ISet<Term>) PhraseQuery.ToString(String) PhraseQuery.GetEnumerator() PhraseQuery.IEnumerable.GetEnumerator() Query.Boost Query.ToString() Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public class NGramPhraseQuery : PhraseQuery, IEnumerable<Term>, IEnumerable Constructors | Improve this Doc View Source NGramPhraseQuery(Int32) Constructor that takes gram size. Declaration public NGramPhraseQuery(int n) Parameters Type Name Description System.Int32 n n-gram size Methods | Improve this Doc View Source Equals(Object) Returns true if o is equal to this. Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides PhraseQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Returns a hash code value for this object. Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides PhraseQuery.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader reader) Parameters Type Name Description IndexReader reader Returns Type Description Query Overrides PhraseQuery.Rewrite(IndexReader) Implements System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable Extension Methods EnumerableExtensions.InPairs<T, TOut>(IEnumerable<T>, Func<T, T, TOut>) Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeFilter-1.html",
    "title": "Class NumericRangeFilter<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeFilter<T> A Filter that only accepts numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). You create a new NumericRangeFilter with the static factory methods, eg: Filter f = NumericRangeFilter.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); Accepts all documents whose float valued \"weight\" field ranges from 0.03 to 0.10, inclusive. See NumericRangeQuery for details on how Lucene indexes and searches numeric valued fields. @since 2.9 Inheritance System.Object Filter MultiTermQueryWrapperFilter < NumericRangeQuery <T>> NumericRangeFilter<T> Inherited Members MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.m_query MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.ToString() MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.Equals(Object) MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.GetHashCode() MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.Field MultiTermQueryWrapperFilter<NumericRangeQuery<T>>.GetDocIdSet(AtomicReaderContext, IBits) Filter.NewAnonymous(Func<AtomicReaderContext, IBits, DocIdSet>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class NumericRangeFilter<T> : MultiTermQueryWrapperFilter<NumericRangeQuery<T>> where T : struct, IComparable<T> Type Parameters Name Description T Properties | Improve this Doc View Source IncludesMax Returns true if the upper endpoint is inclusive Declaration public bool IncludesMax { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesMin Returns true if the lower endpoint is inclusive Declaration public bool IncludesMin { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Max Returns the upper value of this range filter Declaration public T? Max { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source Min Returns the lower value of this range filter Declaration public T? Min { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32 Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery-1.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.NumericRangeQuery-1.html",
    "title": "Class NumericRangeQuery<T> | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class NumericRangeQuery<T> A Query that matches numeric values within a specified range. To use this, you must first index the numeric values using Int32Field , SingleField , Int64Field or DoubleField (expert: NumericTokenStream ). If your terms are instead textual, you should use TermRangeQuery . NumericRangeFilter is the filter equivalent of this query. You create a new NumericRangeQuery<T> with the static factory methods, eg: Query q = NumericRangeQuery.NewFloatRange(\"weight\", 0.03f, 0.10f, true, true); matches all documents whose System.Single valued \"weight\" field ranges from 0.03 to 0.10, inclusive. The performance of NumericRangeQuery<T> is much better than the corresponding TermRangeQuery because the number of terms that must be searched is usually far fewer, thanks to trie indexing, described below. You can optionally specify a Lucene.Net.Search.NumericRangeQuery`1.precisionStep when creating this query. This is necessary if you've changed this configuration from its default (4) during indexing. Lower values consume more disk space but speed up searching. Suitable values are between 1 and 8 . A good starting point to test is 4 , which is the default value for all Numeric* classes. See below for details. This query defaults to CONSTANT_SCORE_AUTO_REWRITE_DEFAULT . With precision steps of <=4, this query can be run with one of the BooleanQuery rewrite methods without changing BooleanQuery 's default max clause count. How it works See the publication about panFMP , where this algorithm was described (referred to as TrieRangeQuery ): Schindler, U, Diepenbroek, M , 2008. Generic XML-based Framework for Metadata Portals. Computers & Geosciences 34 (12), 1947-1955. doi:10.1016/j.cageo.2008.02.023 A quote from this paper: Because Apache Lucene is a full-text search engine and not a conventional database, it cannot handle numerical ranges (e.g., field value is inside user defined bounds, even dates are numerical values). We have developed an extension to Apache Lucene that stores the numerical values in a special string-encoded format with variable precision (all numerical values like System.Double s, System.Int64 s, System.Single s, and System.Int32 s are converted to lexicographic sortable string representations and stored with different precisions (for a more detailed description of how the values are stored, see NumericUtils ). A range is then divided recursively into multiple intervals for searching: The center of the range is searched only with the lowest possible precision in the trie , while the boundaries are matched more exactly. This reduces the number of terms dramatically. For the variant that stores long values in 8 different precisions (each reduced by 8 bits) that uses a lowest precision of 1 byte, the index contains only a maximum of 256 distinct values in the lowest precision. Overall, a range could consist of a theoretical maximum of 7*255*2 + 255 = 3825 distinct terms (when there is a term for every distinct value of an 8-byte-number in the index and the range covers almost all of them; a maximum of 255 distinct values is used because it would always be possible to reduce the full 256 values to one term with degraded precision). In practice, we have seen up to 300 terms in most cases (index with 500,000 metadata records and a uniform value distribution). Precision Step You can choose any Lucene.Net.Search.NumericRangeQuery`1.precisionStep when encoding values. Lower step values mean more precisions and so more terms in index (and index gets larger). The number of indexed terms per value is (those are generated by NumericTokenStream ): indexedTermsPerValue = ceil ( bitsPerValue / precisionStep ) As the lower precision terms are shared by many values, the additional terms only slightly grow the term dictionary (approx. 7% for precisionStep=4 ), but have a larger impact on the postings (the postings file will have more entries, as every document is linked to indexedTermsPerValue terms instead of one). The formula to estimate the growth of the term dictionary in comparison to one term per value: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> On the other hand, if the Lucene.Net.Search.NumericRangeQuery`1.precisionStep is smaller, the maximum number of terms to match reduces, which optimizes query speed. The formula to calculate the maximum number of terms that will be visited while executing the query is: <!-- the formula in the alt attribute was transformed from latex to PNG with http://1.618034.com/latex.php (with 110 dpi): --> For longs stored using a precision step of 4, maxQueryTerms = 15 15 2 + 15 = 465 , and for a precision step of 2, maxQueryTerms = 31 3 2 + 3 = 189 . But the faster search speed is reduced by more seeking in the term enum of the index. Because of this, the ideal Lucene.Net.Search.NumericRangeQuery`1.precisionStep value can only be found out by testing. Important: You can index with a lower precision step value and test search speed using a multiple of the original step value. Good values for Lucene.Net.Search.NumericRangeQuery`1.precisionStep are depending on usage and data type: The default for all data types is 4 , which is used, when no precisionStep is given. Ideal value in most cases for 64 bit data types (long, double) is 6 or 8 . Ideal value in most cases for 32 bit data types (int, float) is 4 . For low cardinality fields larger precision steps are good. If the cardinality is < 100, it is fair to use System.Int32.MaxValue (see below). Steps >=64 for long/double and >=32 for int/float produces one token per value in the index and querying is as slow as a conventional TermRangeQuery . But it can be used to produce fields, that are solely used for sorting (in this case simply use System.Int32.MaxValue as Lucene.Net.Search.NumericRangeQuery`1.precisionStep ). Using Int32Field , Int64Field , SingleField or DoubleField for sorting is ideal, because building the field cache is much faster than with text-only numbers. These fields have one term per value and therefore also work with term enumeration for building distinct lists (e.g. facets / preselected values to search for). Sorting is also possible with range query optimized fields using one of the above Lucene.Net.Search.NumericRangeQuery`1.precisionStep s. Comparisons of the different types of RangeQueries on an index with about 500,000 docs showed that TermRangeQuery in boolean rewrite mode (with raised BooleanQuery clause count) took about 30-40 secs to complete, TermRangeQuery in constant score filter rewrite mode took 5 secs and executing this class took <100ms to complete (on an Opteron64 machine, Java 1.5, 8 bit precision step). This query type was developed for a geographic portal, where the performance for e.g. bounding boxes or exact date/time stamps is important. @since 2.9 Inheritance System.Object Query MultiTermQuery NumericRangeQuery<T> Inherited Members MultiTermQuery.m_field MultiTermQuery.m_rewriteMethod MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT MultiTermQuery.Field MultiTermQuery.GetTermsEnum(Terms) MultiTermQuery.Rewrite(IndexReader) MultiTermQuery.MultiTermRewriteMethod Query.Boost Query.ToString() Query.CreateWeight(IndexSearcher) Query.ExtractTerms(ISet<Term>) Query.Clone() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search Assembly : Lucene.Net.dll Syntax public sealed class NumericRangeQuery<T> : MultiTermQuery where T : struct, IComparable<T> Type Parameters Name Description T Properties | Improve this Doc View Source IncludesMax Returns true if the upper endpoint is inclusive Declaration public bool IncludesMax { get; } Property Value Type Description System.Boolean | Improve this Doc View Source IncludesMin Returns true if the lower endpoint is inclusive Declaration public bool IncludesMin { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Max Returns the upper value of this range query Declaration public T? Max { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source Min Returns the lower value of this range query Declaration public T? Min { get; } Property Value Type Description System.Nullable <T> | Improve this Doc View Source PrecisionStep Returns the precision step. Declaration public int PrecisionStep { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides MultiTermQuery.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides MultiTermQuery.GetHashCode() | Improve this Doc View Source GetTermsEnum(Terms, AttributeSource) Declaration protected override TermsEnum GetTermsEnum(Terms terms, AttributeSource atts) Parameters Type Name Description Terms terms AttributeSource atts Returns Type Description TermsEnum Overrides MultiTermQuery.GetTermsEnum(Terms, AttributeSource) | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String) Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectB.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectB.html",
    "title": "Class AfterEffectB | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AfterEffectB Model of the information gain based on the ratio of two Bernoulli processes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AfterEffect AfterEffectB Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class AfterEffectB : AfterEffect Constructors | Improve this Doc View Source AfterEffectB() Sole constructor: parameter-free Declaration public AfterEffectB() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectL.html": {
    "href": "api/Lucene.Net/Lucene.Net.Search.Similarities.AfterEffectL.html",
    "title": "Class AfterEffectL | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class AfterEffectL Model of the information gain based on Laplace's law of succession. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AfterEffect AfterEffectL Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Similarities Assembly : Lucene.Net.dll Syntax public class AfterEffectL : AfterEffect Constructors | Improve this Doc View Source AfterEffectL() Sole constructor: parameter-free Declaration public AfterEffectL() Methods | Improve this Doc View Source Explain(BasicStats, Single) Declaration public override sealed Explanation Explain(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description Explanation Overrides AfterEffect.Explain(BasicStats, Single) | Improve this Doc View Source Score(BasicStats, Single) Declaration public override sealed float Score(BasicStats stats, float tfn) Parameters Type Name Description BasicStats stats System.Single tfn Returns Type Description System.Single Overrides AfterEffect.Score(BasicStats, Single) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AfterEffect.ToString() Extension Methods Number.IsNumber(Object)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseLightStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseLightStemFilter.html",
    "title": "Class PortugueseLightStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseLightStemFilter A TokenFilter that applies PortugueseLightStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseLightStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseLightStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseLightStemFilter(TokenStream) Declaration public PortugueseLightStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseLightStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseLightStemFilterFactory.html",
    "title": "Class PortugueseLightStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseLightStemFilterFactory Factory for PortugueseLightStemFilter . <fieldType name=\"text_ptlgtstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseLightStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PortugueseLightStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseLightStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PortugueseLightStemFilterFactory(IDictionary<String, String>) Creates a new PortugueseLightStemFilterFactory Declaration public PortugueseLightStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilter.html",
    "title": "Class PortugueseMinimalStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseMinimalStemFilter A TokenFilter that applies PortugueseMinimalStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseMinimalStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseMinimalStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseMinimalStemFilter(TokenStream) Declaration public PortugueseMinimalStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilterFactory.html",
    "title": "Class PortugueseMinimalStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseMinimalStemFilterFactory Factory for PortugueseMinimalStemFilter . <fieldType name=\"text_ptminstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseMinimalStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PortugueseMinimalStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseMinimalStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PortugueseMinimalStemFilterFactory(IDictionary<String, String>) Creates a new PortugueseMinimalStemFilterFactory Declaration public PortugueseMinimalStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseMinimalStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseMinimalStemmer.html",
    "title": "Class PortugueseMinimalStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseMinimalStemmer Minimal Stemmer for Portuguese This follows the \"RSLP-S\" algorithm presented in: A study on the Use of Stemming for Monolingual Ad-Hoc Portuguese Information Retrieval (Orengo, et al) which is just the plural reduction step of the RSLP algorithm from A Stemming Algorithm for the Portuguese Language , Orengo et al. Inheritance System.Object RSLPStemmerBase PortugueseMinimalStemmer Inherited Members RSLPStemmerBase.Parse(Type, String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseMinimalStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s System.Int32 len Returns Type Description System.Int32 See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseStemFilter.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseStemFilter.html",
    "title": "Class PortugueseStemFilter | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseStemFilter A TokenFilter that applies PortugueseStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom TokenFilter that sets the KeywordAttribute before this TokenStream . Inheritance System.Object AttributeSource TokenStream TokenFilter PortugueseStemFilter Implements System.IDisposable Inherited Members TokenFilter.m_input TokenFilter.End() TokenFilter.Dispose(Boolean) TokenFilter.Reset() TokenStream.Dispose() AttributeSource.GetAttributeFactory() AttributeSource.GetAttributeClassesEnumerator() AttributeSource.GetAttributeImplsEnumerator() AttributeSource.AddAttributeImpl(Attribute) AttributeSource.AddAttribute<T>() AttributeSource.HasAttributes AttributeSource.HasAttribute<T>() AttributeSource.GetAttribute<T>() AttributeSource.ClearAttributes() AttributeSource.CaptureState() AttributeSource.RestoreState(AttributeSource.State) AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) AttributeSource.ReflectWith(IAttributeReflector) AttributeSource.CloneAttributes() AttributeSource.CopyTo(AttributeSource) AttributeSource.ToString() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public sealed class PortugueseStemFilter : TokenFilter, IDisposable Constructors | Improve this Doc View Source PortugueseStemFilter(TokenStream) Declaration public PortugueseStemFilter(TokenStream input) Parameters Type Name Description TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseStemFilterFactory.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseStemFilterFactory.html",
    "title": "Class PortugueseStemFilterFactory | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseStemFilterFactory Factory for PortugueseStemFilter . <fieldType name=\"text_ptstem\" class=\"solr.TextField\" positionIncrementGap=\"100\"> <analyzer> <tokenizer class=\"solr.StandardTokenizerFactory\"/> <filter class=\"solr.LowerCaseFilterFactory\"/> <filter class=\"solr.PortugueseStemFilterFactory\"/> </analyzer> </fieldType> Inheritance System.Object AbstractAnalysisFactory TokenFilterFactory PortugueseStemFilterFactory Inherited Members TokenFilterFactory.ForName(String, IDictionary<String, String>) TokenFilterFactory.LookupClass(String) TokenFilterFactory.AvailableTokenFilters TokenFilterFactory.ReloadTokenFilters() AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM AbstractAnalysisFactory.m_luceneMatchVersion AbstractAnalysisFactory.OriginalArgs AbstractAnalysisFactory.AssureMatchVersion() AbstractAnalysisFactory.LuceneMatchVersion AbstractAnalysisFactory.Require(IDictionary<String, String>, String) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Require(IDictionary<String, String>, String, ICollection<String>, Boolean) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String) AbstractAnalysisFactory.Get(IDictionary<String, String>, String, ICollection<String>, String, Boolean) AbstractAnalysisFactory.RequireInt32(IDictionary<String, String>, String) AbstractAnalysisFactory.GetInt32(IDictionary<String, String>, String, Int32) AbstractAnalysisFactory.RequireBoolean(IDictionary<String, String>, String) AbstractAnalysisFactory.GetBoolean(IDictionary<String, String>, String, Boolean) AbstractAnalysisFactory.RequireSingle(IDictionary<String, String>, String) AbstractAnalysisFactory.GetSingle(IDictionary<String, String>, String, Single) AbstractAnalysisFactory.RequireChar(IDictionary<String, String>, String) AbstractAnalysisFactory.GetChar(IDictionary<String, String>, String, Char) AbstractAnalysisFactory.GetSet(IDictionary<String, String>, String) AbstractAnalysisFactory.GetPattern(IDictionary<String, String>, String) AbstractAnalysisFactory.GetCulture(IDictionary<String, String>, String, CultureInfo) AbstractAnalysisFactory.GetWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.GetLines(IResourceLoader, String) AbstractAnalysisFactory.GetSnowballWordSet(IResourceLoader, String, Boolean) AbstractAnalysisFactory.SplitFileNames(String) AbstractAnalysisFactory.GetClassArg() AbstractAnalysisFactory.IsExplicitLuceneMatchVersion System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseStemFilterFactory : TokenFilterFactory Constructors | Improve this Doc View Source PortugueseStemFilterFactory(IDictionary<String, String>) Creates a new PortugueseStemFilterFactory Declaration public PortugueseStemFilterFactory(IDictionary<string, string> args) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > args Methods | Improve this Doc View Source Create(TokenStream) Declaration public override TokenStream Create(TokenStream input) Parameters Type Name Description TokenStream input Returns Type Description TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseStemmer.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Pt.PortugueseStemmer.html",
    "title": "Class PortugueseStemmer | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Class PortugueseStemmer Portuguese stemmer implementing the RSLP (Removedor de Sufixos da Lingua Portuguesa) algorithm. This is sometimes also referred to as the Orengo stemmer. Inheritance System.Object RSLPStemmerBase PortugueseStemmer Inherited Members RSLPStemmerBase.Parse(Type, String) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Analysis.Pt Assembly : Lucene.Net.Analysis.Common.dll Syntax public class PortugueseStemmer : RSLPStemmerBase Methods | Improve this Doc View Source Stem(Char[], Int32) Declaration public virtual int Stem(char[] s, int len) Parameters Type Name Description System.Char [] s buffer, oversized to at least len+1 System.Int32 len initial valid length of buffer Returns Type Description System.Int32 new valid length, stemmed See Also RSLPStemmerBase"
  },
  "api/Lucene.Net.Join/Lucene.Net.Join.html": {
    "href": "api/Lucene.Net.Join/Lucene.Net.Join.html",
    "title": "Namespace Lucene.Net.Join | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Join <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This modules support index-time and query-time joins. Index-time joins The index-time joining support joins while searching, where joined documents are indexed as a single document block using IndexWriter.addDocuments . This is useful for any normalized content (XML documents or database tables). In database terms, all rows for all joined tables matching a single row of the primary table must be indexed as a single document block, with the parent document being last in the group. When you index in this way, the documents in your index are divided into parent documents (the last document of each block) and child documents (all others). You provide a Filter that identifies the parent documents, as Lucene does not currently record any information about doc blocks. At search time, use ToParentBlockJoinQuery to remap/join matches from any child Query (ie, a query that matches only child documents) up to the parent document space. The resulting query can then be used as a clause in any query that matches parent. If you only care about the parent documents matching the query, you can use any collector to collect the parent hits, but if you'd also like to see which child documents match for each parent document, use the ToParentBlockJoinCollector to collect the hits. Once the search is done, you retrieve a <xref:Lucene.Net.Grouping.TopGroups> instance from the ToParentBlockJoinCollector.getTopGroups method. To map/join in the opposite direction, use ToChildBlockJoinQuery . This wraps any query matching parent documents, creating the joined query matching only child documents. Query-time joins The query time joining is index term based and implemented as two pass search. The first pass collects all the terms from a fromField that match the fromQuery. The second pass returns all documents that have matching terms in a toField to the terms collected in the first pass. Query time joining has the following input: fromField : The from field to join from. fromQuery : The query executed to collect the from terms. This is usually the user specified query. multipleValuesPerDocument : Whether the fromField contains more than one value per document scoreMode : Defines how scores are translated to the other join side. If you don't care about scoring use #None mode. This will disable scoring and is therefore more efficient (requires less memory and is faster). toField : The to field to join to Basically the query-time joining is accessible from one static method. The user of this method supplies the method with the described input and a IndexSearcher where the from terms need to be collected from. The returned query can be executed with the same IndexSearcher , but also with another IndexSearcher . Example usage of the JoinUtil.createJoinQuery : String fromField = \"from\"; // Name of the from field boolean multipleValuesPerDocument = false; // Set only yo true in the case when your fromField has multiple values per document in your index String toField = \"to\"; // Name of the to field ScoreMode scoreMode = ScoreMode.Max // Defines how the scores are translated into the other side of the join. Query fromQuery = new TermQuery(new Term(\"content\", searchTerm)); // Query executed to collect from values to join to the to values Query joinQuery = JoinUtil.createJoinQuery(fromField, multipleValuesPerDocument, toField, fromQuery, fromSearcher, scoreMode); TopDocs topDocs = toSearcher.search(joinQuery, 10); // Note: toSearcher can be the same as the fromSearcher // Render topDocs... Classes FixedBitSetCachingWrapperFilter A CachingWrapperFilter that caches sets using a FixedBitSet , as required for joins. JoinUtil Utility for query time joining using Lucene.Net.Join.TermsQuery and Lucene.Net.Join.TermsCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToChildBlockJoinQuery Just like ToParentBlockJoinQuery , except this query joins in reverse: you provide a Query matching parent documents and it joins down to child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinCollector Collects parent document hits for a Query containing one more more BlockJoinQuery clauses, sorted by the specified parent Sort . Note that this cannot perform arbitrary joins; rather, it requires that all joined documents are indexed as a doc block (using AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) . Ie, the join is computed at index time. The parent Sort must only use fields from the parent documents; sorting by field in the child documents is not supported. You should only use this collector if one or more of the clauses in the query is a ToParentBlockJoinQuery . This collector will find those query clauses and record the matching child documents for the top scoring parent documents. Multiple joins (star join) and nested joins and a mix of the two are allowed, as long as in all cases the documents corresponding to a single row of each joined parent table were indexed as a doc block. For the simple star join you can retrieve the ITopGroups<TGroupValue> instance containing each ToParentBlockJoinQuery 's matching child documents for the top parent groups, using GetTopGroups(ToParentBlockJoinQuery, Sort, Int32, Int32, Int32, Boolean) . Ie, a single query, which will contain two or more ToParentBlockJoinQuery 's as clauses representing the star join, can then retrieve two or more ITopGroups<TGroupValue> instances. For nested joins, the query will run correctly (ie, match the right parent and child documents), however, because TopGroups<TGroupValue> is currently unable to support nesting (each group is not able to hold another TopGroups<TGroupValue> ), you are only able to retrieve the TopGroups<TGroupValue> of the first join. The TopGroups<TGroupValue> of the nested joins will not be correct. See http://lucene.apache.org/core/4_8_0/join/ for a code sample. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinFieldComparer A field comparer that allows parent documents to be sorted by fields from the nested / child documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinFieldComparer.Highest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the highest values in the child / nested docs first. ToParentBlockJoinFieldComparer.Lowest Concrete implementation of ToParentBlockJoinSortField to sorts the parent docs with the lowest values in the child / nested docs first. ToParentBlockJoinQuery This query requires that you index children and parent docs as a single block, using the AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. In each block, the child documents must appear first, ending with the parent document. At search time you provide a Filter identifying the parents, however this Filter must provide an FixedBitSet per sub-reader. Once the block index is built, use this query to wrap any sub-query matching only child docs and join matches in that child document space up to the parent document space. You can then use this Query as a clause with other queries in the parent document space. See ToChildBlockJoinQuery if you need to join in the reverse order. The child documents must be orthogonal to the parent documents: the wrapped child query must never return a parent document. If you'd like to retrieve ITopGroups<TGroupValue> for the resulting query, use the ToParentBlockJoinCollector . Note that this is not necessary, ie, if you simply want to collect the parent documents and don't need to see which child documents matched under that parent, then you can use any collector. NOTE : If the overall query contains parent-only matches, for example you OR a parent-only query with a joined child-only query, then the resulting collected documents will be correct, however the ITopGroups<TGroupValue> you get from ToParentBlockJoinCollector will not contain every child for parents that had matched. See http://lucene.apache.org/core/4_8_0/join/ for an overview. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ToParentBlockJoinSortField A special sort field that allows sorting parent docs based on nested / child level fields. Based on the sort order it either takes the document with the lowest or highest field value into account. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums ScoreMode How to aggregate multiple child hit scores into a single parent score."
  },
  "api/Lucene.Net/overview.html": {
    "href": "api/Lucene.Net/overview.html",
    "title": "| Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Apache Lucene is a high-performance, full-featured text search engine library. Here's a simple example how to use Lucene for indexing and searching (using JUnit to check if the results are what we expect): <!-- = Java2Html Converter 5.0 [2006-03-04] by Markus Gebhard markus@jave.de = --> Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); // Store the index in memory: Directory directory = new RAMDirectory(); // To store an index on disk, use this instead: //Directory directory = FSDirectory.open(\"/tmp/testindex\"); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer); IndexWriter iwriter = new IndexWriter(directory, config); Document doc = new Document(); String text = \"This is the text to be indexed.\"; doc.add(new Field(\"fieldname\", text, TextField.TYPE_STORED)); iwriter.addDocument(doc); iwriter.close(); // Now search the index: DirectoryReader ireader = DirectoryReader.open(directory); IndexSearcher isearcher = new IndexSearcher(ireader); // Parse a simple query that searches for \"text\": QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, \"fieldname\", analyzer); Query query = parser.parse(\"text\"); ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs; assertEquals(1, hits.length); // Iterate through the results: for (int i = 0; i < hits.length;=\"\" i++)=\"\" {=\"\" document=\"\" hitdoc=\"isearcher.doc(hits[i].doc);\" assertequals(\"this=\"\" is=\"\" the=\"\" text=\"\" to=\"\" be=\"\" indexed.\",=\"\" hitdoc.get(\"fieldname\"));=\"\" }=\"\" ireader.close();=\"\"> The Lucene API is divided into several packages: Lucene.Net.Analysis defines an abstract Analyzer API for converting text from a {@link java.io.Reader} into a TokenStream , an enumeration of token Attribute s. A TokenStream can be composed by applying TokenFilter s to the output of a Tokenizer . Tokenizers and TokenFilters are strung together and applied with an Analyzer . analyzers-common provides a number of Analyzer implementations, including StopAnalyzer and the grammar-based StandardAnalyzer . Lucene.Net.Codecs provides an abstraction over the encoding and decoding of the inverted index structure, as well as different implementations that can be chosen depending upon application needs. Lucene.Net.Documents provides a simple Document class. A Document is simply a set of named Field s, whose values may be strings or instances of {@link java.io.Reader}. Lucene.Net.Index provides two primary classes: IndexWriter , which creates and adds documents to indices; and IndexReader , which accesses the data in the index. Lucene.Net.Search provides data structures to represent queries (ie TermQuery for individual words, PhraseQuery for phrases, and BooleanQuery for boolean combinations of queries) and the IndexSearcher which turns queries into TopDocs . A number of QueryParser s are provided for producing query structures from strings or xml. Lucene.Net.Store defines an abstract class for storing persistent data, the Directory , which is a collection of named files written by an IndexOutput and read by an IndexInput . Multiple implementations are provided, including FSDirectory , which uses a file system directory to store files, and RAMDirectory which implements files as memory-resident data structures. Lucene.Net.Util contains a few handy data structures and util classes, ie OpenBitSet and PriorityQueue . To use Lucene, an application should: Create Document s by adding Field s; Create an IndexWriter and add documents to it with AddDocument ; Call QueryParser.parse() to build a query from a string; and Create an IndexSearcher and pass the query to its Search method. Some simple examples of code which does this are: IndexFiles.java creates an index for all the files contained in a directory. SearchFiles.java prompts for queries and searches an index."
  },
  "index.html": {
    "href": "index.html",
    "title": "Lucene.Net Docs - The documentation website for Lucene.Net | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Apache Lucene.Net 4.8.0 Documentation Lucene is a .NET full-text search engine. Lucene.NET is not a complete application, but rather a code library and API that can easily be used to add search capabilities to applications. This is the official API documentation for Apache Lucene.NET 4.8.0 . Getting Started The following section is intended as a \"getting started\" guide. It has three audiences: first-time users looking to install Apache Lucene in their application; developers looking to modify or base the applications they develop on Lucene; and developers looking to become involved in and contribute to the development of Lucene. The goal is to help you \"get started\". It does not go into great depth on some of the conceptual or inner details of Lucene: Lucene demo, its usage, and sources : Tutorial and walk-through of the command-line Lucene demo. Introduction to Lucene's APIs : High-level summary of the different Lucene packages. Analysis overview : Introduction to Lucene's analysis API. See also the TokenStream consumer workflow . Reference Documents Changes : List of changes in this release. System Requirements: Minimum and supported .NET versions. TODO: Add link Migration Guide: What changed in Lucene 4; how to migrate code from Lucene 3.x. TODO: Add link File Formats : Guide to the supported index format used by Lucene. This can be customized by using an alternate codec . Search and Scoring in Lucene : Introduction to how Lucene scores documents. Classic Scoring Formula : Formula of Lucene's classic Vector Space implementation. (look here for other models) Classic QueryParser Syntax : Overview of the Classic QueryParser's syntax and features. Libraries Lucene.Net : Lucene core library Lucene.Net.Analysis.Common : Analyzers for indexing content in different languages and domains. Lucene.Net.ICU : Analysis integration with ICU (International Components for Unicode). Lucene.Net.Analysis.Kuromoji : Japanese Morphological Analyzer Lucene.Net.Analysis.Phonetic : Analyzer for indexing phonetic signatures (for sounds-alike search) Lucene.Net.Analysis.SmartCn : Analyzer for indexing Chinese Lucene.Net.Analysis.Stempel : Analyzer for indexing Polish <!-- * [Lucene.Net.Analysis.UIMA](xref:Lucene.Net.Analysis.UIMA): Analysis integration with Apache UIMA --> <!-- Change to Lucene.Net.Analysis.OpenNLP .... see https://github.com/apache/lucenenet/pull/230> --> Lucene.Net.Benchmark : System for benchmarking Lucene Lucene.Net.Classification : Classification module for Lucene Lucene.Net.Codecs : Lucene codecs and postings formats. Lucene.Net.Expressions : Dynamically computed values to sort/facet/search on based on a pluggable grammar. Lucene.Net.Facet : Faceted indexing and search capabilities Lucene.Net.Grouping : Collectors for grouping search results. Lucene.Net.Highlighter : Highlights search keywords in results Lucene.Net.Join : Index-time and Query-time joins for normalized content Lucene.Net.Memory : Single-document in-memory index implementation Lucene.Net.Misc : Index tools and other miscellaneous code Lucene.Net.Queries : Filters and Queries that add to core Lucene Lucene.Net.QueryParser : Query parsers and parsing framework Lucene.Net.Replicator : Files replication utility Lucene.Net.Sandbox : Various third party contributions and new ideas Lucene.Net.Spatial : Geospatial search Lucene.Net.Suggest : Auto-suggest and Spellchecking support To be completed : analyzers-morfologik: Analyzer for indexing Polish To be completed : test-framework: Framework for testing Lucene-based applications Tools Lucene CLI : Dotnet tool to work with Lucene indexes from the command line Demo : Simple example code"
  },
  "api/Lucene.Net.Facet/Lucene.Net.Facet.html": {
    "href": "api/Lucene.Net.Facet/Lucene.Net.Facet.html",
    "title": "Namespace Lucene.Net.Facet | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Facet <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> faceted search This module provides multiple methods for computing facet counts and value aggregations: * Taxonomy-based methods rely on a separate taxonomy index to map hierarchical facet paths to global int ordinals for fast counting at search time; these methods can compute counts (( FastTaxonomyFacetCounts , TaxonomyFacetCounts ) aggregate long or double values <xref:Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumIntAssociations>, <xref:Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumFloatAssociations>, TaxonomyFacetSumValueSource . Add FacetField or AssociationFacetField to your documents at index time to use taxonomy-based methods. * Sorted-set doc values method does not require a separate taxonomy index, and computes counts based on sorted set doc values fields (<xref:Lucene.Net.Facet.Sortedset.SortedSetDocValuesFacetCounts>). Add <xref:Lucene.Net.Facet.Sortedset.SortedSetDocValuesFacetField> to your documents at index time to use sorted set facet counts. * Range faceting <xref:Lucene.Net.Facet.Range.LongRangeFacetCounts>, DoubleRangeFacetCounts compute counts for a dynamic numeric range from a provided ValueSource (previously indexed numeric field, or a dynamic expression such as distance). At search time you first run your search, but pass a FacetsCollector to gather all hits (and optionally, scores for each hit). Then, instantiate whichever facet methods you'd like to use to compute aggregates. Finally, all methods implement a common Facets base API that you use to obtain specific facet counts. The various #search utility methods are useful for doing an \"ordinary\" search (sorting by score, or by a specified Sort) but also collecting into a FacetsCollector for subsequent faceting. Classes DrillDownQuery A Query for drill-down over facet categories. You should call Add(String, String[]) for every group of categories you want to drill-down over. NOTE: if you choose to create your own Query by calling Term(String, String, String[]) , it is recommended to wrap it with ConstantScoreQuery and set the Boost to 0.0f , so that it does not affect the scores of the documents. @lucene.experimental DrillSideways Computes drill down and sideways counts for the provided DrillDownQuery . Drill sideways counts include alternative values/aggregates for the drill-down dimensions so that a dimension does not disappear after the user drills down into it. Use one of the static search methods to do the search, and then get the hits and facet results from the returned DrillSidewaysResult . NOTE : this allocates one FacetsCollector for each drill-down, plus one. If your index has high number of facet labels then this will multiply your memory usage. @lucene.experimental DrillSidewaysResult Result of a drill sideways search, including the Facets and TopDocs . FacetField Add an instance of this to your Document for every facet label. NOTE: you must call Build(Document) before you add the document to IndexWriter . FacetResult Counts or aggregates for a single dimension. Facets Common base class for all facets implementations. @lucene.experimental FacetsCollector Collects hits for subsequent faceting. Once you've run a search and collect hits into this, instantiate one of the ICollector subclasses to do the facet counting. Use the Search utility methods (such as Search(IndexSearcher, Query, Int32, ICollector) ) to perform an \"ordinary\" search but also collect into a Facets . FacetsCollector.Docs Used during collection to record matching docs and then return a DocIdSet that contains them. FacetsCollector.MatchingDocs Holds the documents that were matched in the AtomicReaderContext . If scores were required, then Scores is not null . FacetsConfig Records per-dimension configuration. By default a dimension is flat, single valued and does not require count for the dimension; use the setters in this class to change these settings for each dim. NOTE : this configuration is not saved into the index, but it's vital, and up to the application to ensure, that at search time the provided FacetsConfig matches what was used during indexing. @lucene.experimental FacetsConfig.DimConfig Holds the configuration for one dimension @lucene.experimental LabelAndValue Single label and its value, usually contained in a FacetResult . MultiFacets Maps specified dims to provided Facets impls; else, uses the default Facets impl. RandomSamplingFacetsCollector Collects hits for subsequent faceting, using sampling if needed. Once you've run a search and collect hits into this, instantiate one of the Facets subclasses to do the facet counting. Note that this collector does not collect the scores of matching docs (i.e. Scores ) is null . If you require the original set of hits, you can call GetOriginalMatchingDocs() . Also, since the counts of the top-facets is based on the sampled set, you can amortize the counts by calling AmortizeFacetCounts(FacetResult, FacetsConfig, IndexSearcher) . TopOrdAndInt32Queue Keeps highest results, first by largest System.Int32 value, then tie break by smallest ord. NOTE: This was TopOrdAndIntQueue in Lucene TopOrdAndInt32Queue.OrdAndValue Holds a single entry. TopOrdAndSingleQueue Keeps highest results, first by largest System.Single value, then tie break by smallest ord. NOTE: This was TopOrdAndFloatQueue in Lucene TopOrdAndSingleQueue.OrdAndValue Holds a single entry."
  },
  "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Stempel.html": {
    "href": "api/Lucene.Net.Analysis/Lucene.Net.Analysis.Stempel.html",
    "title": "Namespace Lucene.Net.Analysis.Stempel | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Stempel <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Stempel - Algorithmic Stemmer for Polish Language Introduction A method for conflation of different inflected word forms is an important component of many Information Retrieval systems. It helps to improve the system's recall and can significantly reduce the index size. This is especially true for highly-inflectional languages like those from the Slavic language family (Czech, Slovak, Polish, Russian, Bulgarian, etc). This page describes a software package consisting of high-quality stemming tables for Polish, and a universal algorithmic stemmer, which operates using these tables. The stemmer code is taken virtually unchanged from the Egothor project . The software distribution includes stemmer tables prepared using an extensive corpus of Polish language (see details below). This work is available under Apache-style Open Source license - the stemmer code is covered by Egothor License, the tables and other additions are covered by Apache License 2.0. Both licenses allow to use the code in Open Source as well as commercial (closed source) projects. Terminology A short explanation is in order about the terminology used in this text. In the following sections I make a distinction between stem and lemma . Lemma is a base grammatical form (dictionary form, headword) of a word. Lemma is an existing, grammatically correct word in some human language. Stem on the other hand is just a unique token, not necessarily making any sense in any human language, but which can serve as a unique label instead of lemma for the same set of inflected forms. Quite often stem is referred to as a \"root\" of the word - which is incorrect and misleading (stems sometimes have very little to do with the linguistic root of a word, i.e. a pattern found in a word which is common to all inflected forms or within a family of languages). For an IR system stems are usually sufficient, for a morphological analysis system obviously lemmas are a must. In practice, various stemmers produce a mix of stems and lemmas, as is the case with the stemmer described here. Additionally, for some languages, which use suffix-based inflection rules many stemmers based on suffix-stripping will produce a large percentage of stems equivalent to lemmas. This is however not the case for languages with complex, irregular inflection rules (such as Slavic languages) - here simplistic suffix-stripping stemmers produce very poor results. Background Lemmatization is a process of finding the base, non-inflected form of a word. The result of lemmatization is a correct existing word, often in nominative case for nouns and infinitive form for verbs. A given inflected form may correspond to several lemmas (e.g. \"found\" -> find, found) - the correct choice depends on the context. Stemming is concerned mostly with finding a unique \"root\" of a word, which not necessarily results in any existing word or lemma. The quality of stemming is measured by the rate of collisions (overstemming - which causes words with different lemmas to be incorrectly conflated into one \"root\"), and the rate of superfluous word \"roots\" (understemming - which assigns several \"roots\" to words with the same lemma). Both stemmer and lemmatizer can be implemented in various ways. The two most common approaches are: dictionary-based: where the stemmer uses an extensive dictionary of morphological forms in order to find the corresponding stem or lemma algorithmic: where the stemmer uses an algorithm, based on general morphological properties of a given language plus a set of heuristic rules There are many existing and well-known implementations of stemmers for English (Porter, Lovins, Krovetz) and other European languages ( Snowball ). There are also good quality commercial lemmatizers for Polish. However, there is only one freely available Polish stemmer, implemented by Dawid Weiss , based on the \"ispell\" dictionary and Jan Daciuk's FSA package . That stemmer is dictionary-based. This means that even though it can achieve perfect accuracy for previously known word forms found in its dictionary, it completely fails in case of all other word forms. This deficiency is somewhat mitigated by the comprehensive dictionary distributed with this stemmer (so there is a high probability that most of the words in the input text will be found in the dictionary), however the problem still remains (please see the page above for more detailed description). The implementation described here uses an algorithmic method. This method and particular algorithm implementation are described in detail in [1][2]. The main advantage of algorithmic stemmers is their ability to process previously unseen word forms with high accuracy. This particular algorithm uses a set of transformation rules (patch commands), which describe how a word with a given pattern should be transformed to its stem. These rules are first learned from a training corpus. They don't cover all possible cases, so there is always some loss of precision/recall (which means that even the words from the training corpus are sometimes incorrectly stemmed). Algorithm and implementation The algorithm and its Java implementation is described in detail in the publications cited below. Here's just a short excerpt from [2]: \"The aim is separation of the stemmer execution code from the data structures [...]. In other words, a static algorithm configurable by data must be developed. The word transformations that happen in the stemmer must be then encoded to the data tables. The tacit input of our method is a sample set (a so-called dictionary) of words (as keys) and their stems. Each record can be equivalently stored as a key and the record of key's transformation to its respective stem. The transformation record is termed a patch command (P-command). It must be ensured that P-commands are universal, and that P-commands can transform any word to its stem. Our solution[6,8] is based on the Levenstein metric [10], which produces P-command as the minimum cost path in a directed graph. One can imagine the P-command as an algorithm for an operator (editor) that rewrites a string to another string. The operator can use these instructions (PP-command's): removal - deletes a sequence of characters starting at the current cursor position and moves the cursor to the next character. The length of this sequence is the parameter; insertion - inserts a character ch, without moving the cursor. The character ch is a parameter; substitution - rewrites a character at the current cursor position to the character ch and moves the cursor to the next character. The character ch is a parameter; no operation (NOOP) - skip a sequence of characters starting at the current cursor position. The length of this sequence is the parameter. The P-commands are applied from the end of a word (right to left). This assumption can reduce the set of P-command's, because the last NOOP, moving the cursor to the end of a string without any changes, need not be stored.\" Data structure used to keep the dictionary (words and their P-commands) is a trie. Several optimization steps are applied in turn to reduce and optimize the initial trie, by eliminating useless information and shortening the paths in the trie. Finally, in order to obtain a stem from the input word, the word is passed once through a matching path in the trie (applying at each node the P-commands stored there). The result is a word stem. Corpus (to be completed...) The following Polish corpora have been used: Polish dictionary from ispell distribution Wzbogacony korpus sÅ‚ownika frekwencyjnego The Bible (so called \"TysiÄ…clecia\") - unauthorized electronic version Analizator morfologiczny SAM v. 3.4 - this was used to recover lemmas missing from other texts This step was the most time-consuming - and it would probably be even more tedious and difficult if not for the help of Python . The source texts had to be brought to a common encoding (UTF-8) - some of them used quite ancient encodings like Mazovia or DHN - and then scripts were written to collect all lemmas and inflected forms from the source texts. In cases when the source text was not tagged, I used the SAM analyzer to produce lemmas. In cases of ambiguous lemmatization I decided to put references to inflected forms from all base forms. All grammatical categories were allowed to appear in the corpus, i.e. nouns, verbs, adjectives, numerals, and pronouns. The resulting corpus consisted of roughly 87,000+ inflection sets, i.e. each set consisted of one base form (lemma) and many inflected forms. However, because of the nature of the training method I restricted these sets to include only those where there were at least 4 inflected forms. Sets with 3 or less inflected forms were removed, so that the final corpus consisted of ~69,000 unique sets, which in turn contained ~1.5 mln inflected forms. Testing I tested the stemmer tables produced using the implementation described above. The following sections give some details about the testing setup. Testing procedure The testing procedure was as follows: the whole corpus of ~69,000 unique sets was shuffled, so that the input sets were in random order. the corpus was split into two parts - one with 30,000 sets (Part 1), the other with ~39,000 sets (Part 2). Training samples were drawn in sequential order from the Part 1. Since the sets were already randomized, the training samples were also randomized, but this procedure ensured that each larger training sample contained all smaller samples. Part 2 was used for testing. Note: this means that the testing run used only words previously unseen during the training phase. This is the worst scenario, because it means that stemmer must extrapolate the learned rules to unknown cases. This also means that in a real-life case (where the input is a mix between known and unknown words) the F-measure of the stemmer will be even higher than in the table below. Test results The following table summarizes test results for varying sizes of training samples. The meaning of the table columns is described below: training sets: the number of training sets. One set consists of one lemma and at least 4 and up to ~80 inflected forms (including pre- and suffixed forms). testing forms: the number of testing forms. Only inflected forms were used in testing. stem OK: the number of cases when produced output was a correct (unique) stem. Note: quite often correct stems were also correct lemmas. lemma OK: the number of cases when produced output was a correct lemma. missing: the number of cases when stemmer was unable to provide any output. stem bad: the number of cases when produced output was a stem, but already in use identifying a different set. lemma bad: the number of cases when produced output was an incorrect lemma. Note: quite often in such case the output was a correct stem. table size: the size in bytes of the stemmer table. Training sets Testing forms Stem OK Lemma OK Missing Stem Bad Lemma Bad Table size [B] 100 1022985 842209 593632 172711 22331 256642 28438 200 1022985 862789 646488 153288 16306 223209 48660 500 1022985 885786 685009 130772 14856 207204 108798 700 1022985 909031 704609 107084 15442 211292 139291 1000 1022985 926079 725720 90117 14941 207148 183677 2000 1022985 942886 746641 73429 14903 202915 313516 5000 1022985 954721 759930 61476 14817 201579 640969 7000 1022985 956165 764033 60364 14620 198588 839347 10000 1022985 965427 775507 50797 14662 196681 1144537 12000 1022985 967664 782143 48722 14284 192120 1313508 15000 1022985 973188 788867 43247 14349 190871 1567902 17000 1022985 974203 791804 42319 14333 188862 1733957 20000 1022985 976234 791554 40058 14601 191373 1977615 I also measured the time to produce a stem (which involves traversing a trie, retrieving a patch command and applying the patch command to the input string). On a machine running Windows XP (Pentium 4, 1.7 GHz, JDK 1.4.2_03 HotSpot), for tables ranging in size from 1,000 to 20,000 cells, the time to produce a single stem varies between 5-10 microseconds. This means that the stemmer can process up to 200,000 words per second , an outstanding result when compared to other stemmers (Morfeusz - ~2,000 w/s, FormAN (MS Word analyzer) - ~1,000 w/s). The package contains a class org.getopt.stempel.Benchmark , which you can use to produce reports like the one below: --------- Stemmer benchmark report: ----------- Stemmer table: /res/tables/stemmer_2000.out Input file: ../test3.txt Number of runs: 3 RUN NUMBER: 1 2 3 Total input words 1378176 1378176 1378176 Missed output words 112 112 112 Time elapsed [ms] 6989 6940 6640 Hit rate percent 99.99% 99.99% 99.99% Miss rate percent 00.01% 00.01% 00.01% Words per second 197192 198584 207557 Time per word [us] 5.07 5.04 4.82 Summary The results of these tests are very encouraging. It seems that using the training corpus and the stemming algorithm described above results in a high-quality stemmer useful for most applications. Moreover, it can also be used as a better than average lemmatizer. Both the author of the implementation (Leo Galambos, <leo.galambos AT egothor DOT org>) and the author of this compilation (Andrzej Bialecki ) would appreciate any feedback and suggestions for further improvements. Bibliography Galambos, L.: Multilingual Stemmer in Web Environment, PhD Thesis, Faculty of Mathematics and Physics, Charles University in Prague, in press. Galambos, L.: Semi-automatic Stemmer Evaluation. International Intelligent Information Processing and Web Mining Conference, 2004, Zakopane, Poland. Galambos, L.: Lemmatizer for Document Information Retrieval Systems in JAVA. <http://www.informatik.uni-trier.de/%7Eley/db/conf/sofsem/sofsem2001.html#Galambos01> SOFSEM 2001, Piestany, Slovakia. Classes StempelFilter Transforms the token stream as per the stemming algorithm. Note: the input to the stemming filter must already be in lower case, so you will need to use LowerCaseFilter or LowerCaseTokenizer farther down the Tokenizer chain in order for this to work properly! StempelPolishStemFilterFactory Factory for StempelFilter using a Polish stemming table. StempelStemmer Stemmer class is a convenient facade for other stemmer-related classes. The core stemming algorithm and its implementation is taken verbatim from the Egothor project ( www.egothor.org ). Even though the stemmer tables supplied in the distribution package are built for Polish language, there is nothing language-specific here."
  },
  "api/Lucene.Net/Lucene.Net.Index.html": {
    "href": "api/Lucene.Net/Lucene.Net.Index.html",
    "title": "Namespace Lucene.Net.Index | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Index <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Code to maintain and access indices. Table Of Contents Postings APIs * Fields * Terms * Documents * Positions 2. Index Statistics * Term-level * Field-level * Segment-level * Document-level Postings APIs Fields Fields is the initial entry point into the postings APIs, this can be obtained in several ways: // access indexed fields for an index segment Fields fields = reader.fields(); // access term vector fields for a specified document Fields fields = reader.getTermVectors(docid); Fields implements Java's Iterable interface, so its easy to enumerate the list of fields: // enumerate list of fields for (String field : fields) { // access the terms for this field Terms terms = fields.terms(field); } Terms Terms represents the collection of terms within a field, exposes some metadata and statistics , and an API for enumeration. // metadata about the field System.out.println(\"positions? \" + terms.hasPositions()); System.out.println(\"offsets? \" + terms.hasOffsets()); System.out.println(\"payloads? \" + terms.hasPayloads()); // iterate through terms TermsEnum termsEnum = terms.iterator(null); BytesRef term = null; while ((term = termsEnum.next()) != null) { doSomethingWith(termsEnum.term()); } TermsEnum provides an iterator over the list of terms within a field, some statistics about the term, and methods to access the term's documents and positions . // seek to a specific term boolean found = termsEnum.seekExact(new BytesRef(\"foobar\")); if (found) { // get the document frequency System.out.println(termsEnum.docFreq()); // enumerate through documents DocsEnum docs = termsEnum.docs(null, null); // enumerate through documents and positions DocsAndPositionsEnum docsAndPositions = termsEnum.docsAndPositions(null, null); } Documents DocsEnum is an extension of DocIdSetIterator that iterates over the list of documents for a term, along with the term frequency within that document. int docid; while ((docid = docsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) { System.out.println(docid); System.out.println(docsEnum.freq()); } Positions DocsAndPositionsEnum is an extension of DocsEnum that additionally allows iteration of the positions a term occurred within the document, and any additional per-position information (offsets and payload) int docid; while ((docid = docsAndPositionsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) { System.out.println(docid); int freq = docsAndPositionsEnum.freq(); for (int i = 0; i < freq;=\"\" i++)=\"\" {=\"\" system.out.println(docsandpositionsenum.nextposition());=\"\" system.out.println(docsandpositionsenum.startoffset());=\"\" system.out.println(docsandpositionsenum.endoffset());=\"\" system.out.println(docsandpositionsenum.getpayload());=\"\" }=\"\" }=\"\"> Index Statistics Term statistics #docFreq : Returns the number of documents that contain at least one occurrence of the term. This statistic is always available for an indexed term. Note that it will also count deleted documents, when segments are merged the statistic is updated as those deleted documents are merged away. * #totalTermFreq : Returns the number of occurrences of this term across all documents. Note that this statistic is unavailable (returns -1 ) if term frequencies were omitted from the index ( DOCS_ONLY ) for the field. Like docFreq(), it will also count occurrences that appear in deleted documents. Field statistics #size : Returns the number of unique terms in the field. This statistic may be unavailable (returns -1 ) for some Terms implementations such as MultiTerms , where it cannot be efficiently computed. Note that this count also includes terms that appear only in deleted documents: when segments are merged such terms are also merged away and the statistic is then updated. * #getDocCount : Returns the number of documents that contain at least one occurrence of any term for this field. This can be thought of as a Field-level docFreq(). Like docFreq() it will also count deleted documents. * #getSumDocFreq : Returns the number of postings (term-document mappings in the inverted index) for the field. This can be thought of as the sum of #docFreq across all terms in the field, and like docFreq() it will also count postings that appear in deleted documents. * #getSumTotalTermFreq : Returns the number of tokens for the field. This can be thought of as the sum of #totalTermFreq across all terms in the field, and like totalTermFreq() it will also count occurrences that appear in deleted documents, and will be unavailable (returns -1 ) if term frequencies were omitted from the index ( DOCS_ONLY ) for the field. Segment statistics #maxDoc : Returns the number of documents (including deleted documents) in the index. * #numDocs : Returns the number of live documents (excluding deleted documents) in the index. * #numDeletedDocs : Returns the number of deleted documents in the index. * #size : Returns the number of indexed fields. * #getUniqueTermCount : Returns the number of indexed terms, the sum of #size across all fields. Document statistics Document statistics are available during the indexing process for an indexed field: typically a Similarity implementation will store some of these values (possibly in a lossy way), into the normalization value for the document in its #computeNorm method. #getLength : Returns the number of tokens for this field in the document. Note that this is just the number of times that #incrementToken returned true, and is unrelated to the values in PositionIncrementAttribute . * #getNumOverlap : Returns the number of tokens for this field in the document that had a position increment of zero. This can be used to compute a document length that discounts artificial tokens such as synonyms. * #getPosition : Returns the accumulated position value for this field in the document: computed from the values of PositionIncrementAttribute and including #getPositionIncrementGap s across multivalued fields. * #getOffset : Returns the total character offset value for this field in the document: computed from the values of OffsetAttribute returned by #end , and including #getOffsetGap s across multivalued fields. * #getUniqueTermCount : Returns the number of unique terms encountered for this field in the document. * #getMaxTermFrequency : Returns the maximum frequency across all unique terms encountered for this field in the document. Additional user-supplied statistics can be added to the document as DocValues fields and accessed via #getNumericDocValues . Classes AtomicReader AtomicReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. IndexReader s implemented by this subclass do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. AtomicReaderContext IndexReaderContext for AtomicReader instances. BaseCompositeReader<R> Base class for implementing CompositeReader s based on an array of sub-readers. The implementing class has to add code for correctly refcounting and closing the sub-readers. User code will most likely use MultiReader to build a composite reader on a set of sub-readers (like several DirectoryReader s). For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. This is a Lucene.NET INTERNAL API, use at your own risk BinaryDocValues A per-document byte[] BufferedUpdates Holds buffered deletes and updates, by docID, term or query for a single segment. this is used to hold buffered pending deletes and updates against the to-be-flushed segment. Once the deletes and updates are pushed (on flush in Lucene.Net.Index.DocumentsWriter ), they are converted to a FrozenDeletes instance. NOTE: instances of this class are accessed either via a private instance on Lucene.Net.Index.DocumentsWriterPerThread , or via sync'd code by Lucene.Net.Index.DocumentsWriterDeleteQueue ByteSliceReader IndexInput that knows how to read the byte slices written by Posting and PostingVector. We read the bytes in each slice until we hit the end of that slice at which point we read the forwarding address of the next slice and then jump to it. CheckAbort Class for recording units of work when merging segments. CheckIndex Basic tool and API to check the health of an index and write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run. Please make a complete backup of your index before using this to fix your index! This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status Returned from DoCheckIndex() detailing the health and status of the index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status.DocValuesStatus Status from testing DocValues CheckIndex.Status.FieldNormStatus Status from testing field norms. CheckIndex.Status.SegmentInfoStatus Holds the status of each segment in the index. See SegmentInfos . This is a Lucene.NET EXPERIMENTAL API, use at your own risk CheckIndex.Status.StoredFieldStatus Status from testing stored fields. CheckIndex.Status.TermIndexStatus Status from testing term index. CheckIndex.Status.TermVectorStatus Status from testing stored fields. CompositeReader Instances of this reader type can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the AtomicReaderContext for all sub-readers via Leaves . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader implements the CompositeReader interface, it is not possible to directly get postings. Concrete subclasses of IndexReader are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. CompositeReaderContext IndexReaderContext for CompositeReader instance. CompositeReaderContext.Builder CompoundFileExtractor Command-line tool for extracting sub-files out of a compound file. CorruptIndexException This exception is thrown when Lucene detects an inconsistency in the index. DirectoryReader DirectoryReader is an implementation of CompositeReader that can read indexes in a Directory . DirectoryReader instances are usually constructed with a call to one of the static Open() methods, e.g. Open(Directory) . For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. DocsAndPositionsEnum Also iterates through positions. DocsEnum Iterates through the documents and term freqs. NOTE: you must first call NextDoc() before using any of the per-doc methods. DocTermOrds This class enables fast access to multiple term ords for a specified field across all docIDs. Like IFieldCache , it uninverts the index and holds a packed data structure in RAM to enable fast access. Unlike IFieldCache , it can handle multi-valued fields, and, it does not hold the term bytes in RAM. Rather, you must obtain a TermsEnum from the GetOrdTermsEnum(AtomicReader) method, and then seek-by-ord to get the term's bytes. While normally term ords are type System.Int64 , in this API they are System.Int32 as the internal representation here cannot address more than MAX_INT32 unique terms. Also, typically this class is used on fields with relatively few unique terms vs the number of documents. In addition, there is an internal limit (16 MB) on how many bytes each chunk of documents may consume. If you trip this limit you'll hit an System.InvalidOperationException . Deleted documents are skipped during uninversion, and if you look them up you'll get 0 ords. The returned per-document ords do not retain their original order in the document. Instead they are returned in sorted (by ord, ie term's BytesRef comparer) order. They are also de-dup'd (ie if doc has same term more than once in this field, you'll only get that ord back once). This class tests whether the provided reader is able to retrieve terms by ord (ie, it's single segment, and it uses an ord-capable terms index). If not, this class will create its own term index internally, allowing to create a wrapped TermsEnum that can handle ord. The GetOrdTermsEnum(AtomicReader) method then provides this wrapped enum, if necessary. The RAM consumption of this class can be high! This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValues This class contains utility methods and constants for DocValues DocValuesUpdate An in-place update to a DocValues field. DocValuesUpdate.BinaryDocValuesUpdate An in-place update to a binary DocValues field DocValuesUpdate.NumericDocValuesUpdate An in-place update to a numeric DocValues field FieldInfo Access to the Field Info file that describes document fields and whether or not they are indexed. Each segment has a separate Field Info file. Objects of this class are thread-safe for multiple readers, but only one thread can be adding documents at a time, with no other reader or writer threads accessing this object. FieldInfos Collection of FieldInfo s (accessible by number or by name). This is a Lucene.NET EXPERIMENTAL API, use at your own risk FieldInvertState This class tracks the number and position / offset parameters of terms being added to the index. The information collected in this class is also used to calculate the normalization factor for a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Fields Flex API for access to fields and terms This is a Lucene.NET EXPERIMENTAL API, use at your own risk FilterAtomicReader A FilterAtomicReader contains another AtomicReader , which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality. The class FilterAtomicReader itself simply implements all abstract methods of IndexReader with versions that pass all requests to the contained index reader. Subclasses of FilterAtomicReader may further override some of these methods and may also provide additional methods and fields. NOTE : If you override LiveDocs , you will likely need to override NumDocs as well and vice-versa. NOTE : If this FilterAtomicReader does not change the content the contained reader, you could consider overriding CoreCacheKey so that IFieldCache and CachingWrapperFilter share the same entries for this atomic reader and the wrapped one. CombinedCoreAndDeletesKey could be overridden as well if the LiveDocs are not changed either. FilterAtomicReader.FilterDocsAndPositionsEnum Base class for filtering DocsAndPositionsEnum implementations. FilterAtomicReader.FilterDocsEnum Base class for filtering DocsEnum implementations. FilterAtomicReader.FilterFields Base class for filtering Fields implementations. FilterAtomicReader.FilterTerms Base class for filtering Terms implementations. NOTE : If the order of terms and documents is not changed, and if these terms are going to be intersected with automata, you could consider overriding Intersect(CompiledAutomaton, BytesRef) for better performance. FilterAtomicReader.FilterTermsEnum Base class for filtering TermsEnum implementations. FilterDirectoryReader A FilterDirectoryReader wraps another DirectoryReader , allowing implementations to transform or extend it. Subclasses should implement DoWrapDirectoryReader(DirectoryReader) to return an instance of the subclass. If the subclass wants to wrap the DirectoryReader 's subreaders, it should also implement a FilterDirectoryReader.SubReaderWrapper subclass, and pass an instance to its base constructor. FilterDirectoryReader.StandardReaderWrapper A no-op FilterDirectoryReader.SubReaderWrapper that simply returns the parent DirectoryReader 's original subreaders. FilterDirectoryReader.SubReaderWrapper Factory class passed to FilterDirectoryReader constructor that allows subclasses to wrap the filtered DirectoryReader 's subreaders. You can use this to, e.g., wrap the subreaders with specialized FilterAtomicReader implementations. FilteredTermsEnum Abstract class for enumerating a subset of all terms. Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than all that precede it. Please note: Consumers of this enumeration cannot call Seek() , it is forward only; it throws System.NotSupportedException when a seeking method is called. IndexCommit Expert: represents a single commit into an index as seen by the IndexDeletionPolicy or IndexReader . Changes to the content of an index are made visible only after the writer who made that change commits by writing a new segments file ( segments_N ). This point in time, when the action of writing of a new segments file to the directory is completed, is an index commit. Each index commit point has a unique segments file associated with it. The segments file associated with a later index commit point would have a larger N. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IndexDeletionPolicy Expert: policy for deletion of stale IndexCommit s. Implement this interface, and pass it to one of the IndexWriter or IndexReader constructors, to customize when older point-in-time commits ( IndexCommit ) are deleted from the index directory. The default deletion policy is KeepOnlyLastCommitDeletionPolicy , which always removes old commits as soon as a new commit is done (this matches the behavior before 2.2). One expected use case for this (and the reason why it was first created) is to work around problems with an index directory accessed via filesystems like NFS because NFS does not provide the \"delete on last close\" semantics that Lucene's \"point in time\" search normally relies on. By implementing a custom deletion policy, such as \"a commit is only removed once it has been stale for more than X minutes\", you can give your readers time to refresh to the new commit before IndexWriter removes the old commits. Note that doing so will increase the storage requirements of the index. See LUCENE-710 for details. Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any other IndexWriter or Directory instance. IndexFileNames This class contains useful constants representing filenames and extensions used by lucene, as well as convenience methods for querying whether a file name matches an extension ( MatchesExtension(String, String) ), as well as generating file names from a segment name, generation and extension ( FileNameFromGeneration(String, String, Int64) , SegmentFileName(String, String, String) ). NOTE : extensions used by codecs are not listed here. You must interact with the Codec directly. This is a Lucene.NET INTERNAL API, use at your own risk IndexFormatTooNewException This exception is thrown when Lucene detects an index that is newer than this Lucene version. IndexFormatTooOldException This exception is thrown when Lucene detects an index that is too old for this Lucene version IndexNotFoundException Signals that no index was found in the System.IO.Directory . Possibly because the directory is empty, however can also indicate an index corruption. IndexReader IndexReader is an abstract class, providing an interface for accessing an index. Search of an index is done entirely through this abstract interface, so that any subclass which implements it is searchable. There are two different types of IndexReader s: AtomicReader : These indexes do not consist of several sub-readers, they are atomic. They support retrieval of stored fields, doc values, terms, and postings. CompositeReader : Instances (like DirectoryReader ) of this reader can only be used to get stored fields from the underlying AtomicReader s, but it is not possible to directly retrieve postings. To do that, get the sub-readers via GetSequentialSubReaders() . Alternatively, you can mimic an AtomicReader (with a serious slowdown), by wrapping composite readers with SlowCompositeReaderWrapper . IndexReader instances for indexes on disk are usually constructed with a call to one of the static DirectoryReader.Open() methods, e.g. Open(Directory) . DirectoryReader inherits the CompositeReader abstract class, it is not possible to directly get postings. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. IndexReaderContext A struct like class that represents a hierarchical relationship between IndexReader instances. IndexSplitter Command-line tool that enables listing segments in an index, copying specific segments to another index, and deleting segments from an index. This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using simple Stream) so it will not work with non FSDirectory Directory impls. @lucene.experimental You can easily accidentally remove segments from your index so be careful! IndexUpgrader This is an easy-to-use tool that upgrades all segments of an index from previous Lucene versions to the current segment file format. It can be used from command line: java -cp lucene-core.jar Lucene.Net.Index.IndexUpgrader [-delete-prior-commits] [-verbose] indexDir Alternatively this class can be instantiated and Upgrade() invoked. It uses UpgradeIndexMergePolicy and triggers the upgrade via an ForceMerge(Int32) request to IndexWriter . This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify -delete-prior-commits to override this, allowing the tool to delete all but the last commit. From .NET code this can be enabled by passing true to IndexUpgrader(Directory, LuceneVersion, TextWriter, Boolean) . Warning: this tool may reorder documents if the index was partially upgraded before execution (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a full ForceMerge instead. The MergePolicy set by IndexWriterConfig may also reorder documents. IndexWriter An IndexWriter creates and maintains an index. IndexWriter.IndexReaderWarmer If Open(IndexWriter, Boolean) has been called (ie, this writer is in near real-time mode), then after a merge completes, this class can be invoked to warm the reader on the newly merged segment, before the merge commits. This is not required for near real-time search, but will reduce search latency on opening a new near real-time reader after a merge completes. @lucene.experimental NOTE : Warm(AtomicReader) is called before any deletes have been carried over to the merged segment. IndexWriterConfig Holds all the configuration that is used to create an IndexWriter . Once IndexWriter has been created with this object, changes to this object will not affect the IndexWriter instance. For that, use LiveIndexWriterConfig that is returned from Config . LUCENENET NOTE: Unlike Lucene, we use property setters instead of setter methods. In C#, this allows you to initialize the IndexWriterConfig using the language features of C#, for example: IndexWriterConfig conf = new IndexWriterConfig(analyzer) { Codec = Lucene46Codec(), OpenMode = OpenMode.CREATE }; However, if you prefer to match the syntax of Lucene using chained setter methods, there are extension methods in the Lucene.Net.Support namespace. Example usage: using Lucene.Net.Support; .. IndexWriterConfig conf = new IndexWriterConfig(analyzer) .SetCodec(new Lucene46Codec()) .SetOpenMode(OpenMode.CREATE); @since 3.1 KeepOnlyLastCommitDeletionPolicy This IndexDeletionPolicy implementation that keeps only the most recent commit and immediately removes all prior commits after a new commit is done. This is the default deletion policy. LiveIndexWriterConfig Holds all the configuration used by IndexWriter with few setters for settings that can be changed on an IndexWriter instance \"live\". @since 4.0 LogByteSizeMergePolicy This is a LogMergePolicy that measures size of a segment as the total byte size of the segment's files. LogDocMergePolicy This is a LogMergePolicy that measures size of a segment as the number of documents (not taking deletions into account). LogMergePolicy This class implements a MergePolicy that tries to merge segments into levels of exponentially increasing size, where each level has fewer segments than the value of the merge factor. Whenever extra segments (beyond the merge factor upper bound) are encountered, all segments within the level are merged. You can get or set the merge factor using MergeFactor . This class is abstract and requires a subclass to define the Size(SegmentCommitInfo) method which specifies how a segment's size is determined. LogDocMergePolicy is one subclass that measures size by document count in the segment. LogByteSizeMergePolicy is another subclass that measures size as the total byte size of the file(s) for the segment. MergePolicy Expert: a MergePolicy determines the sequence of primitive merge operations. Whenever the segments in an index have been altered by IndexWriter , either the addition of a newly flushed segment, addition of many segments from AddIndexes* calls, or a previous merge that may now need to cascade, IndexWriter invokes FindMerges(MergeTrigger, SegmentInfos) to give the MergePolicy a chance to pick merges that are now required. This method returns a MergePolicy.MergeSpecification instance describing the set of merges that should be done, or null if no merges are necessary. When ForceMerge(Int32) is called, it calls FindForcedMerges(SegmentInfos, Int32, IDictionary<SegmentCommitInfo, Nullable<Boolean>>) and the MergePolicy should then return the necessary merges. Note that the policy can return more than one merge at a time. In this case, if the writer is using SerialMergeScheduler , the merges will be run sequentially but if it is using they will be run concurrently. The default MergePolicy is TieredMergePolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergePolicy.DocMap A map of doc IDs. MergePolicy.MergeAbortedException Thrown when a merge was explicity aborted because Dispose(Boolean) was called with false . Normally this exception is privately caught and suppresed by IndexWriter . MergePolicy.MergeException Exception thrown if there are any problems while executing a merge. MergePolicy.MergeSpecification A MergePolicy.MergeSpecification instance provides the information necessary to perform multiple merges. It simply contains a list of MergePolicy.OneMerge instances. MergePolicy.OneMerge OneMerge provides the information necessary to perform an individual primitive merge operation, resulting in a single new segment. The merge spec includes the subset of segments to be merged as well as whether the new segment should use the compound file format. MergeScheduler Expert: IndexWriter uses an instance implementing this interface to execute the merges selected by a MergePolicy . The default MergeScheduler is . Implementers of sub-classes should make sure that Clone() returns an independent instance able to work with any IndexWriter instance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeState Holds common state used during segment merging. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeState.DocMap Remaps docids around deletes during merge MultiDocsAndPositionsEnum Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiDocsAndPositionsEnum.EnumWithSlice Holds a DocsAndPositionsEnum along with the corresponding ReaderSlice . MultiDocsEnum Exposes DocsEnum , merged from DocsEnum API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiDocsEnum.EnumWithSlice Holds a DocsEnum along with the corresponding ReaderSlice . MultiDocValues A wrapper for CompositeReader providing access to DocValues . NOTE : for multi readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. NOTE : this is very costly. @lucene.experimental This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.MultiSortedDocValues Implements SortedDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.MultiSortedSetDocValues Implements MultiDocValues.MultiSortedSetDocValues over n subs, using an MultiDocValues.OrdinalMap This is a Lucene.NET INTERNAL API, use at your own risk MultiDocValues.OrdinalMap maps per-segment ordinals to/from global ordinal space MultiFields Exposes flex API, merged from flex API of sub-segments. This is useful when you're interacting with an IndexReader implementation that consists of sequential sub-readers (eg DirectoryReader or MultiReader ). NOTE : for composite readers, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiPassIndexSplitter This tool splits input index into multiple equal parts. The method employed here uses AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document id-s that fall outside the selected partition. Note 1: Deletes are only applied to a buffered list of deleted docs and don't affect the source index - this tool works also with read-only indexes. Note 2: the disadvantage of this tool is that source index needs to be read as many times as there are parts to be created, hence the name of this tool. NOTE : this tool is unaware of documents added atomically via AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) , which means it can easily break up such document groups. MultiReader A CompositeReader which reads multiple indexes, appending their content. It can be used to create a view on several sub-readers (like DirectoryReader ) and execute searches on it. For efficiency, in this API documents are often referred to via document numbers , non-negative integers which each name a unique document in the index. These document numbers are ephemeral -- they may change as documents are added to and deleted from an index. Clients should thus not rely on a given document having the same number between sessions. NOTE : IndexReader instances are completely thread safe, meaning multiple threads can call any of its methods, concurrently. If your application requires external synchronization, you should not synchronize on the IndexReader instance; use your own (non-Lucene) objects instead. MultiTerms Exposes flex API, merged from flex API of sub-segments. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiTermsEnum Exposes TermsEnum API, merged from TermsEnum API of sub-segments. This does a merge sort, by term text, of the sub-readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MultiTermsEnum.TermsEnumIndex MultiTermsEnum.TermsEnumWithSlice NoDeletionPolicy An IndexDeletionPolicy which keeps all index commits around, never deleting them. This class is a singleton and can be accessed by referencing INSTANCE . NoMergePolicy A MergePolicy which never returns merges to execute (hence it's name). It is also a singleton and can be accessed through NO_COMPOUND_FILES if you want to indicate the index does not use compound files, or through COMPOUND_FILES otherwise. Use it if you want to prevent an IndexWriter from ever executing merges, without going through the hassle of tweaking a merge policy's settings to achieve that, such as changing its merge factor. NoMergeScheduler A MergeScheduler which never executes any merges. It is also a singleton and can be accessed through INSTANCE . Use it if you want to prevent an IndexWriter from ever executing merges, regardless of the MergePolicy used. Note that you can achieve the same thing by using NoMergePolicy , however with NoMergeScheduler you also ensure that no unnecessary code of any MergeScheduler implementation is ever executed. Hence it is recommended to use both if you want to disable merges from ever happening. NumericDocValues A per-document numeric value. OrdTermState An ordinal based TermState This is a Lucene.NET EXPERIMENTAL API, use at your own risk ParallelAtomicReader An AtomicReader which reads multiple, parallel indexes. Each index added must have the same number of documents, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . ParallelCompositeReader A CompositeReader which reads multiple, parallel indexes. Each index added must have the same number of documents, and exactly the same hierarchical subreader structure, but typically each contains different fields. Deletions are taken from the first reader. Each document contains the union of the fields of all documents with the same document number. When searching, matches for a query term are from the first index added that has the field. This is useful, e.g., with collections that have large fields which change rarely and small fields that change more frequently. The smaller fields may be re-indexed in a new index and both indexes may be searched together. Warning: It is up to you to make sure all indexes are created and modified the same way. For example, if you add documents to one index, you need to add the same documents in the same order to the other indexes. Failure to do so will result in undefined behavior . A good strategy to create suitable indexes with IndexWriter is to use LogDocMergePolicy , as this one does not reorder documents during merging (like TieredMergePolicy ) and triggers merges by number of documents per segment. If you use different MergePolicy s it might happen that the segment structure of your index is no longer predictable. PersistentSnapshotDeletionPolicy A SnapshotDeletionPolicy which adds a persistence layer so that snapshots can be maintained across the life of an application. The snapshots are persisted in a Directory and are committed as soon as Snapshot() or Release(IndexCommit) is called. NOTE: Sharing PersistentSnapshotDeletionPolicy s that write to the same directory across IndexWriter s will corrupt snapshots. You should make sure every IndexWriter has its own PersistentSnapshotDeletionPolicy and that they all write to a different Directory . It is OK to use the same Directory that holds the index. This class adds a Release(Int64) method to release commits from a previous snapshot's Generation . This is a Lucene.NET EXPERIMENTAL API, use at your own risk PKIndexSplitter Split an index based on a Filter . RandomAccessOrds Extension of SortedSetDocValues that supports random access to the ordinals of a document. Operations via this API are independent of the iterator api ( NextOrd() ) and do not impact its state. Codecs can optionally extend this API if they support constant-time access to ordinals for the document. ReaderManager Utility class to safely share DirectoryReader instances across multiple threads, while periodically reopening. This class ensures each reader is disposed only once all threads have finished using it. This is a Lucene.NET EXPERIMENTAL API, use at your own risk ReaderSlice Subreader slice from a parent composite reader. This is a Lucene.NET INTERNAL API, use at your own risk ReaderUtil Common util methods for dealing with IndexReader s and IndexReaderContext s. This is a Lucene.NET INTERNAL API, use at your own risk SegmentCommitInfo Embeds a [read-only] SegmentInfo and adds per-commit fields. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfo Information about a segment such as it's name, directory, and files related to the segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfos A collection of segmentInfo objects with methods for operating on those segments in relation to the file system. The active segments in the index are stored in the segment info file, segments_N . There may be one or more segments_N files in the index; however, the one with the largest generation is the active one (when older segments_N files are present it's because they temporarily cannot be deleted, or, a writer is in the process of committing, or a custom IndexDeletionPolicy is in use). This file lists each segment by name and has details about the codec and generation of deletes. There is also a file segments.gen . this file contains the current generation (the _N in segments_N ) of the index. This is used only as a fallback in case the current generation cannot be accurately determined by directory listing alone (as is the case for some NFS clients with time-based directory cache expiration). This file simply contains an WriteInt32(Int32) version header ( FORMAT_SEGMENTS_GEN_CURRENT ), followed by the generation recorded as WriteInt64(Int64) , written twice. Files: segments.gen : GenHeader, Generation, Generation, Footer segments_N : Header, Version, NameCounter, SegCount, <SegName, SegCodec, DelGen, DeletionCount, FieldInfosGen, UpdatesFiles> SegCount , CommitUserData, Footer Data types: Header --> WriteHeader(DataOutput, String, Int32) GenHeader, NameCounter, SegCount, DeletionCount --> WriteInt32(Int32) Generation, Version, DelGen, Checksum, FieldInfosGen --> WriteInt64(Int64) SegName, SegCodec --> WriteString(String) CommitUserData --> WriteStringStringMap(IDictionary<String, String>) UpdatesFiles --> WriteStringSet(ISet<String>) Footer --> WriteFooter(IndexOutput) Field Descriptions: Version counts how often the index has been changed by adding or deleting documents. NameCounter is used to generate names for new segment files. SegName is the name of the segment, and is used as the file name prefix for all of the files that compose the segment's index. DelGen is the generation count of the deletes file. If this is -1, there are no deletes. Anything above zero means there are deletes stored by LiveDocsFormat . DeletionCount records the number of deleted documents in this segment. SegCodec is the Name of the Codec that encoded this segment. CommitUserData stores an optional user-supplied opaque that was passed to SetCommitData(IDictionary<String, String>) . FieldInfosGen is the generation count of the fieldInfos file. If this is -1, there are no updates to the fieldInfos in that segment. Anything above zero means there are updates to fieldInfos stored by FieldInfosFormat . UpdatesFiles stores the list of files that were updated in that segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentInfos.FindSegmentsFile Utility class for executing code that needs to do something with the current segments file. This is necessary with lock-less commits because from the time you locate the current segments file name, until you actually open it, read its contents, or check modified time, etc., it could have been deleted due to a writer commit finishing. SegmentReader IndexReader implementation over a single segment. Instances pointing to the same segment (but with different deletes, etc) may share the same core data. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentReadState Holder class for common parameters used during read. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentWriteState Holder class for common parameters used during write. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SerialMergeScheduler A MergeScheduler that simply does each merge sequentially, using the current thread. SimpleMergedSegmentWarmer A very simple merged segment warmer that just ensures data structures are initialized. SingleTermsEnum Subclass of FilteredTermsEnum for enumerating a single term. For example, this can be used by MultiTermQuery s that need only visit one term, but want to preserve MultiTermQuery semantics such as MultiTermRewriteMethod . SlowCompositeReaderWrapper This class forces a composite reader (eg a MultiReader or DirectoryReader ) to emulate an atomic reader. This requires implementing the postings APIs on-the-fly, using the static methods in MultiFields , MultiDocValues , by stepping through the sub-readers to merge fields/terms, appending docs, etc. NOTE : This class almost always results in a performance hit. If this is important to your use case, you'll get better performance by gathering the sub readers using Context to get the atomic leaves and then operate per-AtomicReader, instead of using this class. SnapshotDeletionPolicy An IndexDeletionPolicy that wraps any other IndexDeletionPolicy and adds the ability to hold and later release snapshots of an index. While a snapshot is held, the IndexWriter will not remove any files associated with it even if the index is otherwise being actively, arbitrarily changed. Because we wrap another arbitrary IndexDeletionPolicy , this gives you the freedom to continue using whatever IndexDeletionPolicy you would normally want to use with your index. This class maintains all snapshots in-memory, and so the information is not persisted and not protected against system failures. If persistence is important, you can use PersistentSnapshotDeletionPolicy . This is a Lucene.NET EXPERIMENTAL API, use at your own risk SortedDocValues A per-document byte[] with presorted values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. SortedSetDocValues A per-document set of presorted byte[] values. Per-Document values in a SortedDocValues are deduplicated, dereferenced, and sorted into a dictionary of unique values. A pointer to the dictionary value (ordinal) can be retrieved for each document. Ordinals are dense and in increasing sorted order. StoredFieldVisitor Expert: Provides a low-level means of accessing the stored field values in an index. See Document(Int32, StoredFieldVisitor) . NOTE : a StoredFieldVisitor implementation should not try to load or visit other stored documents in the same reader because the implementation of stored fields for most codecs is not reeentrant and you will see strange exceptions as a result. See DocumentStoredFieldVisitor , which is a StoredFieldVisitor that builds the Document containing all stored fields. This is used by Document(Int32) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaskMergeScheduler A MergeScheduler that runs each merge using System.Threading.Tasks.Task s on the default System.Threading.Tasks.TaskScheduler . If more than MaxMergeCount merges are requested then this class will forcefully throttle the incoming threads by pausing until one more more merges complete. LUCENENET specific Term A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occurred in. Note that terms may represent more than words from text fields, but also things like dates, email addresses, urls, etc. TermContext Maintains a IndexReader TermState view over IndexReader instances containing a single term. The TermContext doesn't track if the given TermState objects are valid, neither if the TermState instances refer to the same terms in the associated readers. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Terms Access to the terms in a specific field. See Fields . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermsEnum Iterator to seek ( SeekCeil(BytesRef) , SeekExact(BytesRef) ) or step through ( Next() terms to obtain frequency information ( DocFreq ), DocsEnum or DocsAndPositionsEnum for the current term ( Docs(IBits, DocsEnum) ). Term enumerations are always ordered by Comparer . Each term in the enumeration is greater than the one before it. The TermsEnum is unpositioned when you first obtain it and you must first successfully call Next() or one of the Seek methods. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermState Encapsulates all required internal state to position the associated TermsEnum without re-seeking. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TieredMergePolicy Merges segments of approximately equal size, subject to an allowed number of segments per tier. This is similar to LogByteSizeMergePolicy , except this merge policy is able to merge non-adjacent segment, and separates how many segments are merged at once ( MaxMergeAtOnce ) from how many segments are allowed per tier ( SegmentsPerTier ). This merge policy also does not over-merge (i.e. cascade merges). For normal merging, this policy first computes a \"budget\" of how many segments are allowed to be in the index. If the index is over-budget, then the policy sorts segments by decreasing size (pro-rating by percent deletes), and then finds the least-cost merge. Merge cost is measured by a combination of the \"skew\" of the merge (size of largest segment divided by smallest segment), total merge size and percent deletes reclaimed, so that merges with lower skew, smaller size and those reclaiming more deletes, are favored. If a merge will produce a segment that's larger than MaxMergedSegmentMB , then the policy will merge fewer segments (down to 1 at once, if that one has deletions) to keep the segment size under budget. NOTE : This policy freely merges non-adjacent segments; if this is a problem, use LogMergePolicy . NOTE : This policy always merges by byte size of the segments, always pro-rates by percent deletes, and does not apply any maximum segment size during forceMerge (unlike LogByteSizeMergePolicy ). This is a Lucene.NET EXPERIMENTAL API, use at your own risk TieredMergePolicy.MergeScore Holds score and explanation for a single candidate merge. TrackingIndexWriter Class that tracks changes to a delegated IndexWriter , used by ControlledRealTimeReopenThread<T> to ensure specific changes are visible. Create this class (passing your IndexWriter ), and then pass this class to ControlledRealTimeReopenThread<T> . Be sure to make all changes via the TrackingIndexWriter , otherwise ControlledRealTimeReopenThread<T> won't know about the changes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TwoPhaseCommitTool A utility for executing 2-phase commit on several objects. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TwoPhaseCommitTool.CommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to Commit() . TwoPhaseCommitTool.PrepareCommitFailException Thrown by Execute(ITwoPhaseCommit[]) when an object fails to PrepareCommit() . UpgradeIndexMergePolicy This MergePolicy is used for upgrading all existing segments of an index when calling ForceMerge(Int32) . All other methods delegate to the base MergePolicy given to the constructor. This allows for an as-cheap-as possible upgrade of an older index by only upgrading segments that are created by previous Lucene versions. ForceMerge does no longer really merge; it is just used to \"ForceMerge\" older segment versions away. In general one would use IndexUpgrader , but for a fully customizeable upgrade, you can use this like any other MergePolicy and call ForceMerge(Int32) : IndexWriterConfig iwc = new IndexWriterConfig(LuceneVersion.LUCENE_XX, new KeywordAnalyzer()); iwc.MergePolicy = new UpgradeIndexMergePolicy(iwc.MergePolicy); using (IndexWriter w = new IndexWriter(dir, iwc)) { w.ForceMerge(1); } Warning: this merge policy may reorder documents if the index was partially upgraded before calling ForceMerge(Int32) (e.g., documents were added). If your application relies on \"monotonicity\" of doc IDs (which means that the order in which the documents were added to the index is preserved), do a ForceMerge(1) instead. Please note, the delegate MergePolicy may also reorder documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IConcurrentMergeScheduler IIndexableField Represents a single field for indexing. IndexWriter consumes IEnumerable<IndexableField> as a document. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IIndexableFieldType Describes the properties of a field. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IMergeScheduler IndexReader.IReaderClosedListener A custom listener that's invoked when the IndexReader is closed. This is a Lucene.NET EXPERIMENTAL API, use at your own risk IndexWriter.IEvent Interface for internal atomic events. See Lucene.Net.Index.DocumentsWriter for details. Events are executed concurrently and no order is guaranteed. Each event should only rely on the serializeability within it's process method. All actions that must happen before or after a certain action must be encoded inside the Process(IndexWriter, Boolean, Boolean) method. ITwoPhaseCommit An interface for implementations that support 2-phase commit. You can use TwoPhaseCommitTool to execute a 2-phase commit algorithm over several ITwoPhaseCommit s. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SegmentReader.ICoreDisposedListener Called when the shared core for this SegmentReader is disposed. This listener is called only once all SegmentReader s sharing the same core are disposed. At this point it is safe for apps to evict this reader from any caches keyed on CoreCacheKey . This is the same interface that IFieldCache uses, internally, to evict entries. NOTE: This was CoreClosedListener in Lucene. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums DocsAndPositionsFlags DocsFlags DocValuesFieldUpdatesType DocValuesType DocValues types. Note that DocValues is strongly typed, so a field cannot have different types across different documents. FilteredTermsEnum.AcceptStatus Return value, if term should be accepted or the iteration should END . The *_SEEK values denote, that after handling the current term the enum should call NextSeekTerm(BytesRef) and step forward. IndexOptions Controls how much information is stored in the postings lists. This is a Lucene.NET EXPERIMENTAL API, use at your own risk MergeTrigger MergeTrigger is passed to FindMerges(MergeTrigger, SegmentInfos) to indicate the event that triggered the merge. OpenMode Specifies the open mode for IndexWriter . StoredFieldVisitor.Status Enumeration of possible return values for NeedsField(FieldInfo) . TermsEnum.SeekStatus Represents returned result from SeekCeil(BytesRef) ."
  },
  "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.html": {
    "href": "api/Lucene.Net.ICU/Lucene.Net.Analysis.Icu.html",
    "title": "Namespace Lucene.Net.Analysis.Icu | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis.Icu <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- :Post-Release-Update-Version.LUCENE_XY: - several mentions in this file --> This module exposes functionality from ICU to Apache Lucene. ICU4J is a Java library that enhances Java's internationalization support by improving performance, keeping current with the Unicode Standard, and providing richer APIs. For an introduction to Lucene's analysis API, see the Lucene.Net.Analysis package documentation. This module exposes the following functionality: Text Segmentation : Tokenizes text based on properties and rules defined in Unicode. Collation : Compare strings according to the conventions and standards of a particular language, region or country. Normalization : Converts text to a unique, equivalent form. Case Folding : Removes case distinctions with Unicode's Default Caseless Matching algorithm. Search Term Folding : Removes distinctions (such as accent marks) between similar characters for a loose or fuzzy search. Text Transformation : Transforms Unicode text in a context-sensitive fashion: e.g. mapping Traditional to Simplified Chinese Text Segmentation Text Segmentation (Tokenization) divides document and query text into index terms (typically words). Unicode provides special properties and rules so that this can be done in a manner that works well with most languages. Text Segmentation implements the word segmentation specified in Unicode Text Segmentation . Additionally the algorithm can be tailored based on writing system, for example text in the Thai script is automatically delegated to a dictionary-based segmentation algorithm. Use Cases As a more thorough replacement for StandardTokenizer that works well for most languages. Example Usages Tokenizing multilanguage text /** * This tokenizer will work well in general for most languages. */ Tokenizer tokenizer = new ICUTokenizer(reader); Collation ICUCollationKeyAnalyzer converts each token into its binary CollationKey using the provided Collator , allowing it to be stored as an index term. ICUCollationKeyAnalyzer depends on ICU4J to produce the CollationKey s. Use Cases Efficient sorting of terms in languages that use non-Unicode character orderings. (Lucene Sort using a Locale can be very slow.) Efficient range queries over fields that contain terms in languages that use non-Unicode character orderings. (Range queries using a Locale can be very slow.) Effective Locale-specific normalization (case differences, diacritics, etc.). ( LowerCaseFilter and ASCIIFoldingFilter provide these services in a generic way that doesn't take into account locale-specific needs.) Example Usages Farsi Range Queries Collator collator = Collator.getInstance(new ULocale(\"ar\")); ICUCollationKeyAnalyzer analyzer = new ICUCollationKeyAnalyzer(Version.LUCENE_48, collator); RAMDirectory ramDir = new RAMDirectory(); IndexWriter writer = new IndexWriter(ramDir, new IndexWriterConfig(Version.LUCENE_48, analyzer)); Document doc = new Document(); doc.add(new Field(\"content\", \"\\u0633\\u0627\\u0628\", Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); IndexSearcher is = new IndexSearcher(ramDir, true); QueryParser aqp = new QueryParser(Version.LUCENE_48, \"content\", analyzer); aqp.setAnalyzeRangeTerms(true); // Unicode order would include U+0633 in [ U+062F - U+0698 ], but Farsi // orders the U+0698 character before the U+0633 character, so the single // indexed Term above should NOT be returned by a ConstantScoreRangeQuery // with a Farsi Collator (or an Arabic one for the case when Farsi is not // supported). ScoreDoc[] result = is.search(aqp.parse(\"[ \\u062F TO \\u0698 ]\"), null, 1000).scoreDocs; assertEquals(\"The index Term should not be included.\", 0, result.length); Danish Sorting Analyzer analyzer = new ICUCollationKeyAnalyzer(Version.LUCENE_48, Collator.getInstance(new ULocale(\"da\", \"dk\"))); RAMDirectory indexStore = new RAMDirectory(); IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(Version.LUCENE_48, analyzer)); String[] tracer = new String[] { \"A\", \"B\", \"C\", \"D\", \"E\" }; String[] data = new String[] { \"HAT\", \"HUT\", \"H\\u00C5T\", \"H\\u00D8T\", \"HOT\" }; String[] sortedTracerOrder = new String[] { \"A\", \"E\", \"B\", \"D\", \"C\" }; for (int i = 0 ; i < data.length=\"\" ;=\"\" ++i)=\"\" {=\"\" document=\"\" doc=\"new\" document();=\"\" doc.add(new=\"\" field(\"tracer\",=\"\" tracer[i],=\"\" field.store.yes,=\"\" field.index.no));=\"\" doc.add(new=\"\" field(\"contents\",=\"\" data[i],=\"\" field.store.no,=\"\" field.index.analyzed));=\"\" writer.adddocument(doc);=\"\" }=\"\" writer.close();=\"\" indexsearcher=\"\" searcher=\"new\" indexsearcher(indexstore,=\"\" true);=\"\" sort=\"\" sort=\"new\" sort();=\"\" sort.setsort(new=\"\" sortfield(\"contents\",=\"\" sortfield.string));=\"\" query=\"\" query=\"new\" matchalldocsquery();=\"\" scoredoc[]=\"\" result=\"searcher.search(query,\" null,=\"\" 1000,=\"\" sort).scoredocs;=\"\" for=\"\" (int=\"\" i=\"0\" ;=\"\" i=\"\">< result.length=\"\" ;=\"\" ++i)=\"\" {=\"\" document=\"\" doc=\"searcher.doc(result[i].doc);\" assertequals(sortedtracerorder[i],=\"\" doc.getvalues(\"tracer\")[0]);=\"\" }=\"\"> Turkish Case Normalization Collator collator = Collator.getInstance(new ULocale(\"tr\", \"TR\")); collator.setStrength(Collator.PRIMARY); Analyzer analyzer = new ICUCollationKeyAnalyzer(Version.LUCENE_48, collator); RAMDirectory ramDir = new RAMDirectory(); IndexWriter writer = new IndexWriter(ramDir, new IndexWriterConfig(Version.LUCENE_48, analyzer)); Document doc = new Document(); doc.add(new Field(\"contents\", \"DIGY\", Field.Store.NO, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); IndexSearcher is = new IndexSearcher(ramDir, true); QueryParser parser = new QueryParser(Version.LUCENE_48, \"contents\", analyzer); Query query = parser.parse(\"d\\u0131gy\"); // U+0131: dotless i ScoreDoc[] result = is.search(query, null, 1000).scoreDocs; assertEquals(\"The index Term should be included.\", 1, result.length); Caveats and Comparisons WARNING: Make sure you use exactly the same Collator at index and query time -- CollationKey s are only comparable when produced by the same Collator . Since {@link java.text.RuleBasedCollator}s are not independently versioned, it is unsafe to search against stored CollationKey s unless the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): JVM vendor JVM version, including patch version The language (and country and variant, if specified) of the Locale used when constructing the collator via {@link java.text.Collator#getInstance(java.util.Locale)}. The collation strength used - see {@link java.text.Collator#setStrength(int)} ICUCollationKeyAnalyzer uses ICU4J's Collator , which makes its version available, thus allowing collation to be versioned independently from the JVM. ICUCollationKeyAnalyzer is also significantly faster and generates significantly shorter keys than CollationKeyAnalyzer . See http://site.icu-project.org/charts/collation-icu4j-sun for key generation timing and key length comparisons between ICU4J and java.text.Collator over several languages. CollationKey s generated by java.text.Collator s are not compatible with those those generated by ICU Collators. Specifically, if you use CollationKeyAnalyzer to generate index terms, do not use ICUCollationKeyAnalyzer on the query side, or vice versa. Normalization ICUNormalizer2Filter normalizes term text to a Unicode Normalization Form , so that equivalent forms are standardized to a unique form. Use Cases Removing differences in width for Asian-language text. Standardizing complex text with non-spacing marks so that characters are ordered consistently. Example Usages Normalizing text to NFC /** * Normalizer2 objects are unmodifiable and immutable. */ Normalizer2 normalizer = Normalizer2.getInstance(null, \"nfc\", Normalizer2.Mode.COMPOSE); /** * This filter will normalize to NFC. */ TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer, normalizer); Case Folding Default caseless matching, or case-folding is more than just conversion to lowercase. For example, it handles cases such as the Greek sigma, so that \"Μάϊος\" and \"ΜΆΪΟΣ\" will match correctly. Case-folding is still only an approximation of the language-specific rules governing case. If the specific language is known, consider using ICUCollationKeyFilter and indexing collation keys instead. This implementation performs the \"full\" case-folding specified in the Unicode standard, and this may change the length of the term. For example, the German ß is case-folded to the string 'ss'. Case folding is related to normalization, and as such is coupled with it in this integration. To perform case-folding, you use normalization with the form \"nfkc_cf\" (which is the default). Use Cases As a more thorough replacement for LowerCaseFilter that has good behavior for most languages. Example Usages Lowercasing text /** * This filter will case-fold and normalize to NFKC. */ TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer); Search Term Folding Search term folding removes distinctions (such as accent marks) between similar characters. It is useful for a fuzzy or loose search. Search term folding implements many of the foldings specified in Character Foldings as a special normalization form. This folding applies NFKC, Case Folding, and many character foldings recursively. Use Cases As a more thorough replacement for ASCIIFoldingFilter and LowerCaseFilter that applies the same ideas to many more languages. Example Usages Removing accents /** * This filter will case-fold, remove accents and other distinctions, and * normalize to NFKC. */ TokenStream tokenstream = new ICUFoldingFilter(tokenizer); Text Transformation ICU provides text-transformation functionality via its Transliteration API. This allows you to transform text in a variety of ways, taking context into account. For more information, see the User's Guide and Rule Tutorial . Use Cases Convert Traditional to Simplified Transliterate between different writing systems: e.g. Romanization Example Usages Convert Traditional to Simplified /** * This filter will map Traditional Chinese to Simplified Chinese */ TokenStream tokenstream = new ICUTransformFilter(tokenizer, Transliterator.getInstance(\"Traditional-Simplified\")); Transliterate Serbian Cyrillic to Serbian Latin /** * This filter will map Serbian Cyrillic to Serbian Latin according to BGN rules */ TokenStream tokenstream = new ICUTransformFilter(tokenizer, Transliterator.getInstance(\"Serbian-Latin/BGN\")); Backwards Compatibility This module exists to provide up-to-date Unicode functionality that supports the most recent version of Unicode (currently 6.3). However, some users who wish for stronger backwards compatibility can restrict ICUNormalizer2Filter to operate on only a specific Unicode Version by using a {@link com.ibm.icu.text.FilteredNormalizer2}. Example Usages Restricting normalization to Unicode 5.0 /** * This filter will do NFC normalization, but will ignore any characters that * did not exist as of Unicode 5.0. Because of the normalization stability policy * of Unicode, this is an easy way to force normalization to a specific version. */ Normalizer2 normalizer = Normalizer2.getInstance(null, \"nfc\", Normalizer2.Mode.COMPOSE); UnicodeSet set = new UnicodeSet(\"[:age=5.0:]\"); // see FilteredNormalizer2 docs, the set should be frozen or performance will suffer set.freeze(); FilteredNormalizer2 unicode50 = new FilteredNormalizer2(normalizer, set); TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer, unicode50); Classes ICUFoldingFilter A TokenFilter that applies search term folding to Unicode text, applying foldings from UTR#30 Character Foldings. ICUFoldingFilterFactory Factory for ICUFoldingFilter . ICUNormalizer2CharFilter Normalize token text with ICU's ICU4N.Text.Normalizer2 . ICUNormalizer2CharFilterFactory Factory for ICUNormalizer2CharFilter . ICUNormalizer2Filter Normalize token text with ICU's ICU4N.Text.Normalizer2 . ICUNormalizer2FilterFactory Factory for ICUNormalizer2Filter . ICUTransformFilter A TokenFilter that transforms text with ICU. ICUTransformFilterFactory Factory for ICUTransformFilter ."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene41.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene41 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene41 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.1 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nrm.cfs, .nrm.cfe Encodes length and boost factors for docs and fields Per-Document Values .dv.cfs, .dv.cfe Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene41Codec Implements the Lucene 4.1 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene41 package documentation for file format details. @lucene.experimental Lucene41PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsFormat Lucene 4.1 postings format, which encodes postings in packed integer blocks for fast decode. NOTE : this format is still experimental and subject to change without backwards compatibility. Basic idea: Packed Blocks and VInt Blocks : In packed blocks, integers are encoded with the same bit width packed format ( PackedInt32s ): the block size (i.e. number of integers inside block) is fixed (currently 128). Additionally blocks that are all the same value are encoded in an optimized way. In VInt blocks, integers are encoded as VInt ( WriteVInt32(Int32) ): the block size is variable. Block structure : When the postings are long enough, Lucene41PostingsFormat will try to encode most integer data as a packed block. Take a term with 259 documents as an example, the first 256 document ids are encoded as two packed blocks, while the remaining 3 are encoded as one VInt block. Different kinds of data are always encoded separately into different packed blocks, but may possibly be interleaved into the same VInt block. This strategy is applied to pairs: <document number, frequency>, <position, payload length>, <position, offset start, offset length>, and <position, payload length, offsetstart, offset length>. Skipdata settings : The structure of skip table is quite similar to previous version of Lucene. Skip interval is the same as block size, and each skip entry points to the beginning of each block. However, for the first block, skip data is omitted. Positions, Payloads, and Offsets : A position is an integer indicating where the term occurs within one document. A payload is a blob of metadata associated with current position. An offset is a pair of integers indicating the tokenized start/end offsets for given term in current position: it is essentially a specialized payload. When payloads and offsets are not omitted, numPositions==numPayloads==numOffsets (assuming a null payload contributes one count). As mentioned in block structure, it is possible to encode these three either combined or separately. In all cases, payloads and offsets are stored together. When encoded as a packed block, position data is separated out as .pos, while payloads and offsets are encoded in .pay (payload metadata will also be stored directly in .pay). When encoded as VInt blocks, all these three are stored interleaved into the .pos (so is payload metadata). With this strategy, the majority of payload and offset data will be outside .pos file. So for queries that require only position data, running on a full index with payloads and offsets, this reduces disk pre-fetches. Files and detailed format: .tim : Term Dictionary .tip : Term Index .doc : Frequencies and Skip Data .pos : Positions .pay : Payloads and Offsets Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions, payload and skip data in the .doc, .pos, and .pay files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the PostingsHeader and TermMetadata sections described here: PostingsHeader --> Header, PackedBlockSize TermMetadata --> (DocFPDelta|SingletonDocID), PosFPDelta?, PosVIntBlockFPDelta?, PayFPDelta?, SkipFPDelta? Header, --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedBlockSize, SingletonDocID --> VInt ( WriteVInt32(Int32) ) DocFPDelta, PosFPDelta, PayFPDelta, PosVIntBlockFPDelta, SkipFPDelta --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. PackedBlockSize is the fixed block size for packed blocks. In packed block, bit width is determined by the largest integer. Smaller block size result in smaller variance among width of integers hence smaller indexes. Larger block size result in more efficient bulk i/o hence better acceleration. This value should always be a multiple of 64, currently fixed as 128 as a tradeoff. It is also the skip interval used to accelerate Advance(Int32) . DocFPDelta determines the position of this term's TermFreqs within the .doc file. In particular, it is the difference of file offset between this term's data and previous term's data (or zero, for the first term in the block).On disk it is stored as the difference from previous value in sequence. PosFPDelta determines the position of this term's TermPositions within the .pos file. While PayFPDelta determines the position of this term's <TermPayloads, TermOffsets?> within the .pay file. Similar to DocFPDelta, it is the difference between two file positions (or neglected, for fields that omit payloads and offsets). PosVIntBlockFPDelta determines the position of this term's last TermPosition in last pos packed block within the .pos file. It is synonym for PayVIntBlockFPDelta or OffsetVIntBlockFPDelta. This is actually used to indicate whether it is necessary to load following payloads and offsets from .pos instead of .pay. Every time a new block of positions are to be loaded, the PostingsReader will use this value to check whether current block is packed format or VInt. When packed format, payloads and offsets are fetched from .pay, otherwise from .pos. (this value is neglected when total number of positions i.e. totalTermFreq is less or equal to PackedBlockSize). SkipFPDelta determines the position of this term's SkipData within the .doc file. In particular, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum (i.e. 128 in Lucene41PostingsFormat). SingletonDocID is an optimization when a term only appears in one document. In this case, instead of writing a file pointer to the .doc file (DocFPDelta), and then a VIntBlock at that location, the single document ID is written to the term dictionary. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies and Skip Data The .doc file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). It also saves skip data to the beginning of each packed or VInt block, when the length of document list is larger than packed block size. docFile(.doc) --> Header, <TermFreqs, SkipData?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <PackedBlock> PackedDocBlockNum , VIntBlock? PackedBlock --> PackedDocDeltaBlock, PackedFreqBlock? VIntBlock --> <DocDelta[, Freq?]> DocFreq-PackedBlockSize PackedDocBlockNum SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel>, SkipDatum? SkipLevel --> <SkipDatum> TrimmedDocFreq/(PackedBlockSize^(Level + 1)) SkipDatum --> DocSkip, DocFPSkip, <PosFPSkip, PosBlockOffset, PayLength?, PayFPSkip?>?, SkipChildLevelPointer? PackedDocDeltaBlock, PackedFreqBlock --> PackedInts ( PackedInt32s ) DocDelta, Freq, DocSkip, DocFPSkip, PosFPSkip, PosBlockOffset, PayByteUpto, PayFPSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: PackedDocDeltaBlock is theoretically generated from two steps: Calculate the difference between each document number and previous one, and get a d-gaps list (for the first document, use absolute value); For those d-gaps from first one to PackedDocBlockNumPackedBlockSize th , separately encode as packed blocks. If frequencies are not omitted, PackedFreqBlock will be generated without d-gap step. VIntBlock stores remaining d-gaps (along with frequencies when possible) with a format that encodes DocDelta and Freq: DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 PackedDocBlockNum is the number of packed blocks for current term's docids or frequencies. In particular, PackedDocBlockNum = floor(DocFreq/PackedBlockSize) TrimmedDocFreq = DocFreq % PackedBlockSize == 0 ? DocFreq - 1 : DocFreq. We use this trick since the definition of skip entry is a little different from base interface. In MultiLevelSkipListWriter , skip data is assumed to be saved for skipInterval th , 2 skipInterval th ... posting in the list. However, in Lucene41PostingsFormat, the skip data is saved for skipInterval+1 th , 2 skipInterval+1 th ... posting (skipInterval==PackedBlockSize in this case). When DocFreq is multiple of PackedBlockSize, MultiLevelSkipListWriter will expect one more skip data than Lucene41SkipWriter. SkipDatum is the metadata of one skip entry. For the first block (no matter packed or VInt), it is omitted. DocSkip records the document number of every PackedBlockSize th document number in the postings (i.e. last document number in each packed block). On disk it is stored as the difference from previous value in the sequence. DocFPSkip records the file offsets of each block (excluding )posting at PackedBlockSize+1 th , 2*PackedBlockSize+1 th ... , in DocFile. The file offsets are relative to the start of current term's TermFreqs. On disk it is also stored as the difference from previous SkipDatum in the sequence. Since positions and payloads are also block encoded, the skip should skip to related block first, then fetch the values according to in-block offset. PosFPSkip and PayFPSkip record the file offsets of related block in .pos and .pay, respectively. While PosBlockOffset indicates which value to fetch inside the related block (PayBlockOffset is unnecessary since it is always equal to PosBlockOffset). Same as DocFPSkip, the file offsets are relative to the start of current term's TermFreqs, and stored as a difference sequence. PayByteUpto indicates the start offset of the current payload. It is equivalent to the sum of the payload lengths in the current block up to PosBlockOffset Positions The .pos file contains the lists of positions that each term occurs at within documents. It also sometimes stores part of payloads and offsets for speedup. PosFile(.pos) --> Header, <TermPositions> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <PackedPosDeltaBlock> PackedPosBlockNum , VIntBlock? VIntBlock --> <PositionDelta[, PayloadLength?], PayloadData?, OffsetDelta?, OffsetLength?> PosVIntCount PackedPosDeltaBlock --> PackedInts ( PackedInt32s ) PositionDelta, OffsetDelta, OffsetLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: TermPositions are order by term (terms are implicit, from the term dictionary), and position values for each term document pair are incremental, and ordered by document number. PackedPosBlockNum is the number of packed blocks for current term's positions, payloads or offsets. In particular, PackedPosBlockNum = floor(totalTermFreq/PackedBlockSize) PosVIntCount is the number of positions encoded as VInt format. In particular, PosVIntCount = totalTermFreq - PackedPosBlockNum*PackedBlockSize The procedure how PackedPosDeltaBlock is generated is the same as PackedDocDeltaBlock in chapter Frequencies and Skip Data . PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Payloads and Offsets The .pay file will store payloads and offsets associated with certain term-document positions. Some payloads and offsets will be separated out into .pos file, for performance reasons. PayFile(.pay): --> Header, <TermPayloads, TermOffsets?> TermCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPayloads --> <PackedPayLengthBlock, SumPayLength, PayData> PackedPayBlockNum TermOffsets --> <PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock> PackedPayBlockNum PackedPayLengthBlock, PackedOffsetStartDeltaBlock, PackedOffsetLengthBlock --> PackedInts ( PackedInt32s ) SumPayLength --> VInt ( WriteVInt32(Int32) ) PayData --> byte ( WriteByte(Byte) ) SumPayLength Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Notes: The order of TermPayloads/TermOffsets will be the same as TermPositions, note that part of payload/offsets are stored in .pos. The procedure how PackedPayLengthBlock and PackedOffsetLengthBlock are generated is the same as PackedFreqBlock in chapter Frequencies and Skip Data . While PackedStartDeltaBlock follows a same procedure as PackedDocDeltaBlock. PackedPayBlockNum is always equal to PackedPosBlockNum, for the same term. It is also synonym for PackedOffsetBlockNum. SumPayLength is the total length of payloads written within one block, should be the sum of PayLengths in one packed block. PayLength in PackedPayLengthBlock is the length of each payload associated with the current position. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsReader Concrete class that reads docId(maybe frq,pos,offset,payloads) list with postings format. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsWriter Concrete class that writes docId(maybe frq,pos,offset,payloads) list with postings format. Postings list for each term will be stored separately. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene41PostingsWriter.Int32BlockTermState NOTE: This was IntBlockTermState in Lucene Lucene41StoredFieldsFormat Lucene 4.1 stored fields format. Principle This StoredFieldsFormat compresses blocks of 16KB of documents in order to improve the compression ratio compared to document-level compression. It uses the LZ4 compression algorithm, which is fast to compress and very fast to decompress data. Although the compression method that is used focuses more on speed than on compression ratio, it should provide interesting compression ratios for redundant inputs (such as log files, HTML or plain text). File formats Stored fields are represented by two files: A fields data file (extension .fdt ). this file stores a compact representation of documents in compressed blocks of 16KB or more. When writing a segment, documents are appended to an in-memory byte[] buffer. When its size reaches 16KB or more, some metadata about the documents is flushed to disk, immediately followed by a compressed representation of the buffer using the LZ4 compression format . Here is a more detailed description of the field data file format: FieldData (.fdt) --> <Header>, PackedIntsVersion, <Chunk> ChunkCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, DocFieldCounts, DocLengths, <CompressedDocs> DocBase --> the ID of the first document of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs --> the number of documents in the chunk as a VInt ( WriteVInt32(Int32) ) DocFieldCounts --> the number of stored fields of every document in the chunk, encoded as followed: if chunkDocs=1, the unique value is encoded as a VInt ( WriteVInt32(Int32) ) else read a VInt ( WriteVInt32(Int32) ) (let's call it bitsRequired ) if bitsRequired is 0 then all values are equal, and the common value is the following VInt ( WriteVInt32(Int32) ) else bitsRequired is the number of bits required to store any value, and values are stored in a packed ( PackedInt32s ) array where every value is stored on exactly bitsRequired bits DocLengths --> the lengths of all documents in the chunk, encoded with the same method as DocFieldCounts CompressedDocs --> a compressed representation of <Docs> using the LZ4 compression format Docs --> <Doc> ChunkDocs Doc --> <FieldNumAndType, Value> DocFieldCount FieldNumAndType --> a VLong ( WriteVInt64(Int64) ), whose 3 last bits are Type and other bits are FieldNum Type --> 0: Value is String 1: Value is BinaryValue 2: Value is Int 3: Value is Float 4: Value is Long 5: Value is Double 6, 7: unused FieldNum --> an ID of the field Value --> String ( WriteString(String) ) | BinaryValue | Int | Float | Long | Double depending on Type BinaryValue --> ValueLength <Byte> ValueLength Notes If documents are larger than 16KB then chunks will likely contain only one document. However, documents can never spread across several chunks (all fields of a single document are in the same chunk). When at least one document in a chunk is large enough so that the chunk is larger than 32KB, the chunk will actually be compressed in several LZ4 blocks of 16KB. this allows StoredFieldVisitor s which are only interested in the first fields of a document to not have to decompress 10MB of data if the document is 10MB, but only 16KB. Given that the original lengths are written in the metadata of the chunk, the decompressor can leverage this information to stop decoding as soon as enough data has been decompressed. In case documents are incompressible, CompressedDocs will be less than 0.5% larger than Docs. A fields index file (extension .fdx ). FieldsIndex (.fdx) --> <Header>, <ChunkIndex> Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Known limitations This StoredFieldsFormat does not support individual documents larger than ( 2 31 - 2 14 ) bytes. In case this is a problem, you should use another format, such as Lucene40StoredFieldsFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene45.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene45 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene45 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.5 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. In version 4.5, DocValues were extended to explicitly represent missing values. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene45Codec Implements the Lucene 4.5 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene45 package documentation for file format details. @lucene.experimental Lucene45DocValuesConsumer Writer for Lucene45DocValuesFormat Lucene45DocValuesFormat Lucene 4.5 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with these strategies: NUMERIC : Delta-compressed: per-document integers written in blocks of 16k. For each block the minimum value in that block is encoded, and each entry is a delta from that minimum value. Each block of deltas is compressed with bitpacking. For more information, see BlockPackedWriter . Table-compressed: when the number of unique values is very small (< 256), and when there are unused \"gaps\" in the range of values used (such as SmallSingle ), a lookup table is written instead. Each per-document entry is instead the ordinal to this table, and those ordinals are compressed with bitpacking ( PackedInt32s ). GCD-compressed: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. BINARY : Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed directly with multiplication ( docID * length ). Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Prefix-compressed Binary: values are written in chunks of 16, with the first value written completely and other values sharing prefixes. Chunk addresses are written in blocks of 16k, with the current absolute start for the block, and the average (expected) delta per entry. For each chunk the deviation from the delta (actual - expected) is written. SORTED : Sorted: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, along with the per-document ordinals written using one of the numeric strategies above. SORTED_SET : SortedSet: a mapping of ordinals to deduplicated terms is written as Prefix-Compressed Binary, an ordinal list and per-document index into this list are written using the numeric strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry | SortedSetEntry NumericEntry --> GCDNumericEntry | TableNumericEntry | DeltaNumericEntry GCDNumericEntry --> NumericHeader,MinValue,GCD TableNumericEntry --> NumericHeader,TableSize,Int64 ( WriteInt64(Int64) ) TableSize DeltaNumericEntry --> NumericHeader NumericHeader --> FieldNumber,EntryType,NumericType,MissingOffset,PackedVersion,DataOffset,Count,BlockSize BinaryEntry --> FixedBinaryEntry | VariableBinaryEntry | PrefixBinaryEntry FixedBinaryEntry --> BinaryHeader VariableBinaryEntry --> BinaryHeader,AddressOffset,PackedVersion,BlockSize PrefixBinaryEntry --> BinaryHeader,AddressInterval,AddressOffset,PackedVersion,BlockSize BinaryHeader --> FieldNumber,EntryType,BinaryType,MissingOffset,MinLength,MaxLength,DataOffset SortedEntry --> FieldNumber,EntryType,BinaryEntry,NumericEntry SortedSetEntry --> EntryType,BinaryEntry,NumericEntry,NumericEntry FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) EntryType,CompressionType --> Byte ( WriteByte(Byte) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) MinValue,GCD,MissingOffset,AddressOffset,DataOffset --> Int64 ( WriteInt64(Int64) ) TableSize --> vInt ( WriteVInt32(Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and an ordinary Lucene45DocValuesProducer.NumericEntry for the document-to-ord metadata. SortedSet fields have three entries: a Lucene45DocValuesProducer.BinaryEntry with the value metadata, and two Lucene45DocValuesProducer.NumericEntry s for the document-to-ord-index and ordinal list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 ( Lucene45DocValuesProducer.NumericEntry ) or 1 ( Lucene45DocValuesProducer.BinaryEntry ) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) NumericType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 16k integers, every integer is delta-encoded from the minimum value within the block. 1 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. 2 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. BinaryType indicates how Binary values will be stored: 0 --> fixed-width. All values have the same length, addressing by multiplication. 1 --> variable-width. An address for each value is stored. 2 --> prefix-compressed. An address to the start of every interval'th value is stored. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length). Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. MissingOffset points to a byte[] containing a bitset of all documents that had a value for the field. If its -1, then there are no missing values. Checksum contains the CRC32 checksum of all bytes in the .dvm file up until the checksum. this is used to verify integrity of the file on opening the index. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) TableCompressedNumerics --> PackedInts ( PackedInt32s ) GCDCompressedNumerics --> BlockPackedInts(blockSize=16k) ( BlockPackedWriter ) Addresses --> MonotonicBlockPackedInts(blockSize=16k) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene45DocValuesProducer Reader for Lucene45DocValuesFormat . Lucene45DocValuesProducer.BinaryEntry Metadata entry for a binary docvalues field. Lucene45DocValuesProducer.NumericEntry Metadata entry for a numeric docvalues field. Lucene45DocValuesProducer.SortedSetEntry Metadata entry for a sorted-set docvalues field."
  },
  "api/Lucene.Net/Lucene.Net.Misc.html": {
    "href": "api/Lucene.Net/Lucene.Net.Misc.html",
    "title": "Namespace Lucene.Net.Misc | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Misc <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Misc Tools The misc package has various tools for splitting/merging indices, changing norms, finding high freq terms, and others. NativeUnixDirectory NOTE : This uses C++ sources (accessible via JNI), which you'll have to compile on your platform. <xref:Lucene.Net.Store.NativeUnixDirectory> is a Directory implementation that bypasses the OS's buffer cache (using direct IO) for any IndexInput and IndexOutput used during merging of segments larger than a specified size (default 10 MB). This avoids evicting hot pages that are still in-use for searching, keeping search more responsive while large merges run. See this blog post for details. Steps to build: cd lucene/misc/ To compile NativePosixUtil.cpp -> libNativePosixUtil.so, run ant build-native-unix . libNativePosixUtil.so will be located in the lucene/build/native/ folder Make sure libNativePosixUtil.so is on your LD_LIBRARY_PATH so java can find it (something like export LD_LIBRARY_PATH=/path/to/dir:$LD_LIBRARY_PATH , where /path/to/dir contains libNativePosixUtil.so) ant jar to compile the java source and put that JAR on your CLASSPATH NativePosixUtil.cpp/java also expose access to the posix_madvise, madvise, posix_fadvise functions, which are somewhat more cross platform than O_DIRECT, however, in testing (see above link), these APIs did not seem to help prevent buffer cache eviction. Classes GetTermInfo Utility to get document frequency and total number of occurrences (sum of the tf for each doc) of a term. HighFreqTerms HighFreqTerms class extracts the top n most frequent terms (by document frequency) from an existing Lucene index and reports their document frequency. If the -t flag is given, both document frequency and total tf (total number of occurrences) are reported, ordered by descending total tf. HighFreqTerms.DocFreqComparer Compares terms by DocFreq HighFreqTerms.TotalTermFreqComparer Compares terms by TotalTermFreq IndexMergeTool Merges indices specified on the command line into the index specified as the first command line argument. SweetSpotSimilarity A similarity with a lengthNorm that provides for a \"plateau\" of equally good lengths, and tf helper functions. For lengthNorm, A min/max can be specified to define the plateau of lengths that should all have a norm of 1.0. Below the min, and above the max the lengthNorm drops off in a sqrt function. For tf, baselineTf and hyperbolicTf functions are provided, which subclasses can choose between. TermStats Holder for a term along with its statistics ( DocFreq and TotalTermFreq )."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene42.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene42 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene42 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.2 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene42Codec Implements the Lucene 4.2 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene42 package documentation for file format details. @lucene.experimental Lucene42DocValuesFormat Lucene 4.2 DocValues format. Encodes the four per-document value types (Numeric,Binary,Sorted,SortedSet) with seven basic strategies. Delta-compressed Numerics: per-document integers written in blocks of 4096. For each block the minimum value is encoded, and each entry is a delta from that minimum value. Table-compressed Numerics: when the number of unique values is very small, a lookup table is written instead. Each per-document entry is instead the ordinal to this table. Uncompressed Numerics: when all values would fit into a single byte, and the acceptableOverheadRatio would pack values into 8 bits per value anyway, they are written as absolute values (with no indirection or packing) for performance. GCD-compressed Numerics: when all numbers share a common divisor, such as dates, the greatest common denominator (GCD) is computed, and quotients are stored using Delta-compressed Numerics. Fixed-width Binary: one large concatenated byte[] is written, along with the fixed length. Each document's value can be addressed by maxDoc*length . Variable-width Binary: one large concatenated byte[] is written, along with end addresses for each document. The addresses are written in blocks of 4096, with the current absolute start for the block, and the average (expected) delta per entry. For each document the deviation from the delta (actual - expected) is written. Sorted: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinals written using one of the numeric strategies above. SortedSet: an FST mapping deduplicated terms to ordinals is written, along with the per-document ordinal list written using one of the binary strategies above. Files: .dvd : DocValues data .dvm : DocValues metadata The DocValues metadata or .dvm file. For DocValues field, this stores metadata, such as the offset into the DocValues data (.dvd) DocValues metadata (.dvm) --> Header,<FieldNumber,EntryType,Entry> NumFields ,Footer Entry --> NumericEntry | BinaryEntry | SortedEntry NumericEntry --> DataOffset,CompressionType,PackedVersion BinaryEntry --> DataOffset,DataLength,MinLength,MaxLength,PackedVersion?,BlockSize? SortedEntry --> DataOffset,ValueCount FieldNumber,PackedVersion,MinLength,MaxLength,BlockSize,ValueCount --> VInt ( WriteVInt32(Int32) ) DataOffset,DataLength --> Int64 ( WriteInt64(Int64) ) EntryType,CompressionType --> Byte ( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Sorted fields have two entries: a SortedEntry with the FST metadata, and an ordinary NumericEntry for the document-to-ord metadata. SortedSet fields have two entries: a SortedEntry with the FST metadata, and an ordinary BinaryEntry for the document-to-ord-list metadata. FieldNumber of -1 indicates the end of metadata. EntryType is a 0 (NumericEntry), 1 (BinaryEntry, or 2 (SortedEntry) DataOffset is the pointer to the start of the data in the DocValues data (.dvd) CompressionType indicates how Numeric values will be compressed: 0 --> delta-compressed. For each block of 4096 integers, every integer is delta-encoded from the minimum value within the block. 1 --> table-compressed. When the number of unique numeric values is small and it would save space, a lookup table of unique values is written, followed by the ordinal for each document. 2 --> uncompressed. When the acceptableOverheadRatio parameter would upgrade the number of bits required to 8, and all values fit in a byte, these are written as absolute binary values for performance. 3 --> gcd-compressed. When all integers share a common divisor, only quotients are stored using blocks of delta-encoded ints. MinLength and MaxLength represent the min and max byte[] value lengths for Binary values. If they are equal, then all values are of a fixed size, and can be addressed as DataOffset + (docID * length) . Otherwise, the binary values are of variable size, and packed integer metadata (PackedVersion,BlockSize) is written for the addresses. The DocValues data or .dvd file. For DocValues field, this stores the actual per-document data (the heavy-lifting) DocValues data (.dvd) --> Header,<NumericData | BinaryData | SortedData> NumFields ,Footer NumericData --> DeltaCompressedNumerics | TableCompressedNumerics | UncompressedNumerics | GCDCompressedNumerics BinaryData --> Byte ( WriteByte(Byte) ) DataLength ,Addresses SortedData --> FST<Int64> ( FST<T> ) DeltaCompressedNumerics --> BlockPackedInts(blockSize=4096) ( BlockPackedWriter ) TableCompressedNumerics --> TableSize, Int64 ( WriteInt64(Int64) ) TableSize , PackedInts ( PackedInt32s ) UncompressedNumerics --> Byte ( WriteByte(Byte) ) maxdoc Addresses --> MonotonicBlockPackedInts(blockSize=4096) ( MonotonicBlockPackedWriter ) Footer --> CodecFooter ( WriteFooter(IndexOutput) SortedSet entries store the list of ordinals in their BinaryData as a sequences of increasing vLongs ( WriteVInt64(Int64) ), delta-encoded. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Lucene42FieldInfosFormat Lucene 4.2 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader WriteHeader(DataOutput, String, Int32) FieldsCount --> VInt WriteVInt32(Int32) FieldName --> String WriteString(String) FieldBits, DocValuesBits --> Byte WriteByte(Byte) FieldNumber --> VInt WriteInt32(Int32) Attributes --> IDictionary<String,String> WriteStringStringMap(IDictionary<String, String>) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues. ( NUMERIC ) 2: BinaryDocValues. ( BINARY ) 3: SortedDocValues. ( SORTED ) Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene42NormsFormat Lucene 4.2 score normalization format. NOTE: this uses the same format as Lucene42DocValuesFormat Numeric DocValues, but with different file extensions, and passing FASTEST for uncompressed encoding: trading off space for performance. Files: .nvd : DocValues data .nvm : DocValues metadata Lucene42TermVectorsFormat Lucene 4.2 term vectors format ( TermVectorsFormat ). Very similarly to Lucene41StoredFieldsFormat , this format is based on compressed chunks of data, with document-level granularity so that a document can never span across distinct chunks. Moreover, data is made as compact as possible: textual data is compressed using the very light, LZ4 compression algorithm, binary data is written using fixed-size blocks of packed System.Int32 s ( PackedInt32s ). Term vectors are stored using two files a data file where terms, frequencies, positions, offsets and payloads are stored, an index file, loaded into memory, used to locate specific documents in the data file. Looking up term vectors for any document requires at most 1 disk seek. File formats A vector data file (extension .tvd ). this file stores terms, frequencies, positions, offsets and payloads for every document. Upon writing a new segment, it accumulates data into memory until the buffer used to store terms and payloads grows beyond 4KB. Then it flushes all metadata, terms and positions to disk using LZ4 compression for terms and payloads and blocks of packed System.Int32 s ( BlockPackedWriter ) for positions. Here is a more detailed description of the field data file format: VectorData (.tvd) --> <Header>, PackedIntsVersion, ChunkSize, <Chunk> ChunkCount , Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedIntsVersion --> VERSION_CURRENT as a VInt ( WriteVInt32(Int32) ) ChunkSize is the number of bytes of terms to accumulate before flushing, as a VInt ( WriteVInt32(Int32) ) ChunkCount is not known in advance and is the number of chunks necessary to store all document of the segment Chunk --> DocBase, ChunkDocs, < NumFields >, < FieldNums >, < FieldNumOffs >, < Flags >, < NumTerms >, < TermLengths >, < TermFreqs >, < Positions >, < StartOffsets >, < Lengths >, < PayloadLengths >, < TermAndPayloads > DocBase is the ID of the first doc of the chunk as a VInt ( WriteVInt32(Int32) ) ChunkDocs is the number of documents in the chunk NumFields --> DocNumFields ChunkDocs DocNumFields is the number of fields for each doc, written as a VInt ( WriteVInt32(Int32) ) if ChunkDocs==1 and as a PackedInt32s array otherwise FieldNums --> FieldNumDelta TotalDistincFields , a delta-encoded list of the sorted unique field numbers present in the chunk FieldNumOffs --> FieldNumOff TotalFields , as a PackedInt32s array FieldNumOff is the offset of the field number in FieldNums TotalFields is the total number of fields (sum of the values of NumFields) Flags --> Bit < FieldFlags > Bit is a single bit which when true means that fields have the same options for every document in the chunk FieldFlags --> if Bit==1: Flag TotalDistinctFields else Flag TotalFields Flag: a 3-bits int where: the first bit means that the field has positions the second bit means that the field has offsets the third bit means that the field has payloads NumTerms --> FieldNumTerms TotalFields FieldNumTerms: the number of terms for each field, using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermLengths --> PrefixLength TotalTerms SuffixLength TotalTerms TotalTerms: total number of terms (sum of NumTerms) PrefixLength: 0 for the first term of a field, the common prefix with the previous term otherwise using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) SuffixLength: length of the term minus PrefixLength for every term using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermFreqs --> TermFreqMinus1 TotalTerms TermFreqMinus1: (frequency - 1) for each term using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) Positions --> PositionDelta TotalPositions TotalPositions is the sum of frequencies of terms of all fields that have positions PositionDelta: the absolute position for the first position of a term, and the difference with the previous positions for following positions using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) StartOffsets --> (AvgCharsPerTerm TotalDistinctFields ) StartOffsetDelta TotalOffsets TotalOffsets is the sum of frequencies of terms of all fields that have offsets AvgCharsPerTerm: average number of chars per term, encoded as a float on 4 bytes. They are not present if no field has both positions and offsets enabled. StartOffsetDelta: (startOffset - previousStartOffset - AvgCharsPerTerm * PositionDelta). previousStartOffset is 0 for the first offset and AvgCharsPerTerm is 0 if the field has no positions using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) Lengths --> LengthMinusTermLength TotalOffsets LengthMinusTermLength: (endOffset - startOffset - termLength) using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) PayloadLengths --> PayloadLength TotalPayloads TotalPayloads is the sum of frequencies of terms of all fields that have payloads PayloadLength is the payload length encoded using blocks of 64 packed System.Int32 s ( BlockPackedWriter ) TermAndPayloads --> LZ4-compressed representation of < FieldTermsAndPayLoads > TotalFields FieldTermsAndPayLoads --> Terms (Payloads) Terms: term bytes Payloads: payload bytes (if the field has payloads) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) An index file (extension .tvx ). VectorIndex (.tvx) --> <Header>, <ChunkIndex>, Footer Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) ChunkIndex: See CompressingStoredFieldsIndexWriter Footer --> CodecFooter ( WriteFooter(IndexOutput) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene46.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene46 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene46 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.6 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .doc Contains the list of docs which contain each term along with frequency Positions .pos Stores position information about where a term occurs in the index Payloads .pay Stores additional per-position metadata information such as character offsets and user payloads Norms .nvd, .nvm Encodes length and boost factors for docs and fields Per-Document Values .dvd, .dvm Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. In version 4.1, the format of the postings list changed to use either of FOR compression or variable-byte encoding, depending upon the frequency of the term. Terms appearing only once were changed to inline directly into the term dictionary. Stored fields are compressed by default. In version 4.2, term vectors are compressed by default. DocValues has a new multi-valued type (SortedSet), that can be used for faceting/grouping/joining on multi-valued fields. In version 4.5, DocValues were extended to explicitly represent missing values. In version 4.6, FieldInfos were extended to support per-field DocValues generation, to allow updating NumericDocValues fields. In version 4.8, checksum footers were added to the end of each index file for improved data integrity. Specifically, the last 8 bytes of every index file contain the zlib-crc32 checksum of the file. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene46Codec Implements the Lucene 4.6 index format, with configurable per-field postings and docvalues formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene46 package documentation for file format details. @lucene.experimental Lucene46FieldInfosFormat Lucene 4.6 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,DocValuesGen,Attributes> FieldsCount ,Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) DocValuesGen --> Int64 ( WriteInt64(Int64) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 string. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a System.Byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a System.Byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: NumericDocValues . ( NUMERIC ) 2: BinaryDocValues . ( BINARY ) 3: SortedDocValues . ( SORTED ) DocValuesGen is the generation count of the field's DocValues . If this is -1, there are no DocValues updates to that field. Anything above zero means there are updates stored by DocValuesFormat . Attributes: a key-value map of codec-private attributes. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene46SegmentInfoFormat Lucene 4.6 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Files, Footer Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( WriteStringSet(ISet<String>) ) Diagnostics --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Footer --> CodecFooter ( WriteFooter(IndexOutput) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Files is a list of files referred to by this segment. @lucene.experimental Lucene46SegmentInfoReader Lucene 4.6 implementation of SegmentInfoReader . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene46SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "api/Lucene.Net.Demo/Lucene.Net.Demo.html": {
    "href": "api/Lucene.Net.Demo/Lucene.Net.Demo.html",
    "title": "Namespace Lucene.Net.Demo | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Demo <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> The demo module offers simple example code to show the features of Lucene. Apache Lucene - Building and Installing the Basic Demo About this Document About the Demo Indexing Files About the code Location of the source IndexFiles Searching Files About this Document This document is intended as a \"getting started\" guide to using and running the Lucene demos. It walks you through some basic installation and configuration. About the Demo The Lucene command-line demo code consists of an application that demonstrates various functionalities of Lucene and how you can add Lucene to your applications. Indexing Files Once you've gotten this far you're probably itching to go. Let's build an index! Assuming you've set your CLASSPATH correctly, just type: java org.apache.lucene.demo.IndexFiles -docs {path-to-lucene}/src This will produce a subdirectory called index which will contain an index of all of the Lucene source code. To search the index type: java org.apache.lucene.demo.SearchFiles You'll be prompted for a query. Type in a gibberish or made up word (for example: \"supercalifragilisticexpialidocious\"). You'll see that there are no maching results in the lucene source code. Now try entering the word \"string\". That should return a whole bunch of documents. The results will page at every tenth result and ask you whether you want more results. About the code In this section we walk through the sources behind the command-line Lucene demo: where to find them, their parts and their function. This section is intended for Java developers wishing to understand how to use Lucene in their applications. Location of the source The files discussed here are linked into this documentation directly: * IndexFiles : code to create a Lucene index. * SearchFiles : code to search a Lucene index. IndexFiles As we discussed in the previous walk-through, the IndexFiles class creates a Lucene Index. Let's take a look at how it does this. The main() method parses the command-line parameters, then in preparation for instantiating IndexWriter , opens a Directory , and instantiates StandardAnalyzer and IndexWriterConfig . The value of the -index command-line parameter is the name of the filesystem directory where all index information should be stored. If IndexFiles is invoked with a relative path given in the -index command-line parameter, or if the -index command-line parameter is not given, causing the default relative index path \" index \" to be used, the index path will be created as a subdirectory of the current working directory (if it does not already exist). On some platforms, the index path may be created in a different directory (such as the user's home directory). The -docs command-line parameter value is the location of the directory containing files to be indexed. The -update command-line parameter tells IndexFiles not to delete the index if it already exists. When -update is not given, IndexFiles will first wipe the slate clean before indexing any documents. Lucene Directory s are used by the IndexWriter to store information in the index. In addition to the FSDirectory implementation we are using, there are several other Directory subclasses that can write to RAM, to databases, etc. Lucene Analyzer s are processing pipelines that break up text into indexed tokens, a.k.a. terms, and optionally perform other operations on these tokens, e.g. downcasing, synonym insertion, filtering out unwanted tokens, etc. The Analyzer we are using is StandardAnalyzer , which creates tokens using the Word Break rules from the Unicode Text Segmentation algorithm specified in Unicode Standard Annex #29 ; converts tokens to lowercase; and then filters out stopwords. Stopwords are common language words such as articles (a, an, the, etc.) and other tokens that may have less value for searching. It should be noted that there are different rules for every language, and you should use the proper analyzer for each. Lucene currently provides Analyzers for a number of different languages (see the javadocs under lucene/analysis/common/src/java/org/apache/lucene/analysis ). The IndexWriterConfig instance holds all configuration for IndexWriter . For example, we set the OpenMode to use here based on the value of the -update command-line parameter. Looking further down in the file, after IndexWriter is instantiated, you should see the indexDocs() code. This recursive function crawls the directories and creates Document objects. The Document is simply a data object to represent the text content from the file as well as its creation time and location. These instances are added to the IndexWriter . If the -update command-line parameter is given, the IndexWriterConfig OpenMode will be set to OpenMode.CREATE_OR_APPEND , and rather than adding documents to the index, the IndexWriter will update them in the index by attempting to find an already-indexed document with the same identifier (in our case, the file path serves as the identifier); deleting it from the index if it exists; and then adding the new document to the index. Searching Files The SearchFiles class is quite simple. It primarily collaborates with an IndexSearcher , StandardAnalyzer , (which is used in the IndexFiles class as well) and a QueryParser . The query parser is constructed with an analyzer used to interpret your query text in the same way the documents are interpreted: finding word boundaries, downcasing, and removing useless words like 'a', 'an' and 'the'. The Query object contains the results from the QueryParser which is passed to the searcher. Note that it's also possible to programmatically construct a rich Query object without using the query parser. The query parser just enables decoding the Lucene query syntax into the corresponding Query object. SearchFiles uses the IndexSearcher.search method that returns TopDocs with max n hits. The results are printed in pages, sorted by score (i.e. relevance). Classes IndexFiles Index all text files under a directory. This is a command-line application demonstrating simple Lucene indexing. Run it with no command-line arguments for usage information. SearchFiles Simple command-line based search demo."
  },
  "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.html": {
    "href": "api/Lucene.Net/Lucene.Net.Codecs.Lucene40.html",
    "title": "Namespace Lucene.Net.Codecs.Lucene40 | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Codecs.Lucene40 <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Lucene 4.0 file format. Apache Lucene - Index File Formats * Introduction * Definitions * Inverted Indexing * Types of Fields * Segments * Document Numbers * Index Structure Overview * File Naming * Summary of File Extensions * Lock File * History * Limitations Introduction This document defines the index file formats used in this version of Lucene. If you are using a different version of Lucene, please consult the copy of docs/ that was distributed with the version you are using. Apache Lucene is written in Java, but several efforts are underway to write versions of Lucene in other programming languages . If these versions are to remain compatible with Apache Lucene, then a language-independent definition of the Lucene index format is required. This document thus attempts to provide a complete and independent definition of the Apache Lucene file formats. As Lucene evolves, this document should evolve. Versions of Lucene in different programming languages should endeavor to agree on file formats, and generate new versions of this document. Definitions The fundamental concepts in Lucene are index, document, field and term. An index contains a sequence of documents. * A document is a sequence of fields. * A field is a named sequence of terms. * A term is a sequence of bytes. The same sequence of bytes in two different fields is considered a different term. Thus terms are represented as a pair: the string naming the field, and the bytes within the field. ### Inverted Indexing The index stores statistics about terms in order to make term-based search more efficient. Lucene's index falls into the family of indexes known as an inverted index. This is because it can list, for a term, the documents that contain it. This is the inverse of the natural relationship, in which documents list terms. ### Types of Fields In Lucene, fields may be stored , in which case their text is stored in the index literally, in a non-inverted manner. Fields that are inverted are called indexed . A field may be both stored and indexed. The text of a field may be tokenized into terms to be indexed, or the text of a field may be used literally as a term to be indexed. Most fields are tokenized, but sometimes it is useful for certain identifier fields to be indexed literally. See the Field java docs for more information on Fields. ### Segments Lucene indexes may be composed of multiple sub-indexes, or segments . Each segment is a fully independent index, which could be searched separately. Indexes evolve by: 1. Creating new segments for newly added documents. 2. Merging existing segments. Searches may involve multiple segments and/or multiple indexes, each index potentially composed of a set of segments. ### Document Numbers Internally, Lucene refers to documents by an integer document number . The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous. Note that a document's number may change, so caution should be taken when storing these numbers outside of Lucene. In particular, numbers may change in the following situations: * The numbers stored in each segment are unique only within the segment, and must be converted before they can be used in a larger context. The standard technique is to allocate each segment a range of values, based on the range of numbers used in that segment. To convert a document number from a segment to an external value, the segment's base document number is added. To convert an external value back to a segment-specific value, the segment is identified by the range that the external value is in, and the segment's base value is subtracted. For example two five document segments might be combined, so that the first segment has a base value of zero, and the second of five. Document three from the second segment would have an external value of eight. * When documents are deleted, gaps are created in the numbering. These are eventually removed as the index evolves through merging. Deleted documents are dropped when segments are merged. A freshly-merged segment thus has no gaps in its numbering. Index Structure Overview Each segment index maintains the following: * Segment info . This contains metadata about a segment, such as the number of documents, what files it uses, * Field names . This contains the set of field names used in the index. * Stored Field values . This contains, for each document, a list of attribute-value pairs, where the attributes are field names. These are used to store auxiliary information about the document, such as its title, url, or an identifier to access a database. The set of stored fields are what is returned for each hit when searching. This is keyed by document number. * Term dictionary . A dictionary containing all of the terms used in all of the indexed fields of all of the documents. The dictionary also contains the number of documents which contain the term, and pointers to the term's frequency and proximity data. * Term Frequency data . For each term in the dictionary, the numbers of all the documents that contain that term, and the frequency of the term in that document, unless frequencies are omitted (IndexOptions.DOCS_ONLY) * Term Proximity data . For each term in the dictionary, the positions that the term occurs in each document. Note that this will not exist if all fields in all documents omit position data. * Normalization factors . For each field in each document, a value is stored that is multiplied into the score for hits on that field. * Term Vectors . For each field in each document, the term vector (sometimes called document vector) may be stored. A term vector consists of term text and term frequency. To add Term Vectors to your index see the Field constructors * Per-document values . Like stored values, these are also keyed by document number, but are generally intended to be loaded into main memory for fast access. Whereas stored values are generally intended for summary results from searches, per-document values are useful for things like scoring factors. * Deleted documents . An optional file indicating which documents are deleted. Details on each of these are provided in their linked pages. File Naming All files belonging to a segment have the same name with varying extensions. The extensions correspond to the different file formats described below. When using the Compound File format (default in 1.4 and greater) these files (except for the Segment info file, the Lock file, and Deleted documents file) are collapsed into a single .cfs file (see below for details) Typically, all segments in an index are stored in a single directory, although this is not required. As of version 2.1 (lock-less commits), file names are never re-used (there is one exception, \"segments.gen\", see below). That is, when any file is saved to the Directory it is given a never before used filename. This is achieved using a simple generations approach. For example, the first segments file is segments_1, then segments_2, etc. The generation is a sequential long integer represented in alpha-numeric (base 36) form. Summary of File Extensions The following table summarizes the names and extensions of the files in Lucene: Name Extension Brief Description Segments File segments.gen, segments_N Stores information about a commit point Lock File write.lock The Write lock prevents multiple IndexWriters from writing to the same file. Segment Info .si Stores metadata about a segment Compound File .cfs, .cfe An optional \"virtual\" file consisting of all the other index files for systems that frequently run out of file handles. Fields .fnm Stores information about the fields Field Index .fdx Contains pointers to field data Field Data .fdt The stored fields for documents Term Dictionary .tim The term dictionary, stores term info Term Index .tip The index into the Term Dictionary Frequencies .frq Contains the list of docs which contain each term along with frequency Positions .prx Stores position information about where a term occurs in the index Norms .nrm.cfs, .nrm.cfe Encodes length and boost factors for docs and fields Per-Document Values .dv.cfs, .dv.cfe Encodes additional scoring factors or other per-document information. Term Vector Index .tvx Stores offset into the document data file Term Vector Documents .tvd Contains information about each document that has term vectors Term Vector Fields .tvf The field level info about term vectors Deleted Documents .del Info about what files are deleted Lock File The write lock, which is stored in the index directory by default, is named \"write.lock\". If the lock directory is different from the index directory then the write lock will be named \"XXXX-write.lock\" where XXXX is a unique prefix derived from the full path to the index directory. When this file is present, a writer is currently modifying the index (adding or removing documents). This lock file ensures that only one writer is modifying the index at a time. History Compatibility notes are provided in this document, describing how file formats have changed from prior versions: In version 2.1, the file format was changed to allow lock-less commits (ie, no more commit lock). The change is fully backwards compatible: you can open a pre-2.1 index for searching or adding/deleting of docs. When the new segments file is saved (committed), it will be written in the new file format (meaning no specific \"upgrade\" process is needed). But note that once a commit has occurred, pre-2.1 Lucene will not be able to read the index. In version 2.3, the file format was changed to allow segments to share a single set of doc store (vectors & stored fields) files. This allows for faster indexing in certain cases. The change is fully backwards compatible (in the same way as the lock-less commits change in 2.1). In version 2.4, Strings are now written as true UTF-8 byte sequence, not Java's modified UTF-8. See LUCENE-510 for details. In version 2.9, an optional opaque Map<String,String> CommitUserData may be passed to IndexWriter's commit methods (and later retrieved), which is recorded in the segments_N file. See LUCENE-1382 for details. Also, diagnostics were added to each segment written recording details about why it was written (due to flush, merge; which OS/JRE was used; etc.). See issue LUCENE-1654 for details. In version 3.0, compressed fields are no longer written to the index (they can still be read, but on merge the new segment will write them, uncompressed). See issue LUCENE-1960 for details. In version 3.1, segments records the code version that created them. See LUCENE-2720 for details. Additionally segments track explicitly whether or not they have term vectors. See LUCENE-2811 for details. In version 3.2, numeric fields are written as natively to stored fields file, previously they were stored in text format only. In version 3.4, fields can omit position data while still indexing term frequencies. In version 4.0, the format of the inverted index became extensible via the Codec api. Fast per-document storage ({@code DocValues}) was introduced. Normalization factors need no longer be a single byte, they can be any NumericDocValues . Terms need not be unicode strings, they can be any byte sequence. Term offsets can optionally be indexed into the postings lists. Payloads can be stored in the term vectors. Limitations Lucene uses a Java int to refer to document numbers, and the index file format uses an Int32 on-disk to store document numbers. This is a limitation of both the index file format and the current implementation. Eventually these should be replaced with either UInt64 values, or better yet, VInt values which have no limit. Classes Lucene40Codec Implements the Lucene 4.0 index format, with configurable per-field postings formats. If you want to reuse functionality of this codec in another codec, extend FilterCodec . See Lucene.Net.Codecs.Lucene40 package documentation for file format details. Lucene40DocValuesFormat Lucene 4.0 DocValues format. Files: .dv.cfs : compound container ( CompoundFileDirectory ) .dv.cfe : compound entries ( CompoundFileDirectory ) Entries within the compound file: <segment> <fieldNumber>.dat : data values <segment><fieldNumber>.idx : index into the .dat for DEREF types There are several many types of DocValues with different encodings. From the perspective of filenames, all types store their values in .dat entries within the compound file. In the case of dereferenced/sorted types, the .dat actually contains only the unique values, and an additional .idx file contains pointers to these unique values. Formats: Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS .dat --> Header, PackedType, MinValue, DefaultValue, PackedStream Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 .dat --> Header, ValueSize, Byte ( WriteByte(Byte) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 .dat --> Header, ValueSize, Short ( WriteInt16(Int16) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 .dat --> Header, ValueSize, Int32 ( WriteInt32(Int32) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 .dat --> Header, ValueSize, Int64 ( WriteInt64(Int64) ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 .dat --> Header, ValueSize, Float32 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 .dat --> Header, ValueSize, Float64 maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .idx --> Header, TotalBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) maxdoc Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .idx --> Header, NumValues, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .idx --> Header, TotalVarBytes, Addresses Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF .dat --> Header, (LengthPrefix + Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .idx --> Header, NumValues, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED .dat --> Header, ValueSize, (Byte ( WriteByte(Byte) ) * ValueSize) NumValues Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .idx --> Header, TotalVarBytes, Addresses, Ordinals Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED .dat --> Header, (Byte ( WriteByte(Byte) ) * variable ValueSize ) NumValues Data Types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) PackedType --> Byte ( WriteByte(Byte) ) MaxAddress, MinValue, DefaultValue --> Int64 ( WriteInt64(Int64) ) PackedStream, Addresses, Ordinals --> PackedInt32s ValueSize, NumValues --> Int32 ( WriteInt32(Int32) ) Float32 --> 32-bit float encoded with SingleToRawInt32Bits(Single) then written as Int32 ( WriteInt32(Int32) ) Float64 --> 64-bit float encoded with DoubleToRawInt64Bits(Double) then written as Int64 ( WriteInt64(Int64) ) TotalBytes --> VLong ( WriteVInt64(Int64) ) TotalVarBytes --> Int64 ( WriteInt64(Int64) ) LengthPrefix --> Length of the data value as VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes) Notes: PackedType is a 0 when compressed, 1 when the stream is written as 64-bit integers. Addresses stores pointers to the actual byte location (indexed by docid). In the VAR_STRAIGHT case, each entry can have a different length, so to determine the length, docid+1 is retrieved. A sentinel address is written at the end for the VAR_STRAIGHT case, so the Addresses stream contains maxdoc+1 indices. For the deduplicated VAR_DEREF case, each length is encoded as a prefix to the data itself as a VInt ( WriteVInt32(Int32) ) (maximum of 2 bytes). Ordinals stores the term ID in sorted order (indexed by docid). In the FIXED_SORTED case, the address into the .dat can be computed from the ordinal as Header+ValueSize+(ordinal*ValueSize) because the byte length is fixed. In the VAR_SORTED case, there is double indirection (docid -> ordinal -> address), but an additional sentinel ordinal+address is always written (so there are NumValues+1 ordinals). To determine the length, ord+1's address is looked up as well. Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT in contrast to other straight variants uses a .idx file to improve lookup perfromance. In contrast to Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF it doesn't apply deduplication of the document values. Limitations: Binary doc values can be at most MAX_BINARY_FIELD_LENGTH in length. Lucene40FieldInfosFormat Lucene 4.0 Field Infos format. Field names are stored in the field info file, with suffix .fnm . FieldInfos (.fnm) --> Header,FieldsCount, <FieldName,FieldNumber, FieldBits,DocValuesBits,Attributes> FieldsCount Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldsCount --> VInt ( WriteVInt32(Int32) ) FieldName --> String ( WriteString(String) ) FieldBits, DocValuesBits --> Byte ( WriteByte(Byte) ) FieldNumber --> VInt ( WriteInt32(Int32) ) Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) Field Descriptions: FieldsCount: the number of fields in this file. FieldName: name of the field as a UTF-8 String. FieldNumber: the field's number. Note that unlike previous versions of Lucene, the fields are not numbered implicitly by their order in the file, instead explicitly. FieldBits: a byte containing field options. The low-order bit is one for indexed fields, and zero for non-indexed fields. The second lowest-order bit is one for fields that have term vectors stored, and zero for fields without term vectors. If the third lowest order-bit is set (0x4), offsets are stored into the postings list in addition to positions. Fourth bit is unused. If the fifth lowest-order bit is set (0x10), norms are omitted for the indexed field. If the sixth lowest-order bit is set (0x20), payloads are stored for the indexed field. If the seventh lowest-order bit is set (0x40), term frequencies and positions omitted for the indexed field. If the eighth lowest-order bit is set (0x80), positions are omitted for the indexed field. DocValuesBits: a byte containing per-document value types. The type recorded as two four-bit integers, with the high-order bits representing norms options, and the low-order bits representing DocValues options. Each four-bit integer can be decoded as such: 0: no DocValues for this field. 1: variable-width signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.VAR_INTS ) 2: 32-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_32 ) 3: 64-bit floating point values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FLOAT_64 ) 4: fixed-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_STRAIGHT ) 5: fixed-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_DEREF ) 6: variable-length byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_STRAIGHT ) 7: variable-length dereferenced byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_DEREF ) 8: 16-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_16 ) 9: 32-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_32 ) 10: 64-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_64 ) 11: 8-bit signed integers. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.FIXED_INTS_8 ) 12: fixed-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_FIXED_SORTED ) 13: variable-length sorted byte array values. ( Lucene.Net.Codecs.Lucene40.LegacyDocValuesType.BYTES_VAR_SORTED ) Attributes: a key-value map of codec-private attributes. @lucene.experimental Lucene40LiveDocsFormat Lucene 4.0 Live Documents Format. The .del file is optional, and only exists when a segment contains deletions. Although per-segment, this file is maintained exterior to compound segment files. Deletions (.del) --> Format,Header,ByteCount,BitCount, Bits | DGaps (depending on Format) Format,ByteSize,BitCount --> Uint32 ( WriteInt32(Int32) ) Bits --> < Byte ( WriteByte(Byte) ) > ByteCount DGaps --> <DGap,NonOnesByte> NonzeroBytesCount DGap --> VInt ( WriteVInt32(Int32) ) NonOnesByte --> Byte( WriteByte(Byte) ) Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) Format is 1: indicates cleared DGaps. ByteCount indicates the number of bytes in Bits. It is typically (SegSize/8)+1. BitCount indicates the number of bits that are currently set in Bits. Bits contains one bit for each document indexed. When the bit corresponding to a document number is cleared, that document is marked as deleted. Bit ordering is from least to most significant. Thus, if Bits contains two bytes, 0x00 and 0x02, then document 9 is marked as alive (not deleted). DGaps represents sparse bit-vectors more efficiently than Bits. It is made of DGaps on indexes of nonOnes bytes in Bits, and the nonOnes bytes themselves. The number of nonOnes bytes in Bits (NonOnesBytesCount) is not stored. For example, if there are 8000 bits and only bits 10,12,32 are cleared, DGaps would be used: (VInt) 1 , (byte) 20 , (VInt) 3 , (Byte) 1 Lucene40NormsFormat Lucene 4.0 Norms Format. Files: .nrm.cfs : compound container ( CompoundFileDirectory ) .nrm.cfe : compound entries ( CompoundFileDirectory ) Norms are implemented as DocValues, so other than file extension, norms are written exactly the same way as Lucene40DocValuesFormat . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40PostingsBaseFormat Provides a PostingsReaderBase and PostingsWriterBase . Lucene40PostingsFormat Lucene 4.0 Postings format. Files: .tim : Term Dictionary .tip : Term Index .frq : Frequencies .prx : Positions Term Dictionary The .tim file contains the list of terms in each field along with per-term statistics (such as docfreq) and pointers to the frequencies, positions and skip data in the .frq and .prx files. See BlockTreeTermsWriter for more details on the format. NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the Postings Metadata and Term Metadata sections described here: Postings Metadata --> Header, SkipInterval, MaxSkipLevels, SkipMinimum Term Metadata --> FreqDelta, SkipDelta?, ProxDelta? Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SkipInterval,MaxSkipLevels,SkipMinimum --> Uint32 ( WriteInt32(Int32) ) SkipDelta,FreqDelta,ProxDelta --> VLong ( WriteVInt64(Int64) ) Notes: Header is a CodecHeader ( WriteHeader(DataOutput, String, Int32) ) storing the version information for the postings. SkipInterval is the fraction of TermDocs stored in skip tables. It is used to accelerate Advance(Int32) . Larger values result in smaller indexes, greater acceleration, but fewer accelerable cases, while smaller values result in bigger indexes, less acceleration (in case of a small value for MaxSkipLevels) and more accelerable cases. MaxSkipLevels is the max. number of skip levels stored for each term in the .frq file. A low value results in smaller indexes but less acceleration, a larger value results in slightly larger indexes but greater acceleration. See format of .frq file for more information about skip levels. SkipMinimum is the minimum document frequency a term must have in order to write any skip data at all. FreqDelta determines the position of this term's TermFreqs within the .frq file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block). ProxDelta determines the position of this term's TermPositions within the .prx file. In particular, it is the difference between the position of this term's data in that file and the position of the previous term's data (or zero, for the first term in the block. For fields that omit position data, this will be 0 since prox information is not stored. SkipDelta determines the position of this term's SkipData within the .frq file. In particular, it is the number of bytes after TermFreqs that the SkipData starts. In other words, it is the length of the TermFreq data. SkipDelta is only stored if DocFreq is not smaller than SkipMinimum. Term Index The .tip file contains an index into the term dictionary, so that it can be accessed randomly. See BlockTreeTermsWriter for more details on the format. Frequencies The .frq file contains the lists of documents which contain each term, along with the frequency of the term in that document (except when frequencies are omitted: DOCS_ONLY ). FreqFile (.frq) --> Header, <TermFreqs, SkipData?> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermFreqs --> <TermFreq> DocFreq TermFreq --> DocDelta[, Freq?] SkipData --> <<SkipLevelLength, SkipLevel> NumSkipLevels-1 , SkipLevel> <SkipDatum> SkipLevel --> <SkipDatum> DocFreq/(SkipInterval^(Level + 1)) SkipDatum --> DocSkip,PayloadLength?,OffsetLength?,FreqSkip,ProxSkip,SkipChildLevelPointer? DocDelta,Freq,DocSkip,PayloadLength,OffsetLength,FreqSkip,ProxSkip --> VInt ( WriteVInt32(Int32) ) SkipChildLevelPointer --> VLong ( WriteVInt64(Int64) ) TermFreqs are ordered by term (the term is implicit, from the term dictionary). TermFreq entries are ordered by increasing document number. DocDelta: if frequencies are indexed, this determines both the document number and the frequency. In particular, DocDelta/2 is the difference between this document number and the previous document number (or zero when this is the first document in a TermFreqs). When DocDelta is odd, the frequency is one. When DocDelta is even, the frequency is read as another VInt. If frequencies are omitted, DocDelta contains the gap (not multiplied by 2) between document numbers and no frequency information is stored. For example, the TermFreqs for a term which occurs once in document seven and three times in document eleven, with frequencies indexed, would be the following sequence of VInts: 15, 8, 3 If frequencies were omitted ( DOCS_ONLY ) it would be this sequence of VInts instead: 7,4 DocSkip records the document number before every SkipInterval th document in TermFreqs. If payloads and offsets are disabled for the term's field, then DocSkip represents the difference from the previous value in the sequence. If payloads and/or offsets are enabled for the term's field, then DocSkip/2 represents the difference from the previous value in the sequence. In this case when DocSkip is odd, then PayloadLength and/or OffsetLength are stored indicating the length of the last payload/offset before the SkipInterval th document in TermPositions. PayloadLength indicates the length of the last payload. OffsetLength indicates the length of the last offset (endOffset-startOffset). FreqSkip and ProxSkip record the position of every SkipInterval th entry in FreqFile and ProxFile, respectively. File positions are relative to the start of TermFreqs and Positions, to the previous SkipDatum in the sequence. For example, if DocFreq=35 and SkipInterval=16, then there are two SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The first FreqSkip names the number of bytes after the beginning of TermFreqs that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. The first ProxSkip names the number of bytes after the beginning of Positions that the 16 th SkipDatum starts, and the second the number of bytes after that that the 32 nd starts. Each term can have multiple skip levels. The amount of skip levels for a term is NumSkipLevels = Min(MaxSkipLevels, floor(log(DocFreq/log(SkipInterval)))). The number of SkipData entries for a skip level is DocFreq/(SkipInterval^(Level + 1)), whereas the lowest skip level is Level=0. Example: SkipInterval = 4, MaxSkipLevels = 2, DocFreq = 35. Then skip level 0 has 8 SkipData entries, containing the 3 rd , 7 th , 11 th , 15 th , 19 th , 23 rd , 27 th , and 31 st document numbers in TermFreqs. Skip level 1 has 2 SkipData entries, containing the 15 th and 31 st document numbers in TermFreqs. The SkipData entries on all upper levels > 0 contain a SkipChildLevelPointer referencing the corresponding SkipData entry in level-1. In the example has entry 15 on level 1 a pointer to entry 15 on level 0 and entry 31 on level 1 a pointer to entry 31 on level 0. Positions The .prx file contains the lists of positions that each term occurs at within documents. Note that fields omitting positional data do not store anything into this file, and if all fields in the index omit positional data then the .prx file will not exist. ProxFile (.prx) --> Header, <TermPositions> TermCount Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) TermPositions --> <Positions> DocFreq Positions --> <PositionDelta,PayloadLength?,OffsetDelta?,OffsetLength?,PayloadData?> Freq PositionDelta,OffsetDelta,OffsetLength,PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> byte ( WriteByte(Byte) ) PayloadLength TermPositions are ordered by term (the term is implicit, from the term dictionary). Positions entries are ordered by increasing document number (the document number is implicit from the .frq file). PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. For example, the TermPositions for a term which occurs as the fourth term in one document, and as the fifth and ninth term in a subsequent document, would be the following sequence of VInts (payloads disabled): 4, 5, 4 PayloadData is metadata associated with the current term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. OffsetDelta/2 is the difference between this position's startOffset from the previous occurrence (or zero, if this is the first occurrence in this document). If OffsetDelta is odd, then the length (endOffset-startOffset) differs from the previous occurrence and an OffsetLength follows. Offset data is only written for DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS . Lucene40PostingsReader Concrete class that reads the 4.0 frq/prox postings format. Lucene40SegmentInfoFormat Lucene 4.0 Segment info format. Files: .si : Header, SegVersion, SegSize, IsCompoundFile, Diagnostics, Attributes, Files Data types: Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) SegSize --> Int32 ( WriteInt32(Int32) ) SegVersion --> String ( WriteString(String) ) Files --> ISet<String> ( WriteStringSet(ISet<String>) ) Diagnostics, Attributes --> IDictionary<String,String> ( WriteStringStringMap(IDictionary<String, String>) ) IsCompoundFile --> Int8 ( WriteByte(Byte) ) Field Descriptions: SegVersion is the code version that created the segment. SegSize is the number of documents contained in the segment index. IsCompoundFile records whether the segment is written as a compound file or not. If this is -1, the segment is not a compound file. If it is 1, the segment is a compound file. Checksum contains the CRC32 checksum of all bytes in the segments_N file up until the checksum. This is used to verify integrity of the file on opening the index. The Diagnostics Map is privately written by IndexWriter , as a debugging aid, for each segment it creates. It includes metadata like the current Lucene version, OS, .NET/Java version, why the segment was created (merge, flush, addIndexes), etc. Attributes: a key-value map of codec-private attributes. Files is a list of files referred to by this segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40SegmentInfoReader Lucene 4.0 implementation of SegmentInfoReader . @lucene.experimental Lucene40SegmentInfoWriter Lucene 4.0 implementation of SegmentInfoWriter . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40SkipListReader Implements the skip list reader for the 4.0 posting list format that stores positions and payloads. Lucene40StoredFieldsFormat Lucene 4.0 Stored Fields Format. Stored fields are represented by two files: The field index, or .fdx file. This is used to find the location within the field data file of the fields of a particular document. Because it contains fixed-length data, this file may be easily randomly accessed. The position of document n 's field data is the Uint64 ( WriteInt64(Int64) ) at n*8 in this file. This contains, for each document, a pointer to its field data, as follows: FieldIndex (.fdx) --> <Header>, <FieldValuesPosition> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) FieldValuesPosition --> Uint64 ( WriteInt64(Int64) ) The field data, or .fdt file. This contains the stored fields of each document, as follows: FieldData (.fdt) --> <Header>, <DocFieldData> SegSize Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocFieldData --> FieldCount, <FieldNum, Bits, Value> FieldCount FieldCount --> VInt ( WriteVInt32(Int32) ) FieldNum --> VInt ( WriteVInt32(Int32) ) Bits --> Byte ( WriteByte(Byte) ) low order bit reserved. second bit is one for fields containing binary data third bit reserved. 4th to 6th bit (mask: 0x7<<3) define the type of a numeric field: all bits in mask are cleared if no numeric field at all 1<<3: Value is Int 2<<3: Value is Long 3<<3: Value is Int as Float (as of Int32BitsToSingle(Int32) 4<<3: Value is Long as Double (as of System.BitConverter.Int64BitsToDouble(System.Int64) Value --> String | BinaryValue | Int | Long (depending on Bits) BinaryValue --> ValueSize, < Byte ( WriteByte(Byte) ) >^ValueSize ValueSize --> VInt ( WriteVInt32(Int32) ) This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40StoredFieldsReader Class responsible for access to stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET INTERNAL API, use at your own risk Lucene40StoredFieldsWriter Class responsible for writing stored document fields. It uses <segment>.fdt and <segment>.fdx; files. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Lucene40TermVectorsFormat Lucene 4.0 Term Vectors format. Term Vector support is an optional on a field by field basis. It consists of 3 files. The Document Index or .tvx file. For each document, this stores the offset into the document data (.tvd) and field data (.tvf) files. DocumentIndex (.tvx) --> Header,<DocumentPosition,FieldPosition> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) DocumentPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvd file) FieldPosition --> UInt64 ( WriteInt64(Int64) ) (offset in the .tvf file) The Document or .tvd file. This contains, for each document, the number of fields, a list of the fields with term vector info and finally a list of pointers to the field information in the .tvf (Term Vector Fields) file. The .tvd file is used to map out the fields that have term vectors stored and where the field information is in the .tvf file. Document (.tvd) --> Header,<NumFields, FieldNums, FieldPositions> NumDocs Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumFields --> VInt ( WriteVInt32(Int32) ) FieldNums --> <FieldNumDelta> NumFields FieldNumDelta --> VInt ( WriteVInt32(Int32) ) FieldPositions --> <FieldPositionDelta> NumFields-1 FieldPositionDelta --> VLong ( WriteVInt64(Int64) ) The Field or .tvf file. This file contains, for each field that has a term vector stored, a list of the terms, their frequencies and, optionally, position, offset, and payload information. Field (.tvf) --> Header,<NumTerms, Flags, TermFreqs> NumFields Header --> CodecHeader ( WriteHeader(DataOutput, String, Int32) ) NumTerms --> VInt ( WriteVInt32(Int32) ) Flags --> Byte ( WriteByte(Byte) ) TermFreqs --> <TermText, TermFreq, Positions?, PayloadData?, Offsets?> NumTerms TermText --> <PrefixLength, Suffix> PrefixLength --> VInt ( WriteVInt32(Int32) ) Suffix --> String ( WriteString(String) ) TermFreq --> VInt ( WriteVInt32(Int32) ) Positions --> <PositionDelta PayloadLength?> TermFreq PositionDelta --> VInt ( WriteVInt32(Int32) ) PayloadLength --> VInt ( WriteVInt32(Int32) ) PayloadData --> Byte ( WriteByte(Byte) ) NumPayloadBytes Offsets --> <VInt ( WriteVInt32(Int32) ), VInt ( WriteVInt32(Int32) ) > TermFreq Notes: Flags byte stores whether this term vector has position, offset, payload. information stored. Term byte prefixes are shared. The PrefixLength is the number of initial bytes from the previous term which must be pre-pended to a term's suffix in order to form the term's bytes. Thus, if the previous term's text was \"bone\" and the term is \"boy\", the PrefixLength is two and the suffix is \"y\". PositionDelta is, if payloads are disabled for the term's field, the difference between the position of the current occurrence in the document and the previous occurrence (or zero, if this is the first occurrence in this document). If payloads are enabled for the term's field, then PositionDelta/2 is the difference between the current and the previous position. If payloads are enabled and PositionDelta is odd, then PayloadLength is stored, indicating the length of the payload at the current term position. PayloadData is metadata associated with a term position. If PayloadLength is stored at the current position, then it indicates the length of this payload. If PayloadLength is not stored, then this payload has the same length as the payload at the previous position. PayloadData encodes the concatenated bytes for all of a terms occurrences. Offsets are stored as delta encoded VInts. The first VInt is the startOffset, the second is the endOffset. Lucene40TermVectorsReader Lucene 4.0 Term Vectors reader. It reads .tvd, .tvf, and .tvx files. Lucene40TermVectorsWriter Lucene 4.0 Term Vectors writer. It writes .tvd, .tvf, and .tvx files."
  },
  "api/Lucene.Net/Lucene.Net.Analysis.html": {
    "href": "api/Lucene.Net/Lucene.Net.Analysis.html",
    "title": "Namespace Lucene.Net.Analysis | Apache Lucene.NET 4.8.0 Documentation",
    "keywords": "Namespace Lucene.Net.Analysis <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> API and code to convert text into indexable/searchable tokens. Covers Analyzer and related classes. Parsing? Tokenization? Analysis! Lucene, an indexing and search library, accepts only plain text input. Parsing Applications that build their search capabilities upon Lucene may support documents in various formats – HTML, XML, PDF, Word – just to name a few. Lucene does not care about the Parsing of these and other document formats, and it is the responsibility of the application using Lucene to use an appropriate Parser to convert the original format into plain text before passing that plain text to Lucene. Tokenization Plain text passed to Lucene for indexing goes through a process generally called tokenization. Tokenization is the process of breaking input text into small indexing elements – tokens. The way input text is broken into tokens heavily influences how people will then be able to search for that text. For instance, sentences beginnings and endings can be identified to provide for more accurate phrase and proximity searches (though sentence identification is not provided by Lucene). In some cases simply breaking the input text into tokens is not enough – a deeper Analysis may be needed. Lucene includes both pre- and post-tokenization analysis facilities. Pre-tokenization analysis can include (but is not limited to) stripping HTML markup, and transforming or removing text matching arbitrary patterns or sets of fixed strings. There are many post-tokenization steps that can be done, including (but not limited to): Stemming – Replacing words with their stems. For instance with English stemming \"bikes\" is replaced with \"bike\"; now query \"bike\" can find both documents containing \"bike\" and those containing \"bikes\". Stop Words Filtering – Common words like \"the\", \"and\" and \"a\" rarely add any value to a search. Removing them shrinks the index size and increases performance. It may also reduce some \"noise\" and actually improve search quality. Text Normalization – Stripping accents and other character markings can make for better searching. Synonym Expansion – Adding in synonyms at the same token position as the current word can mean better matching when users search with words in the synonym set. Core Analysis The analysis package provides the mechanism to convert Strings and Readers into tokens that can be indexed by Lucene. There are four main classes in the package from which all analysis processes are derived. These are: Analyzer – An Analyzer is responsible for building a TokenStream which can be consumed by the indexing and searching processes. See below for more information on implementing your own Analyzer. CharFilter – CharFilter extends {@link java.io.Reader} to perform pre-tokenization substitutions, deletions, and/or insertions on an input Reader's text, while providing corrected character offsets to account for these modifications. This capability allows highlighting to function over the original text when indexed tokens are created from CharFilter-modified text with offsets that are not the same as those in the original text. Tokenizers' constructors and reset() methods accept a CharFilter. CharFilters may be chained to perform multiple pre-tokenization modifications. Tokenizer – A Tokenizer is a TokenStream and is responsible for breaking up incoming text into tokens. In most cases, an Analyzer will use a Tokenizer as the first step in the analysis process. However, to modify text prior to tokenization, use a CharStream subclass (see above). TokenFilter – A TokenFilter is also a TokenStream and is responsible for modifying tokens that have been created by the Tokenizer. Common modifications performed by a TokenFilter are: deletion, stemming, synonym injection, and down casing. Not all Analyzers require TokenFilters. Hints, Tips and Traps The synergy between Analyzer and Tokenizer is sometimes confusing. To ease this confusion, some clarifications: The Analyzer is responsible for the entire task of creating tokens out of the input text, while the Tokenizer is only responsible for breaking the input text into tokens. Very likely, tokens created by the Tokenizer would be modified or even omitted by the Analyzer (via one or more TokenFilter s) before being returned. Tokenizer is a TokenStream , but Analyzer is not. Analyzer is \"field aware\", but Tokenizer is not. Lucene Java provides a number of analysis capabilities, the most commonly used one being the StandardAnalyzer. Many applications will have a long and industrious life with nothing more than the StandardAnalyzer. However, there are a few other classes/packages that are worth mentioning: PerFieldAnalyzerWrapper – Most Analyzers perform the same operation on all Field s. The PerFieldAnalyzerWrapper can be used to associate a different Analyzer with different Field s. The analysis library located at the root of the Lucene distribution has a number of different Analyzer implementations to solve a variety of different problems related to searching. Many of the Analyzers are designed to analyze non-English languages. There are a variety of Tokenizer and TokenFilter implementations in this package. Take a look around, chances are someone has implemented what you need. Analysis is one of the main causes of performance degradation during indexing. Simply put, the more you analyze the slower the indexing (in most cases). Perhaps your application would be just fine using the simple WhitespaceTokenizer combined with a StopFilter. The benchmark/ library can be useful for testing out the speed of the analysis process. Invoking the Analyzer Applications usually do not invoke analysis – Lucene does it for them: At indexing, as a consequence of AddDocument , the Analyzer in effect for indexing is invoked for each indexed field of the added document. At search, a QueryParser may invoke the Analyzer during parsing. Note that for some queries, analysis does not take place, e.g. wildcard queries. However an application might invoke Analysis of any text for testing or for any other purpose, something like: Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY Analyzer analyzer = new StandardAnalyzer(matchVersion); // or any other analyzer TokenStream ts = analyzer.tokenStream(\"myfield\", new StringReader(\"some text goes here\")); OffsetAttribute offsetAtt = ts.addAttribute(OffsetAttribute.class); try { ts.reset(); // Resets this stream to the beginning. (Required) while (ts.incrementToken()) { // Use [#reflectAsString(boolean)](xref:Lucene.Net.Util.AttributeSource) // for token stream debugging. System.out.println(\"token: \" + ts.reflectAsString(true)); System.out.println(\"token start offset: \" + offsetAtt.startOffset()); System.out.println(\" token end offset: \" + offsetAtt.endOffset()); } ts.end(); // Perform end-of-stream operations, e.g. set the final offset. } finally { ts.close(); // Release resources associated with this stream. } Indexing Analysis vs. Search Analysis Selecting the \"correct\" analyzer is crucial for search quality, and can also affect indexing and search performance. The \"correct\" analyzer differs between applications. Lucene java's wiki page AnalysisParalysis provides some data on \"analyzing your analyzer\". Here are some rules of thumb: 1. Test test test... (did we say test?) 2. Beware of over analysis – might hurt indexing performance. 3. Start with same analyzer for indexing and search, otherwise searches would not find what they are supposed to... 4. In some cases a different analyzer is required for indexing and search, for instance: * Certain searches require more stop words to be filtered. (I.e. more than those that were filtered at indexing.) * Query expansion by synonyms, acronyms, auto spell correction, etc. This might sometimes require a modified analyzer – see the next section on how to do that. Implementing your own Analyzer Creating your own Analyzer is straightforward. Your Analyzer can wrap existing analysis components — CharFilter(s) (optional) , a Tokenizer, and TokenFilter(s) (optional) — or components you create, or a combination of existing and newly created components. Before pursuing this approach, you may find it worthwhile to explore the analyzers-common library and/or ask on the java-user@lucene.apache.org mailing list first to see if what you need already exists. If you are still committed to creating your own Analyzer, have a look at the source code of any one of the many samples located in this package. The following sections discuss some aspects of implementing your own analyzer. Field Section Boundaries When Document.add is called multiple times for the same field name, we could say that each such call creates a new section for that field in that document. In fact, a separate call to TokenStream would take place for each of these so called \"sections\". However, the default Analyzer behavior is to treat all these sections as one large section. This allows phrase search and proximity search to seamlessly cross boundaries between these \"sections\". In other words, if a certain field \"f\" is added like this: document.add(new Field(\"f\",\"first ends\",...); document.add(new Field(\"f\",\"starts two\",...); indexWriter.addDocument(document); Then, a phrase search for \"ends starts\" would find that document. Where desired, this behavior can be modified by introducing a \"position gap\" between consecutive field \"sections\", simply by overriding Analyzer.getPositionIncrementGap : Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY Analyzer myAnalyzer = new StandardAnalyzer(matchVersion) { public int getPositionIncrementGap(String fieldName) { return 10; } }; Token Position Increments By default, all tokens created by Analyzers and Tokenizers have a Increment of one. This means that the position stored for that token in the index would be one more than that of the previous token. Recall that phrase and proximity searches rely on position info. If the selected analyzer filters the stop words \"is\" and \"the\", then for a document containing the string \"blue is the sky\", only the tokens \"blue\", \"sky\" are indexed, with position(\"sky\") = 3 + position(\"blue\"). Now, a phrase query \"blue is the sky\" would find that document, because the same analyzer filters the same stop words from that query. But the phrase query \"blue sky\" would not find that document because the position increment between \"blue\" and \"sky\" is only 1. If this behavior does not fit the application needs, the query parser needs to be configured to not take position increments into account when generating phrase queries. Note that a StopFilter MUST increment the position increment in order not to generate corrupt tokenstream graphs. Here is the logic used by StopFilter to increment positions when filtering out tokens: public TokenStream tokenStream(final String fieldName, Reader reader) { final TokenStream ts = someAnalyzer.tokenStream(fieldName, reader); TokenStream res = new TokenStream() { CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); PositionIncrementAttribute posIncrAtt = addAttribute(PositionIncrementAttribute.class); public boolean incrementToken() throws IOException { int extraIncrement = 0; while (true) { boolean hasNext = ts.incrementToken(); if (hasNext) { if (stopWords.contains(termAtt.toString())) { extraIncrement += posIncrAtt.getPositionIncrement(); // filter this word continue; } if (extraIncrement>0) { posIncrAtt.setPositionIncrement(posIncrAtt.getPositionIncrement()+extraIncrement); } } return hasNext; } } }; return res; } A few more use cases for modifying position increments are: Inhibiting phrase and proximity matches in sentence boundaries – for this, a tokenizer that identifies a new sentence can add 1 to the position increment of the first token of the new sentence. Injecting synonyms – here, synonyms of a token should be added after that token, and their position increment should be set to 0. As result, all synonyms of a token would be considered to appear in exactly the same position as that token, and so would they be seen by phrase and proximity searches. Token Position Length By default, all tokens created by Analyzers and Tokenizers have a Length of one. This means that the token occupies a single position. This attribute is not indexed and thus not taken into account for positional queries, but is used by eg. suggesters. The main use case for positions lengths is multi-word synonyms. With single-word synonyms, setting the position increment to 0 is enough to denote the fact that two words are synonyms, for example: Term red magenta Position increment 1 0 Given that position(magenta) = 0 + position(red), they are at the same position, so anything working with analyzers will return the exact same result if you replace \"magenta\" with \"red\" in the input. However, multi-word synonyms are more tricky. Let's say that you want to build a TokenStream where \"IBM\" is a synonym of \"Internal Business Machines\". Position increments are not enough anymore: Term IBM International Business Machines Position increment 1 0 1 1 The problem with this token stream is that \"IBM\" is at the same position as \"International\" although it is a synonym with \"International Business Machines\" as a whole. Setting the position increment of \"Business\" and \"Machines\" to 0 wouldn't help as it would mean than \"International\" is a synonym of \"Business\". The only way to solve this issue is to make \"IBM\" span across 3 positions, this is where position lengths come to rescue. Term IBM International Business Machines Position increment 1 0 1 1 Position length 3 1 1 1 This new attribute makes clear that \"IBM\" and \"International Business Machines\" start and end at the same positions. How to not write corrupt token streams There are a few rules to observe when writing custom Tokenizers and TokenFilters: The first position increment must be > 0. Positions must not go backward. Tokens that have the same start position must have the same start offset. Tokens that have the same end position (taking into account the position length) must have the same end offset. Tokenizers must call #clearAttributes() in incrementToken(). Tokenizers must override #end() , and pass the final offset (the total number of input characters processed) to both parameters of Int) . Although these rules might seem easy to follow, problems can quickly happen when chaining badly implemented filters that play with positions and offsets, such as synonym or n-grams filters. Here are good practices for writing correct filters: Token filters should not modify offsets. If you feel that your filter would need to modify offsets, then it should probably be implemented as a tokenizer. Token filters should not insert positions. If a filter needs to add tokens, then they should all have a position increment of 0. When they add tokens, token filters should call #clearAttributes() first. When they remove tokens, token filters should increment the position increment of the following token. Token filters should preserve position lengths. TokenStream API \"Flexible Indexing\" summarizes the effort of making the Lucene indexer pluggable and extensible for custom index formats. A fully customizable indexer means that users will be able to store custom data structures on disk. Therefore an API is necessary that can transport custom types of data from the documents to the indexer. Attribute and AttributeSource Classes Attribute and AttributeSource serve as the basis upon which the analysis elements of \"Flexible Indexing\" are implemented. An Attribute holds a particular piece of information about a text token. For example, CharTermAttribute contains the term text of a token, and OffsetAttribute contains the start and end character offsets of a token. An AttributeSource is a collection of Attributes with a restriction: there may be only one instance of each attribute type. TokenStream now extends AttributeSource, which means that one can add Attributes to a TokenStream. Since TokenFilter extends TokenStream, all filters are also AttributeSources. Lucene provides seven Attributes out of the box: CharTermAttribute The term text of a token. Implements {@link java.lang.CharSequence} (providing methods length() and charAt(), and allowing e.g. for direct use with regular expression {@link java.util.regex.Matcher}s) and {@link java.lang.Appendable} (allowing the term text to be appended to.) OffsetAttribute The start and end offset of a token in characters. PositionIncrementAttribute See above for detailed information about position increment. PositionLengthAttribute The number of positions occupied by a token. PayloadAttribute The payload that a Token can optionally have. TypeAttribute The type of the token. Default is 'word'. FlagsAttribute Optional flags a token can have. KeywordAttribute Keyword-aware TokenStreams/-Filters skip modification of tokens that return true from this attribute's isKeyword() method. More Requirements for Analysis Component Classes Due to the historical development of the API, there are some perhaps less than obvious requirements to implement analysis components classes. Token Stream Lifetime The code fragment of the analysis workflow protocol above shows a token stream being obtained, used, and then left for garbage. However, that does not mean that the components of that token stream will, in fact, be discarded. The default is just the opposite. Analyzer applies a reuse strategy to the tokenizer and the token filters. It will reuse them. For each new input, it calls #setReader(java.io.Reader) to set the input. Your components must be prepared for this scenario, as described below. Tokenizer You should create your tokenizer class by extending Tokenizer . Your tokenizer must never make direct use of the {@link java.io.Reader} supplied to its constructor(s). (A future release of Apache Lucene may remove the reader parameters from the Tokenizer constructors.) Tokenizer wraps the reader in an object that helps enforce that applications comply with the analysis workflow . Thus, your class should only reference the input via the protected 'input' field of Tokenizer. Your tokenizer must override #end() . Your implementation must call super.end() . It must set a correct final offset into the offset attribute, and finish up and other attributes to reflect the end of the stream. If your tokenizer overrides #reset() or #close() , it must call the corresponding superclass method. Token Filter You should create your token filter class by extending TokenFilter . If your token filter overrides #reset() , #end() or #close() , it must call the corresponding superclass method. Creating delegates Forwarding classes (those which extend Tokenizer but delegate selected logic to another tokenizer) must also set the reader to the delegate in the overridden #reset() method, e.g.: public class ForwardingTokenizer extends Tokenizer { private Tokenizer delegate; ... {@literal @Override} public void reset() { super.reset(); delegate.setReader(this.input); delegate.reset(); } } Testing Your Analysis Component The lucene-test-framework component defines BaseTokenStreamTestCase . By extending this class, you can create JUnit tests that validate that your Analyzer and/or analysis components correctly implement the protocol. The checkRandomData methods of that class are particularly effective in flushing out errors. Using the TokenStream API There are a few important things to know in order to use the new API efficiently which are summarized here. You may want to walk through the example below first and come back to this section afterwards. Please keep in mind that an AttributeSource can only have one instance of a particular Attribute. Furthermore, if a chain of a TokenStream and multiple TokenFilters is used, then all TokenFilters in that chain share the Attributes with the TokenStream. Attribute instances are reused for all tokens of a document. Thus, a TokenStream/-Filter needs to update the appropriate Attribute(s) in incrementToken(). The consumer, commonly the Lucene indexer, consumes the data in the Attributes and then calls incrementToken() again until it returns false, which indicates that the end of the stream was reached. This means that in each call of incrementToken() a TokenStream/-Filter can safely overwrite the data in the Attribute instances. For performance reasons a TokenStream/-Filter should add/get Attributes during instantiation; i.e., create an attribute in the constructor and store references to it in an instance variable. Using an instance variable instead of calling addAttribute()/getAttribute() in incrementToken() will avoid attribute lookups for every token in the document. All methods in AttributeSource are idempotent, which means calling them multiple times always yields the same result. This is especially important to know for addAttribute(). The method takes the type ( Class ) of an Attribute as an argument and returns an instance . If an Attribute of the same type was previously added, then the already existing instance is returned, otherwise a new instance is created and returned. Therefore TokenStreams/-Filters can safely call addAttribute() with the same Attribute type multiple times. Even consumers of TokenStreams should normally call addAttribute() instead of getAttribute(), because it would not fail if the TokenStream does not have this Attribute (getAttribute() would throw an IllegalArgumentException, if the Attribute is missing). More advanced code could simply check with hasAttribute(), if a TokenStream has it, and may conditionally leave out processing for extra performance. Example In this example we will create a WhiteSpaceTokenizer and use a LengthFilter to suppress all words that have only two or fewer characters. The LengthFilter is part of the Lucene core and its implementation will be explained here to illustrate the usage of the TokenStream API. Then we will develop a custom Attribute, a PartOfSpeechAttribute, and add another filter to the chain which utilizes the new custom attribute, and call it PartOfSpeechTaggingFilter. Whitespace tokenization public class MyAnalyzer extends Analyzer { private Version matchVersion; public MyAnalyzer(Version matchVersion) { this.matchVersion = matchVersion; } {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { return new TokenStreamComponents(new WhitespaceTokenizer(matchVersion, reader)); } public static void main(String[] args) throws IOException { // text to tokenize final String text = \"This is a demo of the TokenStream API\"; Version matchVersion = Version.LUCENE_XY; // Substitute desired Lucene version for XY MyAnalyzer analyzer = new MyAnalyzer(matchVersion); TokenStream stream = analyzer.tokenStream(\"field\", new StringReader(text)); // get the CharTermAttribute from the TokenStream CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class); try { stream.reset(); // print all tokens until stream is exhausted while (stream.incrementToken()) { System.out.println(termAtt.toString()); } stream.end(); } finally { stream.close(); } } } In this easy example a simple white space tokenization is performed. In main() a loop consumes the stream and prints the term text of the tokens by accessing the CharTermAttribute that the WhitespaceTokenizer provides. Here is the output: This is a demo of the new TokenStream API Adding a LengthFilter We want to suppress all tokens that have 2 or less characters. We can do that easily by adding a LengthFilter to the chain. Only the createComponents() method in our analyzer needs to be changed: {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { final Tokenizer source = new WhitespaceTokenizer(matchVersion, reader); TokenStream result = new LengthFilter(true, source, 3, Integer.MAX_VALUE); return new TokenStreamComponents(source, result); } Note how now only words with 3 or more characters are contained in the output: This demo the new TokenStream API Now let's take a look how the LengthFilter is implemented: public final class LengthFilter extends FilteringTokenFilter { private final int min; private final int max; private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); /** Create a new LengthFilter. This will filter out tokens whose CharTermAttribute is either too short (< min) or too long (> max). @param version the Lucene match version @param in the TokenStream to consume @param min the minimum length @param max the maximum length */ public LengthFilter(Version version, TokenStream in, int min, int max) { super(version, in); this.min = min; this.max = max; } {@literal @Override} public boolean accept() { final int len = termAtt.length(); return (len >= min && len <= max);=\"\" }=\"\" }=\"\"></=> In LengthFilter, the CharTermAttribute is added and stored in the instance variable termAtt . Remember that there can only be a single instance of CharTermAttribute in the chain, so in our example the addAttribute() call in LengthFilter returns the CharTermAttribute that the WhitespaceTokenizer already added. The tokens are retrieved from the input stream in FilteringTokenFilter's incrementToken() method (see below), which calls LengthFilter's accept() method. By looking at the term text in the CharTermAttribute, the length of the term can be determined and tokens that are either too short or too long are skipped. Note how accept() can efficiently access the instance variable; no attribute lookup is necessary. The same is true for the consumer, which can simply use local references to the Attributes. LengthFilter extends FilteringTokenFilter: public abstract class FilteringTokenFilter extends TokenFilter { private final PositionIncrementAttribute posIncrAtt = addAttribute(PositionIncrementAttribute.class); /** Create a new FilteringTokenFilter. @param in the TokenStream to consume */ public FilteringTokenFilter(Version version, TokenStream in) { super(in); } /** Override this method and return if the current input token should be returned by incrementToken. */ protected abstract boolean accept() throws IOException; {@literal @Override} public final boolean incrementToken() throws IOException { int skippedPositions = 0; while (input.incrementToken()) { if (accept()) { if (skippedPositions != 0) { posIncrAtt.setPositionIncrement(posIncrAtt.getPositionIncrement() + skippedPositions); } return true; } skippedPositions += posIncrAtt.getPositionIncrement(); } // reached EOS -- return false return false; } {@literal @Override} public void reset() throws IOException { super.reset(); } } Adding a custom Attribute Now we're going to implement our own custom Attribute for part-of-speech tagging and call it consequently PartOfSpeechAttribute . First we need to define the interface of the new Attribute: public interface PartOfSpeechAttribute extends Attribute { public static enum PartOfSpeech { Noun, Verb, Adjective, Adverb, Pronoun, Preposition, Conjunction, Article, Unknown } public void setPartOfSpeech(PartOfSpeech pos); public PartOfSpeech getPartOfSpeech(); } Now we also need to write the implementing class. The name of that class is important here: By default, Lucene checks if there is a class with the name of the Attribute with the suffix 'Impl'. In this example, we would consequently call the implementing class PartOfSpeechAttributeImpl . This should be the usual behavior. However, there is also an expert-API that allows changing these naming conventions: AttributeSource.AttributeFactory . The factory accepts an Attribute interface as argument and returns an actual instance. You can implement your own factory if you need to change the default behavior. Now here is the actual class that implements our new Attribute. Notice that the class has to extend <xref:Lucene.Net.Util.AttributeImpl>: public final class PartOfSpeechAttributeImpl extends AttributeImpl implements PartOfSpeechAttribute { private PartOfSpeech pos = PartOfSpeech.Unknown; public void setPartOfSpeech(PartOfSpeech pos) { this.pos = pos; } public PartOfSpeech getPartOfSpeech() { return pos; } {@literal @Override} public void clear() { pos = PartOfSpeech.Unknown; } {@literal @Override} public void copyTo(AttributeImpl target) { ((PartOfSpeechAttribute) target).setPartOfSpeech(pos); } } This is a simple Attribute implementation has only a single variable that stores the part-of-speech of a token. It extends the AttributeImpl class and therefore implements its abstract methods clear() and copyTo() . Now we need a TokenFilter that can set this new PartOfSpeechAttribute for each token. In this example we show a very naive filter that tags every word with a leading upper-case letter as a 'Noun' and all other words as 'Unknown'. public static class PartOfSpeechTaggingFilter extends TokenFilter { PartOfSpeechAttribute posAtt = addAttribute(PartOfSpeechAttribute.class); CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); protected PartOfSpeechTaggingFilter(TokenStream input) { super(input); } public boolean incrementToken() throws IOException { if (!input.incrementToken()) {return false;} posAtt.setPartOfSpeech(determinePOS(termAtt.buffer(), 0, termAtt.length())); return true; } // determine the part of speech for the given term protected PartOfSpeech determinePOS(char[] term, int offset, int length) { // naive implementation that tags every uppercased word as noun if (length > 0 && Character.isUpperCase(term[0])) { return PartOfSpeech.Noun; } return PartOfSpeech.Unknown; } } Just like the LengthFilter, this new filter stores references to the attributes it needs in instance variables. Notice how you only need to pass in the interface of the new Attribute and instantiating the correct class is automatically taken care of. Now we need to add the filter to the chain in MyAnalyzer: {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { final Tokenizer source = new WhitespaceTokenizer(matchVersion, reader); TokenStream result = new LengthFilter(true, source, 3, Integer.MAX_VALUE); result = new PartOfSpeechTaggingFilter(result); return new TokenStreamComponents(source, result); } Now let's look at the output: This demo the new TokenStream API Apparently it hasn't changed, which shows that adding a custom attribute to a TokenStream/Filter chain does not affect any existing consumers, simply because they don't know the new Attribute. Now let's change the consumer to make use of the new PartOfSpeechAttribute and print it out: public static void main(String[] args) throws IOException { // text to tokenize final String text = \"This is a demo of the TokenStream API\"; MyAnalyzer analyzer = new MyAnalyzer(); TokenStream stream = analyzer.tokenStream(\"field\", new StringReader(text)); // get the CharTermAttribute from the TokenStream CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class); // get the PartOfSpeechAttribute from the TokenStream PartOfSpeechAttribute posAtt = stream.addAttribute(PartOfSpeechAttribute.class); try { stream.reset(); // print all tokens until stream is exhausted while (stream.incrementToken()) { System.out.println(termAtt.toString() + \": \" + posAtt.getPartOfSpeech()); } stream.end(); } finally { stream.close(); } } The change that was made is to get the PartOfSpeechAttribute from the TokenStream and print out its contents in the while loop that consumes the stream. Here is the new output: This: Noun demo: Unknown the: Unknown new: Unknown TokenStream: Noun API: Noun Each word is now followed by its assigned PartOfSpeech tag. Of course this is a naive part-of-speech tagging. The word 'This' should not even be tagged as noun; it is only spelled capitalized because it is the first word of a sentence. Actually this is a good opportunity for an exercise. To practice the usage of the new API the reader could now write an Attribute and TokenFilter that can specify for each word if it was the first token of a sentence or not. Then the PartOfSpeechTaggingFilter can make use of this knowledge and only tag capitalized words as nouns if not the first word of a sentence (we know, this is still not a correct behavior, but hey, it's a good exercise). As a small hint, this is how the new Attribute class could begin: public class FirstTokenOfSentenceAttributeImpl extends AttributeImpl implements FirstTokenOfSentenceAttribute { private boolean firstToken; public void setFirstToken(boolean firstToken) { this.firstToken = firstToken; } public boolean getFirstToken() { return firstToken; } {@literal @Override} public void clear() { firstToken = false; } ... Adding a CharFilter chain Analyzers take Java {@link java.io.Reader}s as input. Of course you can wrap your Readers with {@link java.io.FilterReader}s to manipulate content, but this would have the big disadvantage that character offsets might be inconsistent with your original text. CharFilter is designed to allow you to pre-process input like a FilterReader would, but also preserve the original offsets associated with those characters. This way mechanisms like highlighting still work correctly. CharFilters can be chained. Example: public class MyAnalyzer extends Analyzer { {@literal @Override} protected TokenStreamComponents createComponents(String fieldName, Reader reader) { return new TokenStreamComponents(new MyTokenizer(reader)); } {@literal @Override} protected Reader initReader(String fieldName, Reader reader) { // wrap the Reader in a CharFilter chain. return new SecondCharFilter(new FirstCharFilter(reader)); } } Classes Analyzer An Analyzer builds TokenStream s, which analyze text. It thus represents a policy for extracting index terms from text. In order to define what analysis is done, subclasses must define their TokenStreamComponents in CreateComponents(String, TextReader) . The components are then reused in each call to GetTokenStream(String, TextReader) . Simple example: Analyzer analyzer = Analyzer.NewAnonymous(createComponents: (fieldName, reader) => { Tokenizer source = new FooTokenizer(reader); TokenStream filter = new FooFilter(source); filter = new BarFilter(filter); return new TokenStreamComponents(source, filter); }); For more examples, see the Lucene.Net.Analysis namespace documentation. For some concrete implementations bundled with Lucene, look in the analysis modules: Common: Analyzers for indexing content in different languages and domains. ICU: Exposes functionality from ICU to Apache Lucene. Kuromoji: Morphological analyzer for Japanese text. Morfologik: Dictionary-driven lemmatization for the Polish language. Phonetic: Analysis for indexing phonetic signatures (for sounds-alike search). Smart Chinese: Analyzer for Simplified Chinese, which indexes words. Stempel: Algorithmic Stemmer for the Polish Language. UIMA: Analysis integration with Apache UIMA. Analyzer.GlobalReuseStrategy Implementation of ReuseStrategy that reuses the same components for every field. Analyzer.PerFieldReuseStrategy Implementation of ReuseStrategy that reuses components per-field by maintaining a Map of TokenStreamComponents per field name. AnalyzerWrapper Extension to Analyzer suitable for Analyzer s which wrap other Analyzer s. GetWrappedAnalyzer(String) allows the Analyzer to wrap multiple Analyzer s which are selected on a per field basis. WrapComponents(String, TokenStreamComponents) allows the TokenStreamComponents of the wrapped Analyzer to then be wrapped (such as adding a new TokenFilter to form new TokenStreamComponents ). CachingTokenFilter This class can be used if the token attributes of a TokenStream are intended to be consumed more than once. It caches all token attribute states locally in a List. CachingTokenFilter implements the optional method Reset() , which repositions the stream to the first Token . CharFilter Subclasses of CharFilter can be chained to filter a System.IO.TextReader They can be used as System.IO.TextReader with additional offset correction. Tokenizer s will automatically use CorrectOffset(Int32) if a CharFilter subclass is used. This class is abstract: at a minimum you must implement System.IO.TextReader.Read(System.Char[], System.Int32, System.Int32) , transforming the input in some way from m_input , and Correct(Int32) to adjust the offsets to match the originals. You can optionally provide more efficient implementations of additional methods like System.IO.TextReader.Read() , but this is not required. For examples and integration with Analyzer , see the Lucene.Net.Analysis namespace documentation. NumericTokenStream Expert: this class provides a TokenStream for indexing numeric values that can be used by NumericRangeQuery or NumericRangeFilter . Note that for simple usage, Int32Field , Int64Field , SingleField or DoubleField is recommended. These fields disable norms and term freqs, as they are not usually needed during searching. If you need to change these settings, you should use this class. Here's an example usage, for an System.Int32 field: IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, new NumericTokenStream(precisionStep).SetInt32Value(value), fieldType); document.Add(field); For optimal performance, re-use the TokenStream and Field instance for more than one document: NumericTokenStream stream = new NumericTokenStream(precisionStep); IndexableFieldType fieldType = new IndexableFieldType(TextField.TYPE_NOT_STORED) { OmitNorms = true, IndexOptions = IndexOptions.DOCS_ONLY }; Field field = new Field(name, stream, fieldType); Document document = new Document(); document.Add(field); for(all documents) { stream.SetInt32Value(value) writer.AddDocument(document); } this stream is not intended to be used in analyzers; it's more for iterating the different precisions during indexing a specific numeric value. NOTE : as token streams are only consumed once the document is added to the index, if you index more than one numeric field, use a separate NumericTokenStream instance for each. See NumericRangeQuery for more details on the precisionStep parameter as well as how numeric fields work under the hood. @since 2.9 NumericTokenStream.NumericTermAttribute Implementation of NumericTokenStream.INumericTermAttribute . @lucene.internal @since 4.0 ReusableStringReader Internal class to enable reuse of the string reader by GetTokenStream(String, String) ReuseStrategy Strategy defining how TokenStreamComponents are reused per call to GetTokenStream(String, TextReader) . Token A Token is an occurrence of a term from the text of a field. It consists of a term's text, the start and end offset of the term in the text of the field, and a type string. The start and end offsets permit applications to re-associate a token with its source text, e.g., to display highlighted query terms in a document browser, or to show matching text fragments in a KWIC (KeyWord In Context) display, etc. The type is a string, assigned by a lexical analyzer (a.k.a. tokenizer), naming the lexical or syntactic class that the token belongs to. For example an end of sentence marker token might be implemented with type \"eos\". The default token type is \"word\". A Token can optionally have metadata (a.k.a. payload) in the form of a variable length byte array. Use GetPayload() to retrieve the payloads from the index. NOTE: As of 2.9, Token implements all IAttribute interfaces that are part of core Lucene and can be found in the Lucene.Net.Analysis.TokenAttributes namespace. Even though it is not necessary to use Token anymore, with the new TokenStream API it can be used as convenience class that implements all IAttribute s, which is especially useful to easily switch from the old to the new TokenStream API. Tokenizer s and TokenFilter s should try to re-use a Token instance when possible for best performance, by implementing the IncrementToken() API. Failing that, to create a new Token you should first use one of the constructors that starts with null text. To load the token from a char[] use CopyBuffer(Char[], Int32, Int32) . To load from a System.String use SetEmpty() followed by Append(String) or Append(String, Int32, Int32) . Alternatively you can get the Token 's termBuffer by calling either Buffer , if you know that your text is shorter than the capacity of the termBuffer or ResizeBuffer(Int32) , if there is any possibility that you may need to grow the buffer. Fill in the characters of your term into this buffer, with System.String.ToCharArray(System.Int32,System.Int32) if loading from a string, or with System.Array.Copy(System.Array,System.Int32,System.Array,System.Int32,System.Int32) , and finally call SetLength(Int32) to set the length of the term text. See LUCENE-969 for details. Typical Token reuse patterns: Copying text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, startOffset, endOffset[, type]); Copying some text from a string (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(string, 0, string.Length, startOffset, endOffset[, type]); Copying text from char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, 0, buffer.Length, startOffset, endOffset[, type]); Copying some text from a char[] buffer (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(buffer, start, end - start, startOffset, endOffset[, type]); Copying from one one Token to another (type is reset to DEFAULT_TYPE if not specified): return reusableToken.Reinit(source.Buffer, 0, source.Length, source.StartOffset, source.EndOffset[, source.Type]); A few things to note: Clear() initializes all of the fields to default values. this was changed in contrast to Lucene 2.4, but should affect no one. Because TokenStream s can be chained, one cannot assume that the Token 's current type is correct. The startOffset and endOffset represent the start and offset in the source text, so be careful in adjusting them. When caching a reusable token, clone it. When injecting a cached token into a stream that can be reset, clone it again. Please note: With Lucene 3.1, the ToString() method had to be changed to match the ICharSequence interface introduced by the interface ICharTermAttribute . this method now only prints the term text, no additional information anymore. Token.TokenAttributeFactory Expert: Creates a Token.TokenAttributeFactory returning Token as instance for the basic attributes and for all other attributes calls the given delegate factory. @since 3.0 TokenFilter A TokenFilter is a TokenStream whose input is another TokenStream . This is an abstract class; subclasses must override IncrementToken() . Tokenizer A Tokenizer is a TokenStream whose input is a System.IO.TextReader . This is an abstract class; subclasses must override IncrementToken() NOTE: Subclasses overriding IncrementToken() must call ClearAttributes() before setting attributes. TokenStream A TokenStream enumerates the sequence of tokens, either from Field s of a Document or from query text. this is an abstract class; concrete subclasses are: Tokenizer , a TokenStream whose input is a System.IO.TextReader ; and TokenFilter , a TokenStream whose input is another TokenStream . A new TokenStream API has been introduced with Lucene 2.9. this API has moved from being Token -based to IAttribute -based. While Token still exists in 2.9 as a convenience class, the preferred way to store the information of a Token is to use System.Attribute s. TokenStream now extends AttributeSource , which provides access to all of the token IAttribute s for the TokenStream . Note that only one instance per System.Attribute is created and reused for every token. This approach reduces object creation and allows local caching of references to the System.Attribute s. See IncrementToken() for further details. The workflow of the new TokenStream API is as follows: Instantiation of TokenStream / TokenFilter s which add/get attributes to/from the AttributeSource . The consumer calls Reset() . The consumer retrieves attributes from the stream and stores local references to all attributes it wants to access. The consumer calls IncrementToken() until it returns false consuming the attributes after each call. The consumer calls End() so that any end-of-stream operations can be performed. The consumer calls Dispose() to release any resource when finished using the TokenStream . To make sure that filters and consumers know which attributes are available, the attributes must be added during instantiation. Filters and consumers are not required to check for availability of attributes in IncrementToken() . You can find some example code for the new API in the analysis documentation. Sometimes it is desirable to capture a current state of a TokenStream , e.g., for buffering purposes (see CachingTokenFilter , TeeSinkTokenFilter). For this usecase CaptureState() and RestoreState(AttributeSource.State) can be used. The TokenStream -API in Lucene is based on the decorator pattern. Therefore all non-abstract subclasses must be sealed or have at least a sealed implementation of IncrementToken() ! This is checked when assertions are enabled. TokenStreamComponents This class encapsulates the outer components of a token stream. It provides access to the source ( Tokenizer ) and the outer end (sink), an instance of TokenFilter which also serves as the TokenStream returned by GetTokenStream(String, TextReader) . TokenStreamToAutomaton Consumes a TokenStream and creates an Automaton where the transition labels are UTF8 bytes (or Unicode code points if unicodeArcs is true) from the ITermToBytesRefAttribute . Between tokens we insert POS_SEP and for holes we insert HOLE . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces NumericTokenStream.INumericTermAttribute Expert: Use this attribute to get the details of the currently generated token. @lucene.experimental @since 4.0"
  }
}